SlideShare a Scribd company logo
1 of 34
Enterprise Symfony
Architecture
Alexander Lisachenko
Lisachenko_it@gmail.com
О докладчике
Лисаченко Александр

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

Controller

View
Symfony2 не MVC!

Model

Controller

View
Symfony2 не MVC!

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

Вы знаете ответ?
Symfony2 не MVC!

Открою тайну: моделей нет и не будет!
Есть только сервисы, с которыми надо общаться
со стороны контроллеров.
Fat Stupid Ugly Controllers
Корпоративная архитектура SF2
Обеспечивает только
распаковку
запроса/упаковку
ответа, а также вызов
одного сервиса

Контроллер

Получают только
аргументы и
возвращают только
примитивные типы:
скаляры, массивы, DT
O. Реализуют бизнеслогику.

Сервисы

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

Источники
данных
Хитрости контроллеров
Контролеры возвращают только сырые данные:
Хитрости контроллеров
Обрабатываем событие kernel.view и делаем переключение
контекстов в зависимости от _format.
Корпоративная аутентификация

App1

Admin

App2

LDAP

Service2

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

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

Service
1

Service
5

Service
2

App
Service
4

Service
3
Проблема SOA
За и против SOA

Недостатки

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

• Новые точки отказа
• Сложный мониторинг
• Сложнее отладка
взаимодействия
• Управление версиями
• Круговые зависимости (!)
• Медленная работа
конечных приложений

•
•
•
•

Независимая разработка
Контроль доступа к коду
Проще управлять
Единственная
ответственность
• Проще масштабировать
Failover
Geo
Balancer

Nginx

Nginx

Varnish

Varnish

Backend
1

Backend
2

Backend
3

Backend
4
Failover

Virtual
Host

HAProxy
(DC1)

TCP
Service 1

TCP
Service 2

HAProxy
(DC2)

TCP
Service 1

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

Daemon

STOMP

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

Enterprise (медленно, но много фишек)
Виртуальные очереди
Отложенные события
Приоритеты сообщений
Сетевые мосты (актуально для
нескольких ДЦ)
6. Встроенный механизм обработки
сбойных сообщений NACK - DLQ
1.
2.
3.
4.
5.
Межпроцесcные события

SF Event

Listener

STOMP

Subscriber

STOMP

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

SF Event

Listener

Push
Event

Web
Socket

JS Event

JS
Handler
Контакты

Twitter: @lisachenko
Github: https://github.com/lisachenko
Skype: X.i.t.m.a.s.t.e.r

More Related Content

Viewers also liked

Handling 10k requests per second with Symfony and Varnish - SymfonyCon Berlin...
Handling 10k requests per second with Symfony and Varnish - SymfonyCon Berlin...Handling 10k requests per second with Symfony and Varnish - SymfonyCon Berlin...
Handling 10k requests per second with Symfony and Varnish - SymfonyCon Berlin...Alexander Lisachenko
 
Weaving aspects in PHP with the help of Go! AOP library
Weaving aspects in PHP with the help of Go! AOP libraryWeaving aspects in PHP with the help of Go! AOP library
Weaving aspects in PHP with the help of Go! AOP libraryAlexander Lisachenko
 
Enterprise symfony architecture (Alexander Lisachenko, Alpari)
Enterprise symfony architecture (Alexander Lisachenko, Alpari)Enterprise symfony architecture (Alexander Lisachenko, Alpari)
Enterprise symfony architecture (Alexander Lisachenko, Alpari)Symfoniacs
 
Принципы объектно-ориентированного дизайна
Принципы объектно-ориентированного дизайнаПринципы объектно-ориентированного дизайна
Принципы объектно-ориентированного дизайнаСергей Шебанин
 
MVP & Startup, with OpenSource Software and Microsoft Azure
MVP & Startup, with OpenSource Software and Microsoft AzureMVP & Startup, with OpenSource Software and Microsoft Azure
MVP & Startup, with OpenSource Software and Microsoft AzureFrancesco Fullone
 
Practical cheminformatics workflows with mobile apps
Practical cheminformatics workflows with mobile appsPractical cheminformatics workflows with mobile apps
Practical cheminformatics workflows with mobile appsAlex Clark
 
Digital Solutions With MultiSoft
Digital Solutions With MultiSoftDigital Solutions With MultiSoft
Digital Solutions With MultiSoftRobert Proctor
 
Private Detective in Jalandhar
Private Detective in Jalandhar Private Detective in Jalandhar
Private Detective in Jalandhar Punjab Detective
 
Untitled Presentation
Untitled PresentationUntitled Presentation
Untitled PresentationBITCOIN INDIA
 
How to Teach Like an Award-winning Instructor
How to Teach Like an Award-winning InstructorHow to Teach Like an Award-winning Instructor
How to Teach Like an Award-winning InstructorJoel Gardner
 
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2Fabien Potencier
 
How to Get Started as a Web Entrepreneur
How to Get Started as a Web EntrepreneurHow to Get Started as a Web Entrepreneur
How to Get Started as a Web EntrepreneurEnvato
 
How JESS3 Saved Christmas!
How JESS3 Saved Christmas!How JESS3 Saved Christmas!
How JESS3 Saved Christmas!JESS3
 
Modern Architectural Masterpieces - design masterpieces
Modern Architectural Masterpieces -  design  masterpiecesModern Architectural Masterpieces -  design  masterpieces
Modern Architectural Masterpieces - design masterpiecesMakala D.
 
Embracing Iterative Design
Embracing Iterative DesignEmbracing Iterative Design
Embracing Iterative DesignMike Rohde
 
Supply Chain Insights' Financial Benchmarking Examples - 27 AUG 2013
Supply Chain Insights' Financial Benchmarking Examples - 27 AUG 2013Supply Chain Insights' Financial Benchmarking Examples - 27 AUG 2013
Supply Chain Insights' Financial Benchmarking Examples - 27 AUG 2013Lora Cecere
 
F inland and the helsinki spring 090811
F inland and the helsinki spring 090811F inland and the helsinki spring 090811
F inland and the helsinki spring 090811Stanford University
 

Viewers also liked (19)

Handling 10k requests per second with Symfony and Varnish - SymfonyCon Berlin...
Handling 10k requests per second with Symfony and Varnish - SymfonyCon Berlin...Handling 10k requests per second with Symfony and Varnish - SymfonyCon Berlin...
Handling 10k requests per second with Symfony and Varnish - SymfonyCon Berlin...
 
Weaving aspects in PHP with the help of Go! AOP library
Weaving aspects in PHP with the help of Go! AOP libraryWeaving aspects in PHP with the help of Go! AOP library
Weaving aspects in PHP with the help of Go! AOP library
 
Enterprise symfony architecture (Alexander Lisachenko, Alpari)
Enterprise symfony architecture (Alexander Lisachenko, Alpari)Enterprise symfony architecture (Alexander Lisachenko, Alpari)
Enterprise symfony architecture (Alexander Lisachenko, Alpari)
 
Принципы объектно-ориентированного дизайна
Принципы объектно-ориентированного дизайнаПринципы объектно-ориентированного дизайна
Принципы объектно-ориентированного дизайна
 
Symfony Components
Symfony ComponentsSymfony Components
Symfony Components
 
MVP & Startup, with OpenSource Software and Microsoft Azure
MVP & Startup, with OpenSource Software and Microsoft AzureMVP & Startup, with OpenSource Software and Microsoft Azure
MVP & Startup, with OpenSource Software and Microsoft Azure
 
Practical cheminformatics workflows with mobile apps
Practical cheminformatics workflows with mobile appsPractical cheminformatics workflows with mobile apps
Practical cheminformatics workflows with mobile apps
 
Digital Solutions With MultiSoft
Digital Solutions With MultiSoftDigital Solutions With MultiSoft
Digital Solutions With MultiSoft
 
Aнглийский сленг (P-T)
Aнглийский сленг (P-T)Aнглийский сленг (P-T)
Aнглийский сленг (P-T)
 
Private Detective in Jalandhar
Private Detective in Jalandhar Private Detective in Jalandhar
Private Detective in Jalandhar
 
Untitled Presentation
Untitled PresentationUntitled Presentation
Untitled Presentation
 
How to Teach Like an Award-winning Instructor
How to Teach Like an Award-winning InstructorHow to Teach Like an Award-winning Instructor
How to Teach Like an Award-winning Instructor
 
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
 
How to Get Started as a Web Entrepreneur
How to Get Started as a Web EntrepreneurHow to Get Started as a Web Entrepreneur
How to Get Started as a Web Entrepreneur
 
How JESS3 Saved Christmas!
How JESS3 Saved Christmas!How JESS3 Saved Christmas!
How JESS3 Saved Christmas!
 
Modern Architectural Masterpieces - design masterpieces
Modern Architectural Masterpieces -  design  masterpiecesModern Architectural Masterpieces -  design  masterpieces
Modern Architectural Masterpieces - design masterpieces
 
Embracing Iterative Design
Embracing Iterative DesignEmbracing Iterative Design
Embracing Iterative Design
 
Supply Chain Insights' Financial Benchmarking Examples - 27 AUG 2013
Supply Chain Insights' Financial Benchmarking Examples - 27 AUG 2013Supply Chain Insights' Financial Benchmarking Examples - 27 AUG 2013
Supply Chain Insights' Financial Benchmarking Examples - 27 AUG 2013
 
F inland and the helsinki spring 090811
F inland and the helsinki spring 090811F inland and the helsinki spring 090811
F inland and the helsinki spring 090811
 

Similar to Enterprise Symfony Architecture (RU)

Две крупные рыбы: One Identity Manager и Solar inRights
Две крупные рыбы: One Identity Manager и Solar inRightsДве крупные рыбы: One Identity Manager и Solar inRights
Две крупные рыбы: One Identity Manager и Solar inRightsКРОК
 
Микросервисы в .NET Core
Микросервисы в .NET CoreМикросервисы в .NET Core
Микросервисы в .NET CoreAndrew Gubskiy
 
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDKПрограммируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDKCisco Russia
 
SDN в корпоративных сетях
SDN в корпоративных сетяхSDN в корпоративных сетях
SDN в корпоративных сетяхCisco Russia
 
DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей
DUMP-2013 Serverside - Разработка развесистого API - Коржнев СергейDUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей
DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергейit-people
 
AiCare - самоорганизующийся сервис управления
AiCare - самоорганизующийся сервис управленияAiCare - самоорганизующийся сервис управления
AiCare - самоорганизующийся сервис управленияКварта Технологии
 
Клуб Архитекторов 22.04.2010
Клуб Архитекторов 22.04.2010Клуб Архитекторов 22.04.2010
Клуб Архитекторов 22.04.2010Sergey Orlik
 
Доклад и реферат по теме системной инженерии "Управление архитектурой при про...
Доклад и реферат по теме системной инженерии "Управление архитектурой при про...Доклад и реферат по теме системной инженерии "Управление архитектурой при про...
Доклад и реферат по теме системной инженерии "Управление архитектурой при про...Anatoly Simkin
 
Роль бизнес аналитика в разработке собственной Business Rule Engine с нуля ка...
Роль бизнес аналитика в разработке собственной Business Rule Engine с нуля ка...Роль бизнес аналитика в разработке собственной Business Rule Engine с нуля ка...
Роль бизнес аналитика в разработке собственной Business Rule Engine с нуля ка...SQALab
 
Обзор OMNITRACKER CleverENGINE
Обзор OMNITRACKER CleverENGINEОбзор OMNITRACKER CleverENGINE
Обзор OMNITRACKER CleverENGINECleverics
 
Миграция кода с Magento 1 на Magento 2
Миграция кода с Magento 1 на Magento 2Миграция кода с Magento 1 на Magento 2
Миграция кода с Magento 1 на Magento 2Elogic Magento Development
 
Lotus Forum 2009 Websphere Portal 6.1
Lotus Forum 2009 Websphere Portal 6.1Lotus Forum 2009 Websphere Portal 6.1
Lotus Forum 2009 Websphere Portal 6.1guestcaef82
 
Что вас ждет на пути реализации Soa (Битрикс отступает)
Что вас ждет на пути реализации Soa (Битрикс отступает)Что вас ждет на пути реализации Soa (Битрикс отступает)
Что вас ждет на пути реализации Soa (Битрикс отступает)Василий Савунов
 
раубичи ронд
раубичи рондраубичи ронд
раубичи рондzolik
 
битрикс Framework сергей рыжиков
битрикс Framework   сергей рыжиковбитрикс Framework   сергей рыжиков
битрикс Framework сергей рыжиковMedia Gorod
 
Разработка требований и Проектирование интерфейсов
Разработка требований и Проектирование интерфейсовРазработка требований и Проектирование интерфейсов
Разработка требований и Проектирование интерфейсовDenis Beskov
 
06 Архитектура информационных систем. Паттерны и фреймворки
06 Архитектура информационных систем. Паттерны и фреймворки06 Архитектура информационных систем. Паттерны и фреймворки
06 Архитектура информационных систем. Паттерны и фреймворкиEdward Galiaskarov
 
Тимур Лукин - Архитектура и проектирование ПО
Тимур Лукин - Архитектура и проектирование ПОТимур Лукин - Архитектура и проектирование ПО
Тимур Лукин - Архитектура и проектирование ПОYandex
 

Similar to Enterprise Symfony Architecture (RU) (20)

Две крупные рыбы: One Identity Manager и Solar inRights
Две крупные рыбы: One Identity Manager и Solar inRightsДве крупные рыбы: One Identity Manager и Solar inRights
Две крупные рыбы: One Identity Manager и Solar inRights
 
Микросервисы в .NET Core
Микросервисы в .NET CoreМикросервисы в .NET Core
Микросервисы в .NET Core
 
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDKПрограммируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
 
SDN в корпоративных сетях
SDN в корпоративных сетяхSDN в корпоративных сетях
SDN в корпоративных сетях
 
DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей
DUMP-2013 Serverside - Разработка развесистого API - Коржнев СергейDUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей
DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей
 
AiCare - self-organizing device management service
AiCare - self-organizing device management serviceAiCare - self-organizing device management service
AiCare - self-organizing device management service
 
AiCare - самоорганизующийся сервис управления
AiCare - самоорганизующийся сервис управленияAiCare - самоорганизующийся сервис управления
AiCare - самоорганизующийся сервис управления
 
Клуб Архитекторов 22.04.2010
Клуб Архитекторов 22.04.2010Клуб Архитекторов 22.04.2010
Клуб Архитекторов 22.04.2010
 
Доклад и реферат по теме системной инженерии "Управление архитектурой при про...
Доклад и реферат по теме системной инженерии "Управление архитектурой при про...Доклад и реферат по теме системной инженерии "Управление архитектурой при про...
Доклад и реферат по теме системной инженерии "Управление архитектурой при про...
 
Роль бизнес аналитика в разработке собственной Business Rule Engine с нуля ка...
Роль бизнес аналитика в разработке собственной Business Rule Engine с нуля ка...Роль бизнес аналитика в разработке собственной Business Rule Engine с нуля ка...
Роль бизнес аналитика в разработке собственной Business Rule Engine с нуля ка...
 
Обзор OMNITRACKER CleverENGINE
Обзор OMNITRACKER CleverENGINEОбзор OMNITRACKER CleverENGINE
Обзор OMNITRACKER CleverENGINE
 
Миграция кода с Magento 1 на Magento 2
Миграция кода с Magento 1 на Magento 2Миграция кода с Magento 1 на Magento 2
Миграция кода с Magento 1 на Magento 2
 
Lotus Forum 2009 Websphere Portal 6.1
Lotus Forum 2009 Websphere Portal 6.1Lotus Forum 2009 Websphere Portal 6.1
Lotus Forum 2009 Websphere Portal 6.1
 
Что вас ждет на пути реализации Soa (Битрикс отступает)
Что вас ждет на пути реализации Soa (Битрикс отступает)Что вас ждет на пути реализации Soa (Битрикс отступает)
Что вас ждет на пути реализации Soa (Битрикс отступает)
 
раубичи ронд
раубичи рондраубичи ронд
раубичи ронд
 
битрикс Framework сергей рыжиков
битрикс Framework   сергей рыжиковбитрикс Framework   сергей рыжиков
битрикс Framework сергей рыжиков
 
Разработка требований и Проектирование интерфейсов
Разработка требований и Проектирование интерфейсовРазработка требований и Проектирование интерфейсов
Разработка требований и Проектирование интерфейсов
 
06 Архитектура информационных систем. Паттерны и фреймворки
06 Архитектура информационных систем. Паттерны и фреймворки06 Архитектура информационных систем. Паттерны и фреймворки
06 Архитектура информационных систем. Паттерны и фреймворки
 
Тимур Лукин - Архитектура и проектирование ПО
Тимур Лукин - Архитектура и проектирование ПОТимур Лукин - Архитектура и проектирование ПО
Тимур Лукин - Архитектура и проектирование ПО
 
Битрикс-Framework
Битрикс-FrameworkБитрикс-Framework
Битрикс-Framework
 

Enterprise Symfony Architecture (RU)

Editor's Notes

  1. Невозможно изменить бюджет, расписание или область охвата проекта, не повлияв по крайней мере на один из других факторов.Чтобы приблизить дату окончания (время), вы можете потратить больше ресурсов (деньги) или убрать некоторые возможности (функции), чтобы было меньше работы.Чтобы сделать проект в рамках бюджета (деньги), вы можете не оплачивать сверхурочные и закончить проект позднее (время) либо сократить возможности продукта (функции).Чтобы добавить в продукт новые возможности (функции), вы можете продлить крайний срок, чтобы выделить время на новые задачи (время), или привлечь новых людей, чтобы работать быстрее (затраты). Можно также сделать и то, и другое!