Практическое руководство по углубленному изучению PHP, архитектуры и системного дизайна.
Проект также даст возможность «пощупать» сравнительные тесты производительности и наглядно взглянуть на них. И поможет превратиться из "пользователя языка" в инженера, понимающего, как работает код на низком уровне: от жизненного цикла запроса до оптимизации FPM и работы JIT-компилятора.
Для работы с проектом используется Kubernetes (Minikube) и Tilt для удобной разработки.
- Установите Minikube.
- Запустите кластер:
minikube start
- Установите Tilt.
- Поднимите окружение:
tilt up
- Откройте интерфейс Tilt (ссылка появится в терминале) и нажмите "Open port" для доступа к сервисам.
Разбираем, что происходит при запуске скрипта: системные вызовы, инициализация и завершение.
Запуск:
make lifecycleИзучаем метрики, настройку пулов FPM и поведение под нагрузкой.
Действия:
- Откройте Графану через Tilt.
- Перейдите в дешборд Monitoring.
- Запустите нагрузочные тесты из корня проекта:
make test-high # Высокая нагрузка (для проверки max_children)
make test-mid # Средняя нагрузка
make test-go # Сравнение с Go сервисомСравниваем производительность: чистый PHP vs Opcache vs JIT.
Действия:
- В интерфейсе Tilt найдите микросервис
web. - В открывшемся UI запустите тесты для 3 микросервисов, чтобы увидеть разницу в скорости обработки запросов.
Разбираем механизмы автозагрузки классов (PSR-4, Composer) и их влияние на производительность.
Команды:
make simple-autoload # Запуск простого примера автозагрузки
make laravel-autoload # Подсчет загруженных классов в Laravel
make laravel-autoload-http # Запрос к Laravel через HTTP для анализаРазбираем полную цепочку обработки запроса: Nginx → PHP-FPM → OPcache → приложение → Redis → DB.
Ниже находится детальный план, составленный старшим разработчиком
Архитектурное/Инжинерное мышление
Превратиться из "пользователя языка" в инженера.
Понимать что происходит при каждом запросе: парсинг, компиляция, байткод, OPcache.
Понимание архитектуры PHP-приложения и умеение спроектировать архитектуру с нуля
-
PHP lifecycle
-
PHP-FPM
-
JIT, OPCache
-
Autoload/Composer
-
Роадмап по System Design
-
Написать PHP-скрипт и отследить его полный lifecycle:
- запустить с
strace -f php script.php, - понять, какие системные вызовы делает PHP при запуске.
- запустить с
-
Настроить PHP-FPM локально:
- изменить параметры
pm,max_children,max_requests, - замерить, как меняется производительность при нагрузке (через ab или wrk).
- изменить параметры
-
Сравнить производительность с/без OPcache и JIT:
- включить/отключить JIT, измерить время выполнения нескольких скриптов (арифметика, I/O, JSON).
- записать результаты в таблицу.
-
Разобрать работу autoload:
- создать собственный PSR-4 autoloader и сравнить с Composer.
- посмотреть, сколько классов реально грузится при старте Laravel.
-
Нарисовать архитектуру PHP-приложения:
- показать цепочку: Nginx → PHP-FPM → OPcache → приложение → Redis → DB.
- объяснить, где узкие места и как добавить кэш/очередь.
-
Спроектировать маленький System Design-кейс:
- "Как масштабировать Laravel API под 10k RPS?"
-
System Design Instagram
-
https://dev.to/jamir_hossain_8800f85fdd5/how-php-works-behind-the-scene-1eac
-
https://medium.com/@mgonzalezbaile/demystifying-nginx-and-php-fpm-for-php-developers-bba548dd38f9
-
https://jinoantony.com/blog/how-composer-autoloads-php-files
-
https://tideways.com/profiler/blog/autoloading-performance-avoid-these-5-mistakes