You are on page 1of 30

Zarządzanie procesami PHP

mod_php, php-fpm, php-pm

Kehrrad als Teil einer Trommelfördermaschine


in De re metallica (Georgius Agricola, 1566)

/ 29.10.2022 / Łukasz Biegaj


1/ Jak aplikacje procesują requesty

2/ Wydajność rozwiązań

3/ Jak to jest robione w innych językach?

4/ Jak procesować ruch jeszcze szybciej?

Agenda 5/ Podsumowanie
Jak aplikacje procesują requesty
01/
unitygroup.com
4
Application Thread

Application Thread

unitygroup.com
5
> mod_php vs php-fpm

mod_php php-fpm

▪ Moduł do serwera WWW Apache2 ▪ Dodatkowa aplikacja którą można podłączyć do Apache2,
nginx lub innego serwera WWW

unitygroup.com
6
> mod_php vs php-fpm

mod_php php-fpm

▪ Popularny do prostych i dedykowanych zastosowań ▪ Popularny na hostingach współdzielonych

/vhost1

/vhost /vhost2

/vhost3

unitygroup.com
7
> mod_php vs php-fpm

mod_php php-fpm

▪ Brak domyślnej separacji vhostów ▪ Wbudowana obsługa pooli zapewniających separację

/vhost1 /vhost1

/vhost2 /vhost2

/vhost3 /vhost3

unitygroup.com
8
> mod_php vs php-fpm

mod_php php-fpm

▪ Brak domyślnej separacji vhostów ▪ Wbudowana obsługa pooli zapewniających separację


▪ Można skorzystać z modułu mpm_itk, ale nie działa on
idealnie

/vhost1 /vhost1

/vhost2 /vhost2

/vhost3 /vhost3

unitygroup.com
9
> mod_php vs php-fpm

mod_php php-fpm

▪ Aktywowany dla każdego requestu ▪ Może obsługiwać tylko requesty do PHP

unitygroup.com
10
> mod_php vs php-fpm

mod_php php-fpm

▪ Moduł do serwera WWW Apache2 ▪ Dodatkowa aplikacja którą można podłączyć do Apache2,
nginx lub innego serwera WWW
▪ Popularny do prostych i dedykowanych zastosowań ▪ Popularny na hostingach współdzielonych
▪ Brak domyślnej separacji vhostów ▪ Wbudowana obsługa pooli zapewniających separację
▪ Aktywowany dla każdego requestu ▪ Może obsługiwać tylko requesty do PHP

unitygroup.com
11
> mod_php vs php-fpm

mod_php php-fpm

▪ Moduł do serwera WWW Apache2 ▪ Dodatkowa aplikacja którą można podłączyć do Apache2,
nginx lub innego serwera WWW
▪ Popularny do prostych i dedykowanych zastosowań ▪ Popularny na hostingach współdzielonych
▪ Brak domyślnej separacji vhostów ▪ Wbudowana obsługa pooli zapewniających separację
▪ Aktywowany dla każdego requestu ▪ Może obsługiwać tylko requesty do PHP

Które rozwiązanie jest lepsze?


unitygroup.com
12
Wydajność rozwiązań 02/
> Benchmark: środowisko testowe

▪ Dwa środowiska zamknięte w docker-compose


▪ apache2 + mod_php
▪ nginx + php-fpm

▪ Aplikacja testowa z phpbenchmarks.com

▪ Całość w repozytorium git z wersjonowanymi zmianami pod finetuning,


podsumowaniem każdego kroku

▪ https://github.com/lpiob/php-serving-benchmarks

unitygroup.com
14
> Benchmark: środowisko testowe

▪ Dwa środowiska zamknięte w docker-compose


▪ apache2 + mod_php
▪ nginx + php-fpm

▪ Aplikacja testowa z phpbenchmarks.com

▪ Całość w repozytorium git z wersjonowanymi zmianami pod finetuning,


podsumowaniem każdego kroku

▪ https://github.com/lpiob/php-serving-benchmarks

unitygroup.com
15
> Benchmark: przebieg i wyniki pośrednich testów

▪ Omówienie na podstawie
https://github.com/lpiob/php-serving-benchmarks/tree/master/test-results
▪ Pliki 001-007

Key takeaways:
▪ Zmiana połączenia TCP na socket nie miała zmierzalnego wpływu na wydajność
▪ Największy zysk wydajnościowy po zmianie domyślnego process managera w FPM.

unitygroup.com
16
> Benchmark: wyniki

Sposób serwowania Requests per second

apache2 + mod_php 400.10

apache2 + php-fpm 413.06

nginx + php-fpm 420.84

unitygroup.com
17
> Benchmark: wyniki
Sposób serwowania Requests per second
apache2 + mod_php 400.10
apache2 + php-fpm 413.06
nginx + php-fpm 420.84

600

500

400

300

200

100

0
5t 10t 16t 24t 32t
apache2 + mod_php nginx + fpm apache2 + fpm

unitygroup.com
18
Jak to jest robione w innych
językach? 03/
unitygroup.com
20
Application Thread

Application Thread

unitygroup.com
21
Application Thread

Application Thread

Application Thread

Application Thread

unitygroup.com
22
Jak procesować ruch jeszcze
szybciej? 04/
> php-pm

▪ PPM - PHP Process Manager


https://github.com/php-pm/php-pm
▪ Process manager, supercharger and load balancer for PHP applications

▪ Performance boost up to 15x (compared to PHP-FPM, Symfony applications).


▪ Integrated load balancer.
▪ Hot-Code reload (when PHP files change).
▪ Static file serving for easy development procedures.
▪ Support for HttpKernel (Symfony/Laravel), Drupal (experimental), Zend (experimental).

unitygroup.com
24
Application Thread

Application Thread

Application Thread

Application Thread

unitygroup.com
25
> Benchmark: wyniki
Sposób serwowania Requests per second
apache2 + mod_php 400.10
apache2 + php-fpm 413.06
nginx + php-fpm 420.84

600

500

400

300

200

100

0
5t 10t 16t 24t 32t
apache2 + mod_php nginx + fpm apache2 + fpm

unitygroup.com
26
> Benchmark: wyniki
Sposób serwowania Requests per second
apache2 + mod_php 400.10
apache2 + php-fpm 413.06
nginx + php-fpm 420.84
nginx + php-pm 5061
6000

5000

4000

3000

2000

1000

0
5t 10t 16t 24t 32t
apache2 + mod_php apache2 + fpm nginx + fpm nginx + php-pm

unitygroup.com
27
Podsumowanie
05/

https://github.com/lpiob/php-serving-benchmarks
Thank You
unitygroup.com

You might also like