enterprise symfony architecture (ru)

Post on 15-Jun-2015

2.260 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

Alexander LisachenkoLisachenko_it@gmail.com

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

top related