enterprise symfony architecture (alexander lisachenko, alpari)

26
Alexander Lisachenko [email protected] Enterprise Symfony Architecture

Upload: symfoniacs

Post on 15-Aug-2015

219 views

Category:

Software


2 download

TRANSCRIPT

Alexander Lisachenko

[email protected]

Enterprise Symfony

Architecture

О докладчике

Лисаченко Александр

• Руководитель отдела проектирования ПО в 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