enterprise symfony architecture (ru)
DESCRIPTION
Презентация с доклада на конференции SymfonyCamp-2013TRANSCRIPT
Alexander [email protected]
Enterprise SymfonyArchitecture
О докладчике
Лисаченко Александр
• Руководитель отдела проектирования ПО в Alpari
• Идеолог Symfony2: почти вся инфраструктура на Symfony2, в т.ч. и основной сайт alpari.ru (миллионы хитов в день, BigData при анализе, высокая сложность логики)
Twitter: @lisachenko
Github: https://github.com/lisachenko
Что такое архитектура?
Архитектура ПО
Архитектура ПО
Наука
Искусство
Архитектура ПО
Основные идеи архитектуры
Cнижение сложности системы путем абстракции и разграничения
полномочий.
Ускорение/удешевление достижения бизнес-цели.
Достижение производительности, отказоустойчивости и масштабируемости.
Проектный треугольник
Время Деньги Функции
Архитектура
Время
Деньги
Функции
Enterprise
Уровни архитектуры
Микро
Стиль кода (SOLID)
Ограничения (хуки, ветки)
Макро
Компоненты (LDAP, MQ) Модули Сервисы
(SOA) Приложения
Микро-архитектура. SOLID
Микро-архитектура. Стиль кода.
Основной критерий корпоративного кода – читаемость и прозрачность, никакого кунг-фу в виде $$name, цикломатической сложности>20 и разного стиля написания кода.
Микро-архитектура. Code Clean
Микро-архитектура. Code Clean
Микро-архитектура. Code Clean
Микро-архитектура. Code Clean
getXXX() может вернуть что угодно false, null, etc… - избегаем использования из-за неоднозначности.
requireXXX() – всегда возвращает только один объект, или кидает исключение если их 0, либо больше, чем 1 объект. Избавляемся от всех ненужных проверок в куче мест.
Макро-архитектура
Model
ViewController
Symfony2 не MVC!
Model
ViewController
Symfony2 не MVC!
MVC – это старый паттерн, который абсолютно не имеет права на жизнь в приложениях на базе Symfony2. Есть контроллеры, есть отображение,
но что такое модели?
Вы знаете ответ?
Symfony2 не MVC!
Открою тайну: моделей нет и не будет!
Есть только сервисы, с которыми надо общаться со стороны контроллеров.
Fat Stupid Ugly Controllers
Корпоративная архитектура SF2
Только данные! Никаких методов в сущностях. (AR)
Репозитории только для
методов поиска/конвертаци
и данных.
Получают только аргументы и возвращают
только примитивные типы: скаляры, массивы, DTO.
Реализуют бизнес-логику.
Обеспечивает только
распаковку запроса/упаковку
ответа, а также вызов одного
сервиса
Контроллер
Сервисы
Источники данных
Хитрости контроллеров
Контролеры возвращают только сырые данные:
Хитрости контроллеров
Обрабатываем событие kernel.view и делаем переключение контекстов в зависимости от _format.
Корпоративная аутентификация
LDAP
App1
App2
Service1
Service2
Admin
Сервисная архитектура (SOA)
Web Services Dependency Injection!
(SOA, англ. service-oriented architecture) — модульный подход к разработке программного обеспечения, основанный на использовании распределённых, слабо заменяемых компонентов, оснащённых стандартизированными интерфейсами для взаимодействия по стандартизированным протоколам.
Сервисная архитектура (SOA)
App
Service 1
Service 2
Service 3
Service 4
Service 5
Проблема SOA
За и против SOA
Преимущества• Независимая
разработка• Контроль доступа к
коду• Проще управлять• Единственная
ответственность• Проще
масштабировать
Недостатки• Новые точки отказа• Сложный мониторинг• Сложнее отладка
взаимодействия• Управление версиями• Круговые
зависимости (!)• Медленная работа
конечных приложений
Failover
Geo Balance
r
Nginx
Varnish
Backend 1
Backend 2
Nginx
Varnish
Backend 3
Backend 4
Failover
Virtual Host
HAProxy (DC1)
TCP Service
1
TCP Service
2
HAProxy (DC2)
TCP Service
1
TCP Service
2
Асинхронный процессинг
Application
STOMP
Daemon
Асинхронный процессинг
1. Enterprise (медленно, но много фишек)
2. Виртуальные очереди3. Отложенные события4. Приоритеты сообщений5. Сетевые мосты (актуально для
нескольких ДЦ)6. Встроенный механизм обработки
сбойных сообщений NACK - DLQ
Межпроцесcные события
SF Event
Listener
STOMP
Subscriber
STOMP
SF Event
Web Socket
JS Event
JS Handler
Межпроцесcные события
SF Event
Listener
Push Event
Контакты
Twitter: @lisachenkoGithub: https://github.com/lisachenkoSkype: X.i.t.m.a.s.t.e.r