enterprise symfony architecture (ru)

34
Alexander Lisachenko [email protected] m Enterprise Symfony Architecture

Upload: alexander-lisachenko

Post on 15-Jun-2015

2.258 views

Category:

Technology


2 download

DESCRIPTION

Презентация с доклада на конференции SymfonyCamp-2013

TRANSCRIPT

Page 1: Enterprise Symfony Architecture (RU)

Alexander [email protected]

Enterprise SymfonyArchitecture

Page 2: Enterprise Symfony Architecture (RU)

О докладчике

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

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

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

Twitter: @lisachenko

Github: https://github.com/lisachenko

Page 3: Enterprise Symfony Architecture (RU)

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

Page 4: Enterprise Symfony Architecture (RU)

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

Page 5: Enterprise Symfony Architecture (RU)

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

Наука

Искусство

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

Page 6: Enterprise Symfony Architecture (RU)

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

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

полномочий.

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

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

Page 7: Enterprise Symfony Architecture (RU)

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

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

Архитектура

Время

Деньги

Функции

Enterprise

Page 8: Enterprise Symfony Architecture (RU)

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

Микро

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

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

Макро

Компоненты (LDAP, MQ) Модули Сервисы

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

Page 9: Enterprise Symfony Architecture (RU)

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

Page 10: Enterprise Symfony Architecture (RU)

Микро-архитектура. Стиль кода.

Основной критерий корпоративного кода – читаемость и прозрачность, никакого кунг-фу в виде $$name, цикломатической сложности>20 и разного стиля написания кода.

Page 11: Enterprise Symfony Architecture (RU)

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

Page 12: Enterprise Symfony Architecture (RU)

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

Page 13: Enterprise Symfony Architecture (RU)

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

Page 14: Enterprise Symfony Architecture (RU)

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

getXXX() может вернуть что угодно false, null, etc… - избегаем использования из-за неоднозначности.

requireXXX() – всегда возвращает только один объект, или кидает исключение если их 0, либо больше, чем 1 объект. Избавляемся от всех ненужных проверок в куче мест.

Page 15: Enterprise Symfony Architecture (RU)

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

Model

ViewController

Page 16: Enterprise Symfony Architecture (RU)

Symfony2 не MVC!

Model

ViewController

Page 17: Enterprise Symfony Architecture (RU)

Symfony2 не MVC!

MVC – это старый паттерн, который абсолютно не имеет права на жизнь в приложениях на базе Symfony2. Есть контроллеры, есть отображение,

но что такое модели?

Вы знаете ответ?

Page 18: Enterprise Symfony Architecture (RU)

Symfony2 не MVC!

Открою тайну: моделей нет и не будет!

Есть только сервисы, с которыми надо общаться со стороны контроллеров.

Page 19: Enterprise Symfony Architecture (RU)

Fat Stupid Ugly Controllers

Page 20: Enterprise Symfony Architecture (RU)

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

Только данные! Никаких методов в сущностях. (AR)

Репозитории только для

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

и данных.

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

только примитивные типы: скаляры, массивы, DTO.

Реализуют бизнес-логику.

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

распаковку запроса/упаковку

ответа, а также вызов одного

сервиса

Контроллер

Сервисы

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

Page 21: Enterprise Symfony Architecture (RU)

Хитрости контроллеров

Контролеры возвращают только сырые данные:

Page 22: Enterprise Symfony Architecture (RU)

Хитрости контроллеров

Обрабатываем событие kernel.view и делаем переключение контекстов в зависимости от _format.

Page 23: Enterprise Symfony Architecture (RU)

Корпоративная аутентификация

LDAP

App1

App2

Service1

Service2

Admin

Page 24: Enterprise Symfony Architecture (RU)

Сервисная архитектура (SOA)

Web Services Dependency Injection!

(SOA, англ. service-oriented architecture) — модульный подход к разработке программного обеспечения, основанный на использовании распределённых, слабо заменяемых компонентов, оснащённых стандартизированными интерфейсами для взаимодействия по стандартизированным протоколам.

Page 25: Enterprise Symfony Architecture (RU)

Сервисная архитектура (SOA)

App

Service 1

Service 2

Service 3

Service 4

Service 5

Page 26: Enterprise Symfony Architecture (RU)

Проблема SOA

Page 27: Enterprise Symfony Architecture (RU)

За и против SOA

Преимущества• Независимая

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

коду• Проще управлять• Единственная

ответственность• Проще

масштабировать

Недостатки• Новые точки отказа• Сложный мониторинг• Сложнее отладка

взаимодействия• Управление версиями• Круговые

зависимости (!)• Медленная работа

конечных приложений

Page 28: Enterprise Symfony Architecture (RU)

Failover

Geo Balance

r

Nginx

Varnish

Backend 1

Backend 2

Nginx

Varnish

Backend 3

Backend 4

Page 29: Enterprise Symfony Architecture (RU)

Failover

Virtual Host

HAProxy (DC1)

TCP Service

1

TCP Service

2

HAProxy (DC2)

TCP Service

1

TCP Service

2

Page 30: Enterprise Symfony Architecture (RU)

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

Application

STOMP

Daemon

Page 31: Enterprise Symfony Architecture (RU)

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

1. Enterprise (медленно, но много фишек)

2. Виртуальные очереди3. Отложенные события4. Приоритеты сообщений5. Сетевые мосты (актуально для

нескольких ДЦ)6. Встроенный механизм обработки

сбойных сообщений NACK - DLQ

Page 32: Enterprise Symfony Architecture (RU)

Межпроцесcные события

SF Event

Listener

STOMP

Subscriber

STOMP

SF Event

Page 33: Enterprise Symfony Architecture (RU)

Web Socket

JS Event

JS Handler

Межпроцесcные события

SF Event

Listener

Push Event

Page 34: Enterprise Symfony Architecture (RU)

Контакты

Twitter: @lisachenkoGithub: https://github.com/lisachenkoSkype: X.i.t.m.a.s.t.e.r