
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. Якихось складних трюків програмування вони у себе не використовують. Акцент у BlaBlaCar зроблено на генерації подій за допомогою 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 для роботи з базами даних. Загалом, за ці ж гроші можна було б розіграти три ліцензії чисто на PhpStorm, профіту було б більше.
Окремої уваги заслуговував конкурс від організаторів — це вгадати точну кількість учасників конференції. За це давали великих PHP-слоників. Я порахував приблизно кількість стільців у двох залах + кількість м'яких груш, де ще могли б розміститися учасники, і в мене вийшло 450 місць. Але оскільки чіткого ТЗ не було, я засумнівався, чи варто в це число включати організаторів, операторів і волонтерів. І я все-таки вирішив додати ще 18 людей. Вийшло 468 у мене. Правильна ж відповідь виявилася — 452 учасника (що є рекордом для конференцій від FrameworksDay). Різниця в 16 між правильною відповіддю та моєю, хоч і була мала, але все ж таки знайшлися відповіді точніші, і слони дісталися іншим.
Після розіграшу призів була ще афтепаті. Світле пиво, темне пиво, бутерброди, чіпси і сухарики. На жаль, через те, що ліфт відмовлявся опускатися, коли перевищувався ліміт ваги, Андрій кілька разів був змушений виходити з ліфта, щоб скинути баланс :) Поки я його чекав внизу, все темне пиво вже розібрали… Печалька.
Підведу підсумки цієї конференції, а саме тренди, які найчастіше звучали від спікерів і під час розмов у кулуарах. Отже, перший тренд — це мікросервіси. Кількість проектів на PHP зростає, зростає їхня складність, збільшується навантаження (якщо сервіс популярний). В результаті про масштабування доводиться думати все частіше і частіше. Розбиття моноліту на кілька мікросервісів може бути непоганим підспор’ям. Поки що PHP-спільнота лише починає ділитися досвідом розробки з використанням мікросервісів. Думаю, що в наступному році більшість доповідей будуть саме на цю тему. Також не варто забувати про Закон Деметри та інші розумні фішки, про які пишуть у книгах — виявляється, вони дуже важливі, коли досягаєш певного рівня. З технологічних рішень популярністю на highload-проектах користується RabbitMQ, як сховище — MariaDB Galera Cluster. Ну і, звичайно, все частіше і частіше чути про успішний апгрейд своїх проектів на PHP7 і отримання профіту з цього.
Також ми не могли не скористатися моментом для апгрейду нашого студійного elePHPant’а. Тепер на ньому з'явився автограф від Андреса Гутьерреза, творця фреймворка Phalcon.
На цьому все. Дякую організаторам за добре сплановану конференцію. Чекатимемо наступного PHP FrameworksDay!
P.S. Повертаючись назад у поїзді, грали з Андрієм у bluetooth-ігри, і я став беззаперечним лідером по морському бою ^_^