PHP подкаст #11

Новый стабильный PHP7.1, Symfony 3.2, дедупликации кеша, React вместо Twig’а, сериализуем руками, RabbitMQ для масштабирования и немного еще с Symfoniacs #10

Скачать mp3 (17Мб)

Главная новость недели — выход новой стабильной версии интерпретатора PHP 7.1. Миновало 6 RC и в обозначенный срок вышла новая стабильная версия.

Коротко обозначу новые фичи:

  • function test(): ?int // nullable type
  • function test(): void // void return type
  • function test(): iterable // iterable pseudo-type
  • if (is_iterable($sth)) { //…
  • private const GRUMPY_CONST = 666; // constant visibility
  • [«a» => $a, «b» => $b, «c» => $c] = [«a» => 1, «b» => 2, «c» => 3]; // list() -> []
  • } catch (Exception1  | Exception2 $e) { //…

Встречайте очередную стабильную версию Symfony 3.2. Перейти на неё очень просто, если вы уже на 3+ версии. Большинство нововведений о введении deprecations, которые будут бросать исключения в Symfony 4. В 3.2 единственным новым компонентом будет Worflow, реализующий сети Петри. Мы обсуждали их в одном из предыдущих подкастов.

Вы, наверное, обратили внимание, что я часто говорю о Symfony и не так часто о других фреймворках. На мой взгляд разработчики из Sensio labs ухватили из других экосистем важнейшие моменты раньше остальных в PHP-мире: микроядро/микрофреймворк, компоненты, которые можно более-менее легко замещать другими, отличная документация (в противовес бедной Zend Framework и не фредли на момент 2-3 летней давности). Тем не менее я хочу чтобы справедливость торжествовала и если вы хотите представлять в этом подкасте другие фреймворки, то прошу присоединяться. Я за разнообразие и конкуренцию. Читать далее PHP подкаст #11

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