Skip to content

kuan-m/pdp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PDP Prep

Практическое руководство по углубленному изучению PHP, архитектуры и системного дизайна.

Проект также даст возможность «пощупать» сравнительные тесты производительности и наглядно взглянуть на них. И поможет превратиться из "пользователя языка" в инженера, понимающего, как работает код на низком уровне: от жизненного цикла запроса до оптимизации FPM и работы JIT-компилятора.

Как пользоваться репозиторием?

Для работы с проектом используется Kubernetes (Minikube) и Tilt для удобной разработки.

  1. Установите Minikube.
  2. Запустите кластер:
    minikube start
  3. Установите Tilt.
  4. Поднимите окружение:
    tilt up
  5. Откройте интерфейс Tilt (ссылка появится в терминале) и нажмите "Open port" для доступа к сервисам.

1. PHP Lifecycle

Разбираем, что происходит при запуске скрипта: системные вызовы, инициализация и завершение.

Запуск:

make lifecycle

2. Мониторинг и сравнения PHP-FPM

Изучаем метрики, настройку пулов FPM и поведение под нагрузкой.

Действия:

  1. Откройте Графану через Tilt.
  2. Перейдите в дешборд Monitoring.
  3. Запустите нагрузочные тесты из корня проекта:
make test-high   # Высокая нагрузка (для проверки max_children)
make test-mid    # Средняя нагрузка
make test-go     # Сравнение с Go сервисом

3. JIT и Opcache

Сравниваем производительность: чистый PHP vs Opcache vs JIT.

Действия:

  1. В интерфейсе Tilt найдите микросервис web.
  2. В открывшемся UI запустите тесты для 3 микросервисов, чтобы увидеть разницу в скорости обработки запросов.

4. Autoload

Разбираем механизмы автозагрузки классов (PSR-4, Composer) и их влияние на производительность.

Команды:

make simple-autoload        # Запуск простого примера автозагрузки
make laravel-autoload       # Подсчет загруженных классов в Laravel
make laravel-autoload-http  # Запрос к Laravel через HTTP для анализа

5. Архитектура PHP-приложения

Разбираем полную цепочку обработки запроса: Nginx → PHP-FPM → OPcache → приложение → Redis → DB.


6. Как масштабировать Laravel API под 10k RPS? (TODO)


7. System Design Instagram (TODO)


Ниже находится детальный план, составленный старшим разработчиком

План развития

Что улучшить?

Архитектурное/Инжинерное мышление

Цель

Превратиться из "пользователя языка" в инженера.

Понимать что происходит при каждом запросе: парсинг, компиляция, байткод, OPcache.

Понимание архитектуры PHP-приложения и умеение спроектировать архитектуру с нуля

Темы для изучения

  1. PHP lifecycle

  2. PHP-FPM

  3. JIT, OPCache

  4. Autoload/Composer

  5. Роадмап по System Design

Задачи

  1. Написать PHP-скрипт и отследить его полный lifecycle:

    • запустить с strace -f php script.php,
    • понять, какие системные вызовы делает PHP при запуске.
  2. Настроить PHP-FPM локально:

    • изменить параметры pm, max_children, max_requests,
    • замерить, как меняется производительность при нагрузке (через ab или wrk).
  3. Сравнить производительность с/без OPcache и JIT:

    • включить/отключить JIT, измерить время выполнения нескольких скриптов (арифметика, I/O, JSON).
    • записать результаты в таблицу.
  4. Разобрать работу autoload:

    • создать собственный PSR-4 autoloader и сравнить с Composer.
    • посмотреть, сколько классов реально грузится при старте Laravel.
  5. Нарисовать архитектуру PHP-приложения:

    • показать цепочку: Nginx → PHP-FPM → OPcache → приложение → Redis → DB.
    • объяснить, где узкие места и как добавить кэш/очередь.
  6. Спроектировать маленький System Design-кейс:

    • "Как масштабировать Laravel API под 10k RPS?"
  7. System Design Instagram

Ресурсы

  1. https://dev.to/jamir_hossain_8800f85fdd5/how-php-works-behind-the-scene-1eac

  2. https://medium.com/@mgonzalezbaile/demystifying-nginx-and-php-fpm-for-php-developers-bba548dd38f9

  3. https://www.php.net/manual/en/book.opcache.php

  4. https://php.watch/articles/jit-in-depth

  5. https://getcomposer.org/doc/04-schema.md#autoload

  6. https://jinoantony.com/blog/how-composer-autoloads-php-files

  7. https://tideways.com/profiler/blog/autoloading-performance-avoid-these-5-mistakes

  8. https://www.php-fig.org/psr/psr-4/

  9. System Design Roadmap

  10. https://tsh.io/blog/system-design-for-php-developers/

About

my microservices sandbox environment for PDP preparation (system design & architecture)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors