23
Слоистая архитектура и Yii Алексей Спиридонов CityPatrol

Слоистая архитектура

  • Upload
    yiiconf

  • View
    1.556

  • Download
    1

Embed Size (px)

DESCRIPTION

— Как развивалась инфраструктура веб-проектов в 2ГИС;— Как не делать один и тот же функционал 5 раз подряд, или слоистая архитектура и выделение общих сервисов;— Сборка приложений из базовых библиотек;— Сложность масштабирования цельной системы и легкость распределенной;— Зоны ответственности групп разработки.

Citation preview

Page 1: Слоистая архитектура

Слоистая архитектура

и YiiАлексей Спиридонов

CityPatrol

Page 2: Слоистая архитектура

От 2х сайтов к 12 сервисам и 3м проектам за 3 года

Этапы развития в 2ГИС

2009

2012

Page 3: Слоистая архитектура

Yii Framework в 2ГИС:

● maps.2gis.ru● flamp.ru● api.2gis.ru как совокупность сервисов

○ catalog.api○ ads.api○ stat.api○ service.api○ transport.api○ partner.api○ и т.д.

● go.2gis.ru● и т.д.

Инфраструктура

Page 4: Слоистая архитектура

Критерии качества системы

● Производительность

● Непрерывное развитие

● Стабильность

● Переиспользование функционала

Page 5: Слоистая архитектура

Что такое слоистая архитектура?

?

Page 6: Слоистая архитектура
Page 7: Слоистая архитектура

Что такое слоистая архитектура?

Page 8: Слоистая архитектура

Что такое слоистая архитектура?

Page 9: Слоистая архитектура

Что такое слоистая архитектура?

Page 10: Слоистая архитектура

Что такое слоистая архитектура?

● Есть четко определенные функциональные зоны● Зоны образуют вертикальную иерархию● Каждая зона несет какую то определенную

ответственность● Нижние зоны ничего не знают про верхние

Каждая такая зона - это слой архитектуры

Page 11: Слоистая архитектура

VS

:( :)

Муки выбора подхода

Page 12: Слоистая архитектура

Компоненты фреймворка

● Приложение (CApplication)

● Модуль (CWebModule)

● MVC Контроллер (CController)

● Расширение (CApplicationComponent)

Page 13: Слоистая архитектура

M+V+C● модель● представление ● контроллер

заменяем на

E+V+C● Extension● представление ● конроллер

Меняем паттерн приложения

Page 14: Слоистая архитектура

Идеальный Extension:

● изолирован, а значит заменим и поддается тестированию

● удобно конфигурируется в main.php● имеет стабильный зафиксированный интерфейс● возвращает чистые данные, а не объекты● реализует некую часть / объект предметной области● имеем свое собственное хранилище данных

Page 15: Слоистая архитектура

Extension 1 :● Своя база данных● ActiveRecord Extension 2 :

● враппер вокруг сервиса○ AMQP○ GeoIP○ Thrift сервис

Extension 3:● врапер вокруг

библиотеки Extension 4:

● враппер к rest сервису

Типичные Extensions

Page 16: Слоистая архитектура
Page 17: Слоистая архитектура
Page 18: Слоистая архитектура

Изолируем функционал в слоях на всех уровнях:

● классы● расширения● сервисы● приложения

Page 19: Слоистая архитектура

Эволюция функциональных блоков происходит безболезненно

Поиск гео-объекта по названию. от 1 класса на PHP к распределенному сервису на C++ без переписывания кода приложения

Page 20: Слоистая архитектура

Простое и легкое управление нагрузкой и надежностью:

● Разделение функционала по серверам становится задачей изменения конфигов.

● Мониторинг нагрузки и поиск проблемных мест.

● Управление требованиями к надежности. Отказ одного функционального блока не затрагивает всю систему.

Page 21: Слоистая архитектура

Масштабирование данных:

● Слабая связанность данных. ● Масштабирование хранища данных за счет

разделения данных по разным базам становится элементарным.

Page 22: Слоистая архитектура

● Проблема сложности системы ● Проблема изменения интерфейсов ● Как предотвращать восходящие зависимости

● Как разворачивать этот клубок на сервера ● Разделение ответственности за компоненты

Проблемы (Последний слайд)

Если превысим время, просьба ведущему прервать, и вынести обсуждение в курилку...

Page 23: Слоистая архитектура

Алексей Спиридонов,ООО CityPatrol, Москва

[email protected]