PHP подкаст #2

Важное замечание! В подкасте я сказал, что EventDispatcher компонент реализует Oberserver паттерн. Это не так. EventDispatcher компонент реализует Mediator паттерн.

План выпуска:

СКАЧАТЬ mp3 (44Мб)

Павел Савельев из Lamoda об опыте внедрения Silex/Symfony

Прелюдия о размере компании. 3500+ сотрудников и 7 этажей в здании. Что-то вроде этого. ZF2 + Silex для менеджмента тикетов и работы call-центра. Другой компонент также на ZF2 + Silex позволяет организовать эффективную доставку. Студия на ZF2. Doctrine и Monolog были отмечены в стеке. Холивар Angular vs React.

Ильяс Салихов из RetailCRM о построение SaaS-сервисов

Ильяс рассказал о достаточно частных проблемах и решениях. Больше про БД и DevOps как мне показалось.

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

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

Вторая проблема, с которой они столкнулись: шардинг и распределение баз по серверам.

Был упомянут pgbouncer — это прокси к PostgreSQL, которых “держит” соединение. Ильяс упомнянул, что время запросов сократилось в 2-10 раз.

В результате стали упираться в максимальное количество одновременных соединений (max connection) и решили разбить базы по схемам. Не лучший подход, т.к. планировщик выполнения запроса анализирует в PostgreSQL все таблицы всех схем. Решили на одном сервере запускать несколько БД, с ограниченным количеством схем.

Долго происходят миграции, поэтому доработали механизм деплоя.

Не хватило в обзоре архитектурной картинки и стека.

Алексей Медведев из Alpari: Symfony Workflow компонент

Я уже успел попользоваться этим компонентом и вполне им доволен. Что такое Workflow и что такое система управления Workflow? Были упомянуты сети Петри — двудольный ориентированный мультиграф. Вершины, ребра, токены. Workflow-сеть — частный случай сети Петри. В Symfony Workflow вы можете с помощью YAML сконфигурировать граф. Я это делал в своей небольшой задаче вручную. Состояние субъекта определяется сущностью, т.е. значениями аттрибутов этой сущности.

Алексей рассказал об особенностях их WorkflowExtensionsBundle. Особенности: шедулинг (отложенное выполнение transition’a), блокировка переходов с помощью ExpressionLanguage.

Шедулинг реализуется https://github.com/schmittjoh/JMSJobQueueBundle.

Руслан Ханов из Яндекса о Symfony как о микрофреймворке.

Symfony используется в Яндексе. В яндекс доставке. Не знал до этого о существовании такого сервиса. Исторический обзор того как жили при symfony1. Насколько я помню, что название фреймворка писалось с маленькой буквы. Руслан концептуально сравнил микро и макро фреймворки. MicroKernel не нужен!

Марко Пиветта (Ocramius) о проектах с большим горизонтом существования

Замечательный доклад. Марко работает в консалтинговой компании и знает о чем говорит :). Доклад может быть особо полезен для тех, кто пишет публичный код. Абстрактный и о лучших практиках проектирования софта.

Defencive coding по аналогии с defencive driving, т.е. вождением, когда вы допускаете, что другие участники дорожного движения также могут ошибаться. Нужно писать софт так, чтобы те, кто ошибаются понимали в чем их ошибка и делать софт работоспособным даже при условии ошибок пользователя. Читать далее PHP подкаст #2