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

Preview:

DESCRIPTION

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

Citation preview

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

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

CityPatrol

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

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

2009

2012

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● и т.д.

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

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

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

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

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

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

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

?

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

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

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

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

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

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

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

VS

:( :)

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

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

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

● Модуль (CWebModule)

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

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

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

заменяем на

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

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

Идеальный Extension:

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

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

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

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

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

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

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

Типичные Extensions

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

spiridonov@citypatrol.ru