В 2022 году конференция PHP Russia пройдёт в рамках HighLoad++ 2022.
Материалы PHP Russia 2021 тут.

PHP Russia: Реальный опыт (7)

Внедряем скоростное мутационное тестирование

Мутационное тестирование помогает убедиться в качестве тестов, что тесты действительно проверяют код, а не просто покрывают его вызовами.
В этом докладе я расскажу о том, как мы у себя в команде внедрили этот инструмент и как он помог нам с нашими тестами. Не обойду стороной плюсы и минусы инструмента и наши планы по работе с ним.

Доклад принят в программу конференции

Тестирование на бэкенде. Пирамида, моки, покрытие.

Все мы знаем насколько важны тесты. Также все мы хоть раз в какой-нибудь статье, презентации или книжке видели пирамиду тестирования, где в качестве уровней выступают различные виды тестов, такие как функциональные, интеграционные и unit-тесты. Везде описаны бенефиты, которые можно получить, правильно выстроив пирамиду тестирования. Однако на практике, зачастую, трудно разобраться, чем отличается один вид тестов от другого, в каком случае стоит написать unit, а в каком интеграционный или может вообще функциональный? А сколько тестов стоит написать на одну фичу? А нужно ли 100% покрытие кода? В этом всем еще предстоит разобраться…

В ходе доклада рассмотрим следующее:
- Что из себя представляет пирамида тестирования на бэкенде
- Почему важно задействовать все виды тестов
- Расскажу и покажу на примерах как разделять границы и сформировать пирамиду тестирования на примерах юнит, интеграционных, функциональных тестов
- Как правильно формировать тест-кейсы
- Что стоит покрывать тестами, а что можно оставить без покрытия
- Что нужно мокать в тестах, а что нет
- Как можно переиспользовать моки

Доклад принят в программу конференции

Приоритезация задач в тикетной системе: как мы ежедневно выставляем веса тысячам тасков

Одна из фишек проекта Customer Support — приоритезация тикетов. Команде прилетают 100-200 задач в минуту: ученик пропустил урок или его нужно разбудить, опоздал учитель, возникла другая проблема или задача. А дальше этот поток тасков нужно упорядочить по важности, пропустив горящие вперед. Тикетная система у нас выстроена круто, операторы редко приходят с жалобами. При этом, часто добавляются новые команды, количество задач растет. Расскажу про процесс приоритезации со стороны разработки и бизнеса:

* Какие коэффициенты и подходы взяли, чтобы рассчитывать веса, и почему.
* Теория игр — как быть, если у задачи целый набор обстоятельств. Порой неочевидных.
* Заезжает новая группа, нужна стратегия. Мы сделали процесс добавления стратегий универсальным.
* Ручные задачи, автоматические и отложенные. Как уживаются между собой.
* Как SLA влияет на вес задачи.

Доклад принят в программу конференции

Функциональное тестирование версионированных Web API с помощью фреймворка Behat. Оптимизация времени прохождения тестов.

В своем докладе «Версионирование API или Единая кодовая база для всех версий» на предыдущей конференции PHP Russia'21 я коротко рассказал о том, как благодаря нашему подходу к версионированию API мы добились существенного сокращения времени прохождения тестов. Я обещал, что вернусь и расскажу о том, как же именно мы тестируем версии нашего API.
В докладе я расскажу о популярном для PHP фреймворке для функционального тестирования Behat и языкe Gherkin. О том, как с их помощью мы тестируем поведение эндпоинтов нашего API, и как мы расширили функционал фреймворка для тестирования поведения разных версий API. Как боролись с ростом времени прохождения тестов, обусловленным ростом числа поддерживаемых версий, и как победили этот рост.

Доклад принят в программу конференции

RoadRunner как grpc-сервер для PHP

Сергей Кирьяков

Лента Онлайн

1. Почему RoadRunner и PHP
2. Какие были альтернативы
3. С чем пришлось столкнуться
4. benchmark

Доклад принят в программу конференции

Прикладное автоматное программирование. Как построить чат-бота и не погрязнуть в ветвлениях.

В процессе поиска работы соискатели тратят время на общение с рекрутерами, которое — давайте будем откровенны, — далеко не всегда приводит к желаемому результату. А что если автоматизировать эту рутину? Мы задались этим вопросом и решили создать HR-бота, который поможет соискателям и рекрутерам упростить взаимодействие, не отвлекаться на звонки и решить все вопросы в мессенджере.
В докладе на примере нашего сервиса расскажу, что такое автоматное программирование, плюсы и минусы парадигмы, а так же как она поможет в решении проблем роста сложности и постоянного изменения сценариев бота, с которыми мы столкнулись во время разработки.

Также расскажу о подводных камнях, с которыми столкнулись во время реализации, о том, как мы их обходили, и о пользе, которую нам принес выбранный подход.
Покажу кейсы использования сценариев не только для общения через мессенджеры.

Доклад принят в программу конференции

Безболезненная подгрузка миллионов товаров с сотен интернет магазинов на PHP

1) Скачивание товарного каталога
архитектура, реализация на Laravel JOBах(уникализация задач, блокировки)
проблемы:
SSL
Невалидные файлы
Слегка невалидные файлы
Медлено загружающиеся файлы
Большие XML файлы
Кодировка исходных файлов
GZIP
Решения:
много алертов
толерантность к ошибкам в исходных файлах
экономия памяти
ретраи и кул-дауны

2) Оптимизация пред-обработки
а) контроль утечек памяти
б) разнесение нагрузки по воркерам

3) Оптимизация вставки в Mysql
а) Батчинг
б) Оптимизация типов данных
в) оптимизация прцоеса вставки


4) Оптимизация вставки в Elasticsearch\opensearch
а) отключение индексации на период вставки
б) батчинг

5) Оптимизация поиска
а) бесшовное переключение поискового индекса
б) очистка старых индексов(истории фейлов)

Доклад принят в программу конференции

PHP Russia: Внутренности PHP (1)

PHP generics

Я расскажу:
* о том, что полезно использовать типы даже в динамическом слаботипизированном PHP;
* какие есть проблемы с реализацей дженериков в нативном PHP через momonorphization, reification и type-erasure;
* своем опыте реализации дженериков на PHP.

Доклад принят в программу конференции

PHP Russia: Архитектура и масштабируемость (2)

Честные модули внутри монолита, или когда Composer не подходит

Когда у вас очень много кода, его связность неуклонно растёт. Всё переплетено, и нельзя взять и переместить какую-то часть в отдельный пакет — каждая часть сотнями щупалец склеена с остальным монолитом. Нет-нет, да и вставят разработчики новые зависимости, срезая углы, "потому что надо было ещё вчера", и шансы распутать клубок с течением времени стремятся к нулю. В докладе я покажу новый инструмент, который мы создали внутри ВКонтакте, чтобы ограничить разрастание энтропии внутри нашего монолита — и, традиционно, он будет открыт и может быть использован вне ВК тоже.

Доклад принят в программу конференции

Круглый стол "Domain Driven Design и PHP: идеальная пара или натягивание совы на глобус?"

В мире PHP Domain Driven Design - популярный подход. Его стратегическая часть DDD (единый язык и ограниченные контексты) мало зависит от конкретного языка разработки. А вот тактическая - очень даже, ведь она как раз и направлена на реализацию стратегической части в коде. На круглом столе обсудим:
* почему PHP-разработчики любят DDD
* какие возможности языка помогают реализации DDD, а какие - мешают
* в чем отличие реализаций на других языках

Доклад принят в программу конференции

PHP Russia: Базы данных и ORM (1)

Хождение по граблям PDO

О том, что скрывают за собой современные PHP ORM.
Как оказалось, PDO далеко не идеален. В нём несчётное количество "весёлых" нюансов и граблей, вылезающих при абстрагировании слоя для работы с базами данных.
Опыт разработчика Yii3 из первых рук.

Доклад принят в программу конференции

PHP Russia: API: REST, SOAP и другие (2)

Как мы приготовили массу блюд с помощью одного ингредиента: GraphQL

В нашем виртуальном "ресторане" НЛМК существует единый корпоративный портал, которым пользуются больше 50 000 сотрудников Группы НЛМК в России, в Европе, в Индии и США. Когда-то он был только гостем, то есть потребителем данных, но развиваясь встал на кухню и начал поставлять данные. В докладе вы узнаете, как соотносятся потребитель и поставщик информации, как перейти из гостей в повара: секретный ингредиент GraphQL на базе PHP, а также советы от бывалых о том, как внедрить GraphQL в ваш рацион, где он может вызвать несворение, а где будет максимально полезен.

Доклад принят в программу конференции

gPRC как альтернатива REST API в микросервисах

Максим Горявин

ДИТ города Москвы

Что такое gRPC. Кратко напомню что это такое и для чего используется.
Сравнение REST подхода и gRPC подхода с примерами.
Мотивация использования gRPC.
Особенности при работе с gRPC.
Примеры уместного использования gRPC.
Как поднять gRPC сервер и клиент на PHP.
Генератор кода из proto файла для PHP, особенности.
Личные боевые кейсы где это работает.

Доклад принят в программу конференции

PHP Russia: Лучшие практики (3)

Виртуализируй меня... полностью!

Современная реальность требует современных решений - и именно поэтому все сложнее кого-то удивить словами Docker, контейнер или Kubernetes. Они уже являются неотъемлемой частью современной разработки приложений в компаниях.

В докладе рассмотрим вопросы запуска современных PHP-приложений внутри контейнеров, особенности и нюансы, а также разберем типовые схемы работы с контейнерами PHP на уровне CI/CD процессов в компании.

Доклад принят в программу конференции

Разминируем свой код: чем искать уязвимости и дефекты безопасности

Илья Поляков

Angara Security

Тема безопасности веб-приложений со временем становится только актуальнее.
Разберёмся, уязвимостям какого типа, по статистике, наиболее подвержены PHP проекты.
Сравним между собой статические анализаторы кода по качеству выявления таких уязвимостей.
Узнаем, какие ещё инструменты позволяют "разминировать" свой код.

Доклад принят в программу конференции

ID-баттл: UUID vs автоинкремент

Почти восемь лет, занимаясь разработкой веб-приложений, я использовал для идентификации исключительно автоинкременты. И только три с половиной года назад я попробовал UUID в одном пет-проекте. С тех пор я и моя команда в Happy Inc. почти всегда выбираем UUID для идентификации чего бы то ни было. Мы научились коррелировать сущности разных модулей по идентификатору, пользоваться преимуществами разных типов UUID, одними из первых внедрили UUID v6. Автоинкременты мы тоже не списывали со счетов, они по-прежнему хороши в определённых случаях.

В рамках этого доклада я обобщу опыт моей команды и разложу по полочкам все “за” и “против” использования UUID и автоинкрементов в PHP-приложении. Мы обсудим актуальные способы генерации и хранения идентификаторов, изучим бенчмарки для разных сценариев и баз данных и подведём новую черту с пометкой 2022 под этим старым добрым холиваром.

Доклад принят в программу конференции

PHP Russia: Подводные камни хайповых решений (1)

RoadRunner ускоряем PHP без фреймворка

Наталья Воронина

Национальный каталог

Постараемся разобраться с возможностями RoadRunner.
Рассмотрим альтернативные решения.
Посмотрим возможность перехода с php-fpm на RoadRunner.
Ответим на вопрос возможно ли его использование без фреймворка.
Рассмотрим метрики реального перехода и профит от него.
Взвесим плюсы и минусы перехода.

Доклад принят в программу конференции

PHP Russia: Системная борьба с legacy (1)

Делаем регулярный апгрейд проекта нормой с помощью Rector

Мы внедряем и прогоняем наш код через статические анализаторы — они не раз нас спасали. Настраиваем код-стайл фиксеры и, не напрягаясь, работаем командой в едином кодовом стиле. Но проект всё равно устаревает и превращается в легаси, с которым неприятно работать. Как и дальше шагать в ногу со временем? Чего нам ещё не хватает?

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

А ещё обсудим:

- возможности Rector и его основные цели
- как Rector работает внутри и из чего состоит
- проблемы работы с Rector и пути их решения
- как писать свои правила рефакторинга для библиотек и бандлов, чтобы другие разработчики могли спокойно обновлять их у себя в проекте
- рекомендации по выбору инструментов и их настройке

Доклад принят в программу конференции

PHP Russia: Асинхронные приложения и параллельная обработка (2)

Долгоиграющие приложения в PHP

Хоть PHP и был рождён, чтобы умирать, мы часто сталкиваемся с задачами, которые требуют работы нашего кода в течение более долгого промежутка времени, чем длится простой HTTP-запрос. Это могут быть как выгрузки данных для интеграции с партнерами, так и просто приложения, которые должны реагировать на события в системе в момент их появления. Конечно же, можно предложить использовать другие языки программирования, но это увеличит стек и усложнит систему.

Достаточно давно сформировался стереотип о том, что у PHP при долгой работе "течёт" память, да и вообще это не его пул задач. Но он уже неактуален, а нам стоит разобраться с тем, как же можно организовать работу приложений на PHP, которые работают существенно дольше, чем несколько секунд:

- Какие классы задач могут решать такие приложения
- Какими средствами можно решать такие задачи
- Какие инструменты предоставляет сам язык и его сообщество
- Когда все таки стоит двигаться в сторону расширения стека

Доклад принят в программу конференции

PHP в асинхронном мире

Подготавливая доклад на реальных примерах, объясняющих асинхронную обработку с нуля, я понял, что примеров слишком много и выделить самый актуальный затруднительно. Серьезно, вы можете себе представить процесс в природе, который следует определенной последовательности или организованной очереди? И асинхронный не означает хаотичный.

Доклад принят в программу конференции

PHP Russia: OpenSource (1)

Аспектно-ориентированное программирование - родина PHP-слонов

Для многих из нас aспектно-ориентированное программирование - это что-то абстрактно-академическое. Между тем, оно уже давно широко применяется в практической PHP-разработке - чаще всего в виде аннотаций к методам и классам, и им можно пользоваться, не зная ничего о его теоретических основах. Тем не менее, знание базовых концепций и возможных способов реализации aспектно-ориентированного программирования его использованию из готовых библиотек - не помешает , а вот помочь - очень даже может. Например, чтобы элегантно внедрить в код нужную во всей программе функцию или даже написать свою библиотеку, реализующую эту парадигму.

Доклад принят в программу конференции

PHP Russia: Другое (1)

Почему PHP такой дырявый?

А Вы знаете почему многие считают PHP небезопасным языком?
А как сделать так чтобы он стал безопаснее?
Каким атакам больше всего подвержен PHP и его фреймворки в современном мире?

Расскажу о том, как сделать PHP безопасным.

Доклад принят в программу конференции