3-го сентября состоялась очередная конференция PHP FrameworksDays. Она проводится каждый год осенью и собирает сотни участников из Украины, стран-соседей и ЕС. Спикерами выступают как опытные PHP-разработчики из украинских компаний, так и приглашенные англоязычные гости из разных стран.
К сожалению, я пропустил конференцию в 2015-ом по причине болезни, поэтому в этом году у меня свежие впечатления. Первое, что хотелось бы отметить о PHP FrameworksDays 2016, это то, что конференцию перенесли на начало осени. Раньше она проходила в середине октября, тогда уже прохладнее и меньше световой день. На этот же раз, погода была отличной, и тепло, и солнечно, даже настроение поднялось. Потому что когда на улице сыро и темно, то на конференции клонит в сон :)
Из нашей студии на конференцию поехало трое людей. Собственно я, Андрей Бойчук и Степан Танасийчук. Так как в работе мы используем Symfony, то, конечно же, хотели послушать что-то об этом фреймворке, ну и разбавить «меню» еще какими-то другими темами, чтобы пополнить знания. Главным докладом, на который я ориентировался, должен был стать доклад от разработчиков BlaBlaCar, так как это highload-сервис, написанный на Symfony. Но оказалось, что были доклады и посильнее.
Сначала немного об организации конференции. Она была на высоте. Отличное место проведения, хороший проектор и звук, приятные залы для выступлений, отдельная лаунж-зона с кучей розеток, чтобы подзарядить свой гаджет. Эта лаунж-зона была на балкончике, который выходил на трек Б — можно лежать на груше, заряжать ноутбук и слушать выступление.
Единственное, что глючило — это был wi-fi. Я так и не смог им воспользоваться и переключился на 3G, который иногда пробивался в здание. Также было достаточно спонсоров с интересными подарками. Наверное больше всех ажиотажа вызвал велосипед от Levi9. Анкеты на участие в розыгрыше велосипеда просто расхватали, и мне не досталось. Девушка, которая разыгрывала велосипед, была вынуждена делать ксерокопии, чтобы добавить еще анкет. К сожалению, и этих анкет мне не хватило. Велосипед был простой, городской, без передач, но стильный, в хозяйстве мог бы пригодиться :)
Вторым интересным подарком был эргономичный стол. Если работать на нем стоя и поставить еще беговую дорожку внизу, то можно достичь мультизадачности. Остальные подарки спонсоров и развлечения я проигнорировал. Также хотелось бы отметить хорошую организацию кофе-брейков и обеда. На кофе-брейках всегда было полно снэков и можно было налить себе кофе не выжидая длинной очереди. А обед вообще был бесплатный (ну т.е. включен в цену билета). Можно было даже взять дополнительную порцию, так как хватило всем и еще осталось. Единственный нюанс — зал для обеда не был рассчитан на такое количество посетителей, так что пришлось потесниться.
А теперь вернемся к докладам. Так как потоков было два, то нужно было каждый раз выбирать доклад, который хотелось больше послушать. Первый доклад, который я выбрал, был «Связать и развязать» от Сергея Протько, гостя из Беларуси. В докладе рассказывалось, как управлять сложностью проекта, а именно о разделении системы на модули и взаимосвязи этих модулей между собой, а также о возможных подводных камнях и способах их обхода. Из этого доклада я не взял особо много нового, так как те книги, которые рекомендовал Сергей, я уже давно прочитал. Главный вывод, который я вынес из этого доклада, это то, что нужно больше обращать внимание на Закон Деметры. Он гласит, что модуль должен взаимодействовать только с известными ему модулям и не взаимодействовать с незнакомцами. Это правило характеризует системы с высоким внутренним сцеплением и низкой внешней связанностью, к чему и нужно стремиться.
На второй доклад возник дисбаланс в залах. Видимо Zend Framework 3 не пользуется популярностью у разработчиков, там как в зале осталось меньше половины людей. На параллельном докладе о профилировании в PHP зал был набит людьми под завязку. Конечно интересно послушать о том, как должно происходить профилирование в идеале. Но в реальности почему-то всегда на него нету времени. Ибо бизнес всегда спешит вперед и ставит новые задачи. А ведь так хочется иногда покопаться в коде, что-то оптимизировать и добиться ускорения сайта на несколько процентов. К сожалению, для большинства разработчиков это и останется мечтой. Ну, а если же когда-то это случится, тогда я начну с использования Blackfire — как по мне то, это самый интересный инструмент для профилирования на данный момент.
После первого кофе-брейка я пошел на доклад «Doctrine Best Practices» от одного из разработчиков Doctrine — Марко Пиветта (Marco Pivetta). Доклад оказался немного шокирующим, так как Марко очень жестко прошелся по тому, что следует, а чего не следует делать с помощью Doctrine. В докладе было много полезной информации, так что лучше посмотреть запись выступления:
Меня заинтересовало утверждение Марко о том, что методы в репозитории, которые начинаются с find должны либо возвращать объект, либо возвращать null, а методы, которые начинаются с get должны либо возвращать объект, либо кидать exception. После доклада я поинтересовался у Марко, почему именно так: это какой-то стандарт или просто общепринятое решение? На что Марко доходчиво ответил на примере из реального мира. Когда говоришь «find me some beer», то ты ожидаешь, что пиво могут раздобывать, а может и не раздобудут, а когда говоришь «get me some beer», то подразумеваешь, что если пиво не найдут, то это будет катастрофа. В целом можно согласиться с таким объяснением.
Четвертый доклад, который я пошел слушать — «Data, Context, Interaction — парадигма программирования от автора шаблона MVC». Это было действительно что-то новое и полезное. Конечно, у автора не совсем получилось разбудить зал после вкусного обеда, так как материал был непростой. Я сам не до конца все усвоил, но понял, что в этой парадигме есть потенциал и нужно обратить на нее внимание. Возможно, в будущем она обретет большую популярность.
Пятым докладом на мой выбор был доклад от разработчиков BlaBlaCar об их проекте и использовании в нем Symfony. Сначала французы рассказали о том, как их проект развивался и почему они решили выбрать для последней версии именно Symfony. Каких-то мудрёных трюков программирования они у себя не используют. Акцент в Блаблакаре сделан на генерации событий с помощью EventDispatcher и последующей их асинхронной обработке с помощью RabbitMQ. Вообще, как я понял из слов разработчиков, на RabbitMQ в BlaBlaCar держится все. Ибо это самый популярный способ привнести асинхронность в синхронный PHP. Еще, оказывается, BlaBlaCar до сих пор является одним большим монолитным проектом, который стает все сложнее развивать и поддерживать. И главная проблема, над которой сейчас размышляют разработчики, это варианты разделения монолита на микросервисы. Можем пожелать им только удачи в этом деле.
Ну и последний доклад был от Алексея Петрова — «PHP at Scale: Knowing enough to be dangerous!». Если быть кратким, то смысл доклада такой: в приложениях на PHP можно масштабировать все, кроме самого PHP. Алексей поделился своим опытом масштабирования highload PHP-проектов, дал некоторые рекомендации, что лучше делать, а чего делать не стоит. Советую посмотреть запись его доклада:
После докладов был розыгрыш призов. Кто-то уехал домой на велосипеде, кто-то унес коробку с эргономичным столом. Немного разочаровал подарок от компании Sigma. Они разыграли, по моему мнению, бесполезный приз — All Products Pack от JetBrains. Это годовая лицензия на все продукты (IDE) от JetBrains. Зачем мне, как PHP-разработчику, среды разработки AppCode или CLion (не исключаю, что где-то на этой планете найдется программист, который одновременно пишет на всем), максимум, что я бы еще хотел себе это DataGrip для работы с базами данных. В общем, за эти же деньги можно было разыграть три лицензии чисто на PhpStrom, профита было бы больше.
Отдельного интереса заслуживал конкурс от организаторов — это угадать точное количество участников конференции. За это давали больших PHP-слоников. Я посчитал приблизительно количество стульчиков в двух залах + количество мягких груш, где еще могли бы разместиться участники и у меня получилось 450 мест. Но так как четкого ТЗ не было, я засомневался, стоит ли в это число включать организаторов, операторов и волонтеров. И я все-таки решил добавить еще 18 человек. Получилось 468 у меня. Правильный же ответ оказался — 452 участника (что является рекордом для конференций от FrameworkdsDay). Разница в 16 между правильным ответом и моим, хоть и была мала, но все равно нашлись ответы поточнее и слоны достались другим.
После розыгрыша призов была еще афтепати. Светлое пиво, темное пиво, бутерброды, чипсы и сухарики. К сожалению, из-за того, что лифт отказывался опускаться, когда превышался лимит веса, Андрей несколько раз был вынужден выходить из лифта, чтобы сбросить баланс :) Пока я его ждал внизу, то все темное пиво уже разобрали… Пичалька.
Подведу итоги этой конференции, а именно тренды, которые чаще всего звучали от спикеров и во время разговоров в кулуарах. Итак, первый тренд — это микросервисы. Количество проектов на PHP растет, растет их сложность, увеличивается нагрузка (если сервис популярный). В итоге о масштабировании приходиться думать все чаще и чаще. Разбитие монолита на несколько микросервисов может быть неплохим подспорьем. Пока что PHP-сообщество только начинает делиться опытом разработки с использованием микросервисов. Думаю, что в следующем году большинство докладов будут как раз на эту тему. Также не стоит забывать о Законе Деметры и других умных фишках, о которых пишут в книгах — оказывается они очень даже важны, когда достигаешь определенного уровня. Из технологических решений популярностью на highload-проектах пользуется RabbitMQ, в качестве хранилища MariaDB Galera Cluster. Ну и, конечно, все чаще и чаще слышно об успешном апгрейде своих проектов на PHP7 и получении профита с этого.
Также мы не могли не воспользоваться моментом для апгрейда нашего студийного elePHPant’а. Теперь на нем появился автограф от Андреса Гутьерреза, создателя фреймворка Phalcon.
На этом все. Спасибо организаторам за хорошо спланированную конференцию. Будем ждать следующего PHP FrameworksDay!
P.S. По дороге назад в поезде играли с Андреем в bluetooth-игры и я стал безоговорочным лидером по морскому бою ^_^