enterprise symfony architecture

26
Alexander Lisachenko [email protected] Enterprise Symfony Architecture

Upload: rujeka

Post on 18-Aug-2015

19 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Enterprise symfony architecture

Alexander Lisachenko

[email protected]

Enterprise Symfony

Architecture

Page 2: Enterprise symfony architecture

О докладчике

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

• Руководитель отдела проектирования ПО в Alpari

• Идеолог Symfony2: почти вся инфраструктура на Symfony2, в т.ч. и основной сайт alpari.ru (миллионы хитов в день, BigData при анализе, высокая сложность логики)

Twitter: @lisachenko

Github: https://github.com/lisachenko

2

Page 3: Enterprise symfony architecture

Что такое архитектура?

3

Page 4: Enterprise symfony architecture

Архитектура ПО

4

Page 5: Enterprise symfony architecture

Архитектура ПО

Наука

Искусство

Архитектура ПО

5

Page 6: Enterprise symfony architecture

Основные идеи архитектуры

Ускорение/удешевление достижения бизнес-цели.

Cнижение сложности системы путем абстракции и

разграничения полномочий.

Достижение производительности, отказоустойчивости и масштабируемости.

6

Page 7: Enterprise symfony architecture

Проектный треугольник

Время Деньги Функци

и Архитектура

Время

Деньги

Функции

Enterprise

7

Page 8: Enterprise symfony architecture

Уровни архитектуры

Микро

Стиль кода (SOLID)

Ограничения (хуки, ветки)

Макро

Компоненты (LDAP, MQ)

Модули Сервисы

(SOA) Приложения

8

Page 9: Enterprise symfony architecture

Микро-архитектура. SOLID

А ты используешь принципы SOLID? 9

Page 10: Enterprise symfony architecture

Микро-архитектура. SOLID

(S)Ingle Responsibility

• Принцип единственной ответственности. Каждый метод и класс делает свое дело

(O)pen-Closed principle

• Класс должен быть открыт для расширения, но закрыт для изменения

(L)iskov Substitution

• Методы должны работать с подтипами, ничего не зная о них заранее

(I)nterface Segregation

• Лучше много конкретных интерфейсов, чем один гигантский.

(D)ependency Inversion Principle

• Абстракции не должны зависеть от конкретных реализаций. Не проси – тебе дадут

10

Page 11: Enterprise symfony architecture

Symfony2 – макро-архитектура

View

Controller

Model

11

Page 12: Enterprise symfony architecture

Symfony2 - это не MVC!

View

Controller

Model???

12

Page 13: Enterprise symfony architecture

Слои в Symfony2

View

Controller Service

Data Access

13

Page 14: Enterprise symfony architecture

Корпоративная архитектура SF2

Только данные! Никаких методов в

сущностях. (AR) Репозитории только

для методов поиска/конвертации

данных.

Получают только аргументы и

возвращают только примитивные типы:

скаляры, DTO. Реализуют бизнес-

логику.

Обеспечивает только распаковку

запроса/упаковку ответа, а также вызов

одного сервиса

Контроллер

Сервисы

Источники данных

14

Page 15: Enterprise symfony architecture

Пример правильного контроллера в коде

Получить запрос

• Request

Разобрать параметры

• $login

• $pass

Вызвать сервис

• UserService -> login()

Вернуть данные

• $isSuccess

15

Page 16: Enterprise symfony architecture

Толстый тупой уродливый контроллер (ТТУК)

16

Page 17: Enterprise symfony architecture

Компоненты

Аутенти-фикация

Модуль авториза-

ции

Шина событий

(MQ)

Сервисная шина (SOA)

Failover

17

Page 18: Enterprise symfony architecture

Корпоративная аутентификация – LDAP/x.509

LDAP

App1

App2

Service1 Service2

Admin

18

Page 19: Enterprise symfony architecture

Сервисная шина (SOA)

(SOA, англ. service-oriented

architecture) — модульный

подход к разработке

программного обеспечения.

Превращаем сервисы SF2 в

полноценные веб-сервисы и

используем в других

приложениях.

Следуем принципу SRP для

сервисов!

SOA

Service1

Service2

Service3

Service4

Service5

Service6

19

Page 20: Enterprise symfony architecture

Плюсы и минусы SOA

20

Page 21: Enterprise symfony architecture

За и против SOA

Преимущества

• Независимая разработка

• Контроль доступа к коду

• Проще управлять

• Единственная ответственность

• Проще масштабировать

Недостатки

• Новые точки отказа

• Сложный мониторинг

• Сложнее отладка взаимодействия

• Управление версиями

• Круговые зависимости (!)

• Медленная работа конечных приложений

21

Page 22: Enterprise symfony architecture

Failover

Geo Balancer

Nginx

Varnish

Backend 1

Backend 2

Nginx

Varnish

Backend 3

Backend 4

22

Page 23: Enterprise symfony architecture

Failover

Virtual Host

HAProxy (DC1)

TCP Service 1

TCP Service 2

HAProxy (DC2)

TCP Service 1

TCP Service 2

23

Page 24: Enterprise symfony architecture

Асинхронный процессинг

Быстрый ответ на запрос

Выполнение работы в фоновом режиме

Результаты в реальном времени

Масштабирование нагрузки

Уведомление других приложений о событиях

24

Page 25: Enterprise symfony architecture

Асинхронный процессинг

Request

Response Event Push

Event Subscribe

Push Result

Push Async Result

25

Page 26: Enterprise symfony architecture

Спасибо!

Twitter: @lisachenko

Github: https://github.com/lisachenko

26