{"id":51525191,"url":"https://github.com/kuan-m/pdp","last_synced_at":"2026-07-08T20:32:48.414Z","repository":{"id":327016502,"uuid":"1102417317","full_name":"kuan-m/pdp","owner":"kuan-m","description":"my microservices sandbox environment for PDP preparation (system design \u0026 architecture)","archived":false,"fork":false,"pushed_at":"2026-03-07T07:13:44.000Z","size":4777,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-01T17:36:00.136Z","etag":null,"topics":["go","jit","k8s","ms","opcache","php"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kuan-m.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-23T12:31:26.000Z","updated_at":"2026-03-07T07:13:47.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/kuan-m/pdp","commit_stats":null,"previous_names":["kuan-m/pdp-prep","kuan-m/pdp"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/kuan-m/pdp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kuan-m%2Fpdp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kuan-m%2Fpdp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kuan-m%2Fpdp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kuan-m%2Fpdp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kuan-m","download_url":"https://codeload.github.com/kuan-m/pdp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kuan-m%2Fpdp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35278166,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-08T02:00:06.796Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["go","jit","k8s","ms","opcache","php"],"created_at":"2026-07-08T20:32:47.623Z","updated_at":"2026-07-08T20:32:48.407Z","avatar_url":"https://github.com/kuan-m.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PDP Prep\n\nПрактическое руководство по углубленному изучению PHP, архитектуры и системного дизайна.\n\nПроект также даст возможность «пощупать» сравнительные тесты производительности и наглядно взглянуть на них. И поможет превратиться из \"пользователя языка\" в инженера, понимающего, как работает код на низком уровне: от жизненного цикла запроса до оптимизации FPM и работы JIT-компилятора.\n\n## Как пользоваться репозиторием?\n\nДля работы с проектом используется Kubernetes (Minikube) и Tilt для удобной разработки.\n\n1.  Установите [**Minikube**](https://minikube.sigs.k8s.io/docs/start/?arch=%2Fwindows%2Fx86-64%2Fstable%2F.exe+download).\n2.  Запустите кластер:\n    ```bash\n    minikube start\n    ```\n3.  Установите [**Tilt**](https://docs.tilt.dev/install.html).\n4.  Поднимите окружение:\n    ```bash\n    tilt up\n    ```\n5.  Откройте интерфейс Tilt (ссылка появится в терминале) и нажмите \"Open port\" для доступа к сервисам.\n\n---\n\n## 1. PHP Lifecycle\n\nРазбираем, что происходит при запуске скрипта: системные вызовы, инициализация и завершение.\n\n**Запуск:**\n```bash\nmake lifecycle\n```\n\n- [Теория](docs/1_2_3_lifecycle_php_cgi_fpm_opcache/README.md)\n- [Практика](shared/php/1_lifecycle/README.md)\n\n---\n\n## 2. Мониторинг и сравнения PHP-FPM\n\nИзучаем метрики, настройку пулов FPM и поведение под нагрузкой.\n\n**Действия:**\n1.  Откройте Графану через Tilt.\n2.  Перейдите в дешборд **Monitoring**.\n3.  Запустите нагрузочные тесты из корня проекта:\n\n```bash\nmake test-high   # Высокая нагрузка (для проверки max_children)\nmake test-mid    # Средняя нагрузка\nmake test-go     # Сравнение с Go сервисом\n```\n\n- [Теория](docs/1_2_3_lifecycle_php_cgi_fpm_opcache/README.md#2-разница-php-cgi-и-php-fpm)\n- [Практика](shared/php/2_php_fpm/README.md)\n\n---\n\n## 3. JIT и Opcache\n\nСравниваем производительность: чистый PHP vs Opcache vs JIT.\n\n**Действия:**\n1.  В интерфейсе Tilt найдите микросервис `web`.\n2.  В открывшемся UI запустите тесты для 3 микросервисов, чтобы увидеть разницу в скорости обработки запросов.\n\n- [Теория](docs/1_2_3_lifecycle_php_cgi_fpm_opcache/README.md)\n- [Практика](shared/php/3_jit_opcache/README.md)\n\n---\n\n## 4. Autoload\n\nРазбираем механизмы автозагрузки классов (PSR-4, Composer) и их влияние на производительность.\n\n**Команды:**\n\n```bash\nmake simple-autoload        # Запуск простого примера автозагрузки\nmake laravel-autoload       # Подсчет загруженных классов в Laravel\nmake laravel-autoload-http  # Запрос к Laravel через HTTP для анализа\n```\n\n---\n\n## 5. Архитектура PHP-приложения\n\nРазбираем полную цепочку обработки запроса: Nginx → PHP-FPM → OPcache → приложение → Redis → DB.\n\n- [Теория](docs/5_php_app_architecture/README.md)\n\n---\n\n## 6. Как масштабировать Laravel API под 10k RPS? (TODO)\n\n---\n\n## 7. System Design Instagram (TODO)\n\n---\n`Ниже находится детальный план, составленный старшим разработчиком`\n# План развития\n\n## Что улучшить?\n\nАрхитектурное/Инжинерное мышление\n\n## Цель\n\nПревратиться из \"пользователя языка\" в инженера.\n\nПонимать что происходит при каждом запросе: парсинг, компиляция,\nбайткод, OPcache.\n\nПонимание архитектуры PHP-приложения и умеение спроектировать\nархитектуру с нуля\n\n## Темы для изучения\n\n1.  PHP lifecycle\n\n2.  PHP-FPM\n\n3.  JIT, OPCache\n\n4.  Autoload/Composer\n\n5.  Роадмап по System Design\n\n## Задачи\n\n1.  Написать PHP-скрипт и отследить его полный lifecycle:\n\n    -   запустить с `strace -f php script.php`,\n    -   понять, какие системные вызовы делает PHP при запуске.\n\n2.  Настроить PHP-FPM локально:\n\n    -   изменить параметры `pm`, `max_children`, `max_requests`,\n    -   замерить, как меняется производительность при нагрузке (через ab\n        или wrk).\n\n3.  Сравнить производительность с/без OPcache и JIT:\n\n    -   включить/отключить JIT, измерить время выполнения нескольких скриптов (арифметика, I/O, JSON).\n    -   записать результаты в таблицу.\n\n4.  Разобрать работу autoload:\n\n    -   создать собственный PSR-4 autoloader и сравнить с Composer.\n    -   посмотреть, сколько классов реально грузится при старте Laravel.\n\n5.  Нарисовать архитектуру PHP-приложения:\n\n    -   показать цепочку: Nginx → PHP-FPM → OPcache → приложение → Redis → DB.\n    -   объяснить, где узкие места и как добавить кэш/очередь.\n\n6.  Спроектировать маленький System Design-кейс: \n    -   \"Как масштабировать Laravel API под 10k RPS?\"\n\n7.  System Design Instagram\n\n## Ресурсы\n\n1.  https://dev.to/jamir_hossain_8800f85fdd5/how-php-works-behind-the-scene-1eac\n\n2.  https://medium.com/@mgonzalezbaile/demystifying-nginx-and-php-fpm-for-php-developers-bba548dd38f9\n\n3.  https://www.php.net/manual/en/book.opcache.php\n\n4.  https://php.watch/articles/jit-in-depth\n\n5.  https://getcomposer.org/doc/04-schema.md#autoload\n\n6.  https://jinoantony.com/blog/how-composer-autoloads-php-files\n\n7.  https://tideways.com/profiler/blog/autoloading-performance-avoid-these-5-mistakes\n\n8.  https://www.php-fig.org/psr/psr-4/\n\n9.  [System Design Roadmap](https://roadmap.sh/system-design)\n\n10. https://tsh.io/blog/system-design-for-php-developers/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkuan-m%2Fpdp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkuan-m%2Fpdp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkuan-m%2Fpdp/lists"}