enterprise symfony architecture
TRANSCRIPT
О докладчике
Лисаченко Александр
• Руководитель отдела проектирования ПО в Alpari
• Идеолог Symfony2: почти вся инфраструктура на Symfony2, в т.ч. и основной сайт alpari.ru (миллионы хитов в день, BigData при анализе, высокая сложность логики)
Twitter: @lisachenko
Github: https://github.com/lisachenko
2
Что такое архитектура?
3
Архитектура ПО
4
Архитектура ПО
Наука
Искусство
Архитектура ПО
5
Основные идеи архитектуры
Ускорение/удешевление достижения бизнес-цели.
Cнижение сложности системы путем абстракции и
разграничения полномочий.
Достижение производительности, отказоустойчивости и масштабируемости.
6
Проектный треугольник
Время Деньги Функци
и Архитектура
Время
Деньги
Функции
Enterprise
7
Уровни архитектуры
Микро
Стиль кода (SOLID)
Ограничения (хуки, ветки)
Макро
Компоненты (LDAP, MQ)
Модули Сервисы
(SOA) Приложения
8
Микро-архитектура. SOLID
А ты используешь принципы SOLID? 9
Микро-архитектура. SOLID
(S)Ingle Responsibility
• Принцип единственной ответственности. Каждый метод и класс делает свое дело
(O)pen-Closed principle
• Класс должен быть открыт для расширения, но закрыт для изменения
(L)iskov Substitution
• Методы должны работать с подтипами, ничего не зная о них заранее
(I)nterface Segregation
• Лучше много конкретных интерфейсов, чем один гигантский.
(D)ependency Inversion Principle
• Абстракции не должны зависеть от конкретных реализаций. Не проси – тебе дадут
10
Symfony2 – макро-архитектура
View
Controller
Model
11
Symfony2 - это не MVC!
View
Controller
Model???
12
Слои в Symfony2
View
Controller Service
Data Access
13
Корпоративная архитектура SF2
Только данные! Никаких методов в
сущностях. (AR) Репозитории только
для методов поиска/конвертации
данных.
Получают только аргументы и
возвращают только примитивные типы:
скаляры, DTO. Реализуют бизнес-
логику.
Обеспечивает только распаковку
запроса/упаковку ответа, а также вызов
одного сервиса
Контроллер
Сервисы
Источники данных
14
Пример правильного контроллера в коде
Получить запрос
• Request
Разобрать параметры
• $login
• $pass
Вызвать сервис
• UserService -> login()
Вернуть данные
• $isSuccess
15
Толстый тупой уродливый контроллер (ТТУК)
16
Компоненты
Аутенти-фикация
Модуль авториза-
ции
Шина событий
(MQ)
Сервисная шина (SOA)
Failover
17
Корпоративная аутентификация – LDAP/x.509
LDAP
App1
App2
Service1 Service2
Admin
18
Сервисная шина (SOA)
(SOA, англ. service-oriented
architecture) — модульный
подход к разработке
программного обеспечения.
Превращаем сервисы SF2 в
полноценные веб-сервисы и
используем в других
приложениях.
Следуем принципу SRP для
сервисов!
SOA
Service1
Service2
Service3
Service4
Service5
Service6
19
Плюсы и минусы SOA
20
За и против SOA
Преимущества
• Независимая разработка
• Контроль доступа к коду
• Проще управлять
• Единственная ответственность
• Проще масштабировать
Недостатки
• Новые точки отказа
• Сложный мониторинг
• Сложнее отладка взаимодействия
• Управление версиями
• Круговые зависимости (!)
• Медленная работа конечных приложений
21
Failover
Geo Balancer
Nginx
Varnish
Backend 1
Backend 2
Nginx
Varnish
Backend 3
Backend 4
22
Failover
Virtual Host
HAProxy (DC1)
TCP Service 1
TCP Service 2
HAProxy (DC2)
TCP Service 1
TCP Service 2
23
Асинхронный процессинг
Быстрый ответ на запрос
Выполнение работы в фоновом режиме
Результаты в реальном времени
Масштабирование нагрузки
Уведомление других приложений о событиях
24
Асинхронный процессинг
Request
Response Event Push
Event Subscribe
Push Result
Push Async Result
25
Спасибо!
Twitter: @lisachenko
Github: https://github.com/lisachenko
26