— Как развивалась инфраструктура веб-проектов в 2ГИС;
— Как не делать один и тот же функционал 5 раз подряд, или слоистая архитектура и выделение общих сервисов;
— Сборка приложений из базовых библиотек;
— Сложность масштабирования цельной системы и легкость распределенной;
— Зоны ответственности групп разработки.
10. Что такое слоистая архитектура?
● Есть четко определенные функциональные зоны
● Зоны образуют вертикальную иерархию
● Каждая зона несет какую то определенную
ответственность
● Нижние зоны ничего не знают про верхние
Каждая такая зона - это слой архитектуры
13. Меняем паттерн приложения
M+V+C
● модель
● представление
● контроллер
заменяем на
E+V+C
● Extension
● представление
● конроллер
14. Идеальный Extension:
● изолирован, а значит заменим и поддается
тестированию
● удобно конфигурируется в main.php
● имеет стабильный зафиксированный интерфейс
● возвращает чистые данные, а не объекты
● реализует некую часть / объект предметной области
● имеем свое собственное хранилище данных
15. Типичные Extensions
Extension 1 :
● Своя база данных
● ActiveRecord Extension 2 :
● враппер вокруг сервиса
○ AMQP
○ GeoIP
○ Thrift сервис
Extension 3:
● врапер вокруг
библиотеки
Extension 4:
● враппер к rest сервису
16.
17.
18. Изолируем функционал в слоях
на всех уровнях:
● классы
● расширения
● сервисы
● приложения
19. Эволюция функциональных блоков происходит
безболезненно
Поиск гео-объекта по названию.
от 1 класса на PHP
к распределенному сервису на C++
без переписывания кода приложения
20. Простое и легкое управление нагрузкой и надежностью:
● Разделение функционала по серверам становится
задачей изменения конфигов.
● Мониторинг нагрузки и поиск проблемных мест.
● Управление требованиями к надежности. Отказ одного
функционального блока не затрагивает всю систему.
21. Масштабирование данных:
● Слабая связанность данных.
● Масштабирование хранища данных за счет
разделения данных по разным базам становится
элементарным.
22. Проблемы (Последний слайд)
● Проблема сложности системы
● Проблема изменения интерфейсов
● Как предотвращать восходящие зависимости
● Как разворачивать этот клубок на сервера
● Разделение ответственности за компоненты
Если превысим время, просьба
ведущему прервать, и вынести
обсуждение в курилку...