https://github.com/kuan-m/pdp
my microservices sandbox environment for PDP preparation (system design & architecture)
https://github.com/kuan-m/pdp
go jit k8s ms opcache php
Last synced: 10 days ago
JSON representation
my microservices sandbox environment for PDP preparation (system design & architecture)
- Host: GitHub
- URL: https://github.com/kuan-m/pdp
- Owner: kuan-m
- Created: 2025-11-23T12:31:26.000Z (8 months ago)
- Default Branch: main
- Last Pushed: 2026-03-07T07:13:44.000Z (4 months ago)
- Last Synced: 2026-07-01T17:36:00.136Z (17 days ago)
- Topics: go, jit, k8s, ms, opcache, php
- Language: PHP
- Homepage:
- Size: 4.56 MB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# PDP Prep
Практическое руководство по углубленному изучению PHP, архитектуры и системного дизайна.
Проект также даст возможность «пощупать» сравнительные тесты производительности и наглядно взглянуть на них. И поможет превратиться из "пользователя языка" в инженера, понимающего, как работает код на низком уровне: от жизненного цикла запроса до оптимизации FPM и работы JIT-компилятора.
## Как пользоваться репозиторием?
Для работы с проектом используется Kubernetes (Minikube) и Tilt для удобной разработки.
1. Установите [**Minikube**](https://minikube.sigs.k8s.io/docs/start/?arch=%2Fwindows%2Fx86-64%2Fstable%2F.exe+download).
2. Запустите кластер:
```bash
minikube start
```
3. Установите [**Tilt**](https://docs.tilt.dev/install.html).
4. Поднимите окружение:
```bash
tilt up
```
5. Откройте интерфейс Tilt (ссылка появится в терминале) и нажмите "Open port" для доступа к сервисам.
---
## 1. PHP Lifecycle
Разбираем, что происходит при запуске скрипта: системные вызовы, инициализация и завершение.
**Запуск:**
```bash
make lifecycle
```
- [Теория](docs/1_2_3_lifecycle_php_cgi_fpm_opcache/README.md)
- [Практика](shared/php/1_lifecycle/README.md)
---
## 2. Мониторинг и сравнения PHP-FPM
Изучаем метрики, настройку пулов FPM и поведение под нагрузкой.
**Действия:**
1. Откройте Графану через Tilt.
2. Перейдите в дешборд **Monitoring**.
3. Запустите нагрузочные тесты из корня проекта:
```bash
make test-high # Высокая нагрузка (для проверки max_children)
make test-mid # Средняя нагрузка
make test-go # Сравнение с Go сервисом
```
- [Теория](docs/1_2_3_lifecycle_php_cgi_fpm_opcache/README.md#2-разница-php-cgi-и-php-fpm)
- [Практика](shared/php/2_php_fpm/README.md)
---
## 3. JIT и Opcache
Сравниваем производительность: чистый PHP vs Opcache vs JIT.
**Действия:**
1. В интерфейсе Tilt найдите микросервис `web`.
2. В открывшемся UI запустите тесты для 3 микросервисов, чтобы увидеть разницу в скорости обработки запросов.
- [Теория](docs/1_2_3_lifecycle_php_cgi_fpm_opcache/README.md)
- [Практика](shared/php/3_jit_opcache/README.md)
---
## 4. Autoload
Разбираем механизмы автозагрузки классов (PSR-4, Composer) и их влияние на производительность.
**Команды:**
```bash
make simple-autoload # Запуск простого примера автозагрузки
make laravel-autoload # Подсчет загруженных классов в Laravel
make laravel-autoload-http # Запрос к Laravel через HTTP для анализа
```
---
## 5. Архитектура PHP-приложения
Разбираем полную цепочку обработки запроса: Nginx → PHP-FPM → OPcache → приложение → Redis → DB.
- [Теория](docs/5_php_app_architecture/README.md)
---
## 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](https://roadmap.sh/system-design)
10. https://tsh.io/blog/system-design-for-php-developers/