Новый стабильный PHP7.1, Symfony 3.2, дедупликации кеша, React вместо Twig’а, сериализуем руками, RabbitMQ для масштабирования и немного еще с Symfoniacs #10
Главная новость недели — выход новой стабильной версии интерпретатора PHP 7.1. Миновало 6 RC и в обозначенный срок вышла новая стабильная версия.
Коротко обозначу новые фичи:
Встречайте очередную стабильную версию Symfony 3.2. Перейти на неё очень просто, если вы уже на 3+ версии. Большинство нововведений о введении deprecations, которые будут бросать исключения в Symfony 4. В 3.2 единственным новым компонентом будет Worflow, реализующий сети Петри. Мы обсуждали их в одном из предыдущих подкастов.
Вы, наверное, обратили внимание, что я часто говорю о Symfony и не так часто о других фреймворках. На мой взгляд разработчики из Sensio labs ухватили из других экосистем важнейшие моменты раньше остальных в PHP-мире: микроядро/микрофреймворк, компоненты, которые можно более-менее легко замещать другими, отличная документация (в противовес бедной Zend Framework и не фредли на момент 2-3 летней давности). Тем не менее я хочу чтобы справедливость торжествовала и если вы хотите представлять в этом подкасте другие фреймворки, то прошу присоединяться. Я за разнообразие и конкуренцию.
Первая статья о кешировании и тех проблемах, с которыми вы можете столкнуться: отсутствие дедупликации при обращении к кешу, кешируемый источник ненадежен. Статья рекламирует Google AppEngine и поэтому в большей степени ориентирована на реализацию на этой платформе. Главная идея статьи: недоверяйте никому. Ни вашему кешу, ни тому, что источник данных для кеша надежен, ни своим пользователям :).
В предыдущем подкасте я говорил о PHPChunkit — утилите для параллельного выполнения тестов. Я же чаще использую paratest (на него есть линк с сайта PHPUnit, а также он поддерживается LiipFunctionalTestBundle) и заметил следующий баг: исключив все группы тесты крашатся. Станьте супергероем и сделайте PR.
Короткая заметка о том, как резловить конфликты в composer.lock файле. Идея в том, что не надо резолвить руками. Просто чекаутитесь на предыдущую версию и запускаете composer require / update.
Обзор Symfoniacs #10 митапа
Глеб Тильтиков рассказал о дизайн паттернах в Symfony-фреймворке. С UML диаграммами и примерами. Упомянул следующие паттерны:
Если вы не поняли отличий Bridge от адаптера или от стратегии, то целью видео и не было дать ясное понимание разницы.
Алексей Кузнецов (8bit) рассказал про AMQP и RabbitMQ для улучшения масштабирования проекта. AMQP может быть использован для взаимодействия микросервисов в микросервисной архитектуре. Предположим, что задача состоит из следующих шагов:
При стандартных монолитных подходах это все делает в одном рантайме. Следующий возможный шаг оптимизации — добавить cron-задачи. Используя же AMQP можно в рантайме выполнить только первые два шага и отдать остальные задачи в очередь. Любопытная опция x-dead-letter-exchange для задания обработчика необработанных сообщений. Можно задавать задержку при помощи x-message-ttl.
Илья Сычев и Алексей Деменьтев (Rambler) затронули тему замены TWIG’а на REACT. Проблема возникает, когда есть необходимость дублировать верстку. Т.е. в одном месте некий виджет рендерится Twig’ом, а в другом должен быть почти таким же, но на реакте. Решение — рендерить на бэкенде на NodeJS.
В этом же видео Кирилл Несмеянов (Rambler) рассказал о стеке для реализации эффективного API. Простой подход — который чаще всего встречается в проектах — это JMS + Doctrine (+ Nelmio для документации). При этом у JMS есть ряд недостатков: медленно, жадные запросы в БД, умеет работать с объектами (через листерены можно добавлять атрибуты, но это скорее костыль). Предложенный путь: брать данные и применять к ним слой презентации и его валидировать.
Никита Самохвалов рассказал про оркестрирование приложений. Но начал с важных вещей: документация до кода, планирование архитектуры. Понравилась идея про смену ролей разработчиков. Периодически разработчики помогают в процессе релиза и отлова багов (документирования багов). Если вы хотите обезопаситься от проблем доступности packagist или недоступности каких-то версий пакетов, то можно использовать satis или toran proxy (коммерческое решение). Использование GitLab для деплоя.
Podchaser is the ultimate destination for podcast data, search, and discovery. Learn More