Слоистая архитектура
description
Transcript of Слоистая архитектура
Слоистая архитектура
и 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, Москва