SlideShare une entreprise Scribd logo
1  sur  41
Télécharger pour lire hors ligne
PHP-PM
Hit czy kit?
Franciszek Krasowski
PHP developer
Agenda
• Trochę teorii
• PHP-PM - Co to jest?
• PHP jako serwer
• Zastosowania PHP-PM
• Użycie PHP-PM
• Benchmarki
• Podsumowanie
PPM – według twórców
PHP jako serwer
Podejście „klasyczne”
Podejście w PHP-PM
Istotne informacje
• Workery mimo wszystko nie są stabilne
• Spore wycieki pamięci
• Resetowanesą po x czasu (konfigurowalne)
• Reset również po x requestachobsłużonych przez worker
• debug mode odświeża workery przy każdej zmianie
ReactPHP
ReactPHP -> swoole?
PHP-cgi + PCNTL
Symfony components
Zastosowania?
Zastosowania
• Wymaga abstrakcji Request-Response
• Nie działa na „czystym” PHP
• Działa bezproblemowo z Symfony (włącznie z 4.1)
• Laravel
• Drupal, Zend i CakePHP -> teoretycznie obsługiwane, ale zalecana ostrożność
• NIE działa z Wordpressem
Jak uruchomić?
Docker
• 3 gotowe obrazy:
• nginx + pm
• pm standalone
• pm jako entrypoint
Lokalnie
• Wymagania:
• phpX-cgi -> X >=5.6.0
• PCNTL -> wyklucza postawienie na Windows
• Możliwości:
• git clone php-pm/php-pm
• composer require php-pm/php-pm
• + dodatkowy adapter
Istotne parametry
• --bridge=HttpKernel -> bridge konwertującyrequest z ReactPHPdo PSR7
• --workers=8 -> ilość równoległych workerów
• --debug=0 -> live reload workerów przy zmianie kodu (+ verbose)
• --logging=1 -> logowanie na stdOut
• --static-directory="" -> katalog z statycznymiplikami
• --bootstrap=Symfony -> Klasa do boostrapowania frameworka (dla Laravela ->
laravel)
• --cgi-path -> ścieżka do php-cgi
Benchmarki
Co będzie testowane?
• Wszystko skonteneryzowane
• PHP-PM + nginx (szybszy)
• FPM + nginx
• Apache server
• Baza z php 7.2.8 dla wszystkich kontenerów
• Kod wewnątrz kontenerów
• Symfony + Laravel
• Kod można znaleźć: https://gitlab.com/Franek.krasowski/php-pm-uszanowanko
Na czym będzie testowane?
• i5-4690k 4,2GHz-> 4 rdzeniowy
• 24GB RAM
• Ubuntu 17.04
• Docker 18.03.1
• Docker Compose 1.22.0
• Siege 4.0.2
PPM + nginx fpm + nginx apache
siege –c1 –t1m –b http://localhost:8x/
PPM + nginx fpm + nginx apache
siege –c10 –t1m –b http://localhost:8x/
PPM + nginx fpm + nginx apache
siege –c100 –t1m –b http://localhost:8x/
Zestawienie
• PPM maksymalnie 5x szybszy
• Przy większym obciążeniu traci
przewagę
• PPM czasem potrafi zjeść całą
pamięć828,4
1316,91
1396,26
164,88
653,26
7 09,46
160,95
635,76
559,43
0
200
400
600
800
1000
1200
1400
1600
1 10 100
Requests/s
Concurency
PHP-PM FPM Apache
PPM + nginx fpm + nginx apache
siege –c1 –t1m –b http://localhost:8x/api/test_entities.json
PPM + nginx fpm + nginx apache
siege –c10 –t1m –b http://localhost:8x/api/test_entities.json
PPM + nginx fpm + nginx apache
siege –c100 –t1m –b http://localhost:8x/api/test_entities.json
Zestawienie
• PPM średnio około 3x szybszy
• Nie traci przewagi przy większym
zrównolegleniu
122,58
315,88
308,4
38,31
137,73
106,56
37
131,53
100,07
0
50
100
150
200
250
300
350
1 10 100
Requests/s
Concurency
PHP-PM FPM Apache
PPM + nginx fpm + nginx apache
siege –c1 –t1m –b http://localhost:9x/
PPM + nginx fpm + nginx apache
siege –c10 –t1m –b http://localhost:9x/
PPM + nginx fpm + nginx apache
siege –c100 –t1m –b http://localhost:9x/
Zestawienie
• Gorzej w porównaniu do Symfony
• Duża losowość wyników
15,67
115,27
128,29
16,43
113,42
134,78
16,03
88,02
138,31
0
20
40
60
80
100
120
140
160
1 10 100
Requests/s
Concurency
PHP-PM FPM Apache
PPM + nginx fpm + nginx apache
siege –c10 –t10h –b http://localhost:8x/
Zestawienie
• PPM
• ponad 4x szybszy od FPM-a
• 2x od Apache
• PPM – zgubił 3 requesty w 10h,
Apache i FPM żadnego
• PPM -> najdłuższy maksymalny czas
requesta(1,04s)
1341,76
313,81
597,69
0
200
400
600
800
1000
1200
1400
1600
PHP-PM FPM Apache
Requests/s
Uruchomienie na serwerze z Rancherem
• Bieda serwery nie dały rady
obsłużyć requestów
• Wynik równy, ograniczony
możliwościami serwerów
• Requestobsługiwany nawet do
40s
• Większe obciążenie -> mniej
requestów/s
Podsumowanie
• Szybszy od klasycznego rozwiązania (chociaż stwierdzenie 15x szybszy to
przesada)
• Pamięciożerny
• „Gubi” niektóre requesty
• Potrafi się zamulić
• Duża apka (?)
• Hit czy kit?
Pytania?
Dziękuje za uwagę!

Contenu connexe

Tendances

Testowanie rozwiązań serverless z LocalStack
Testowanie rozwiązań serverless z LocalStackTestowanie rozwiązań serverless z LocalStack
Testowanie rozwiązań serverless z LocalStackThe Software House
 
Kubernetes (Canary) Deployments
Kubernetes (Canary) DeploymentsKubernetes (Canary) Deployments
Kubernetes (Canary) DeploymentsThe Software House
 
Aplikacje internetowe real-time w oparciu o React/Redux
Aplikacje internetowe real-time w oparciu o React/ReduxAplikacje internetowe real-time w oparciu o React/Redux
Aplikacje internetowe real-time w oparciu o React/ReduxDawid Rusnak
 
Wprowadzenie do testów wydajnościowych w k6
Wprowadzenie do testów wydajnościowych w k6Wprowadzenie do testów wydajnościowych w k6
Wprowadzenie do testów wydajnościowych w k6The Software House
 
Ansible - Automatyzacja zadań IT
Ansible - Automatyzacja zadań ITAnsible - Automatyzacja zadań IT
Ansible - Automatyzacja zadań ITKamil Grabowski
 
Szybkie stawianie aplikacji z Elastic Beanstalk
Szybkie stawianie aplikacji z Elastic BeanstalkSzybkie stawianie aplikacji z Elastic Beanstalk
Szybkie stawianie aplikacji z Elastic BeanstalkThe Software House
 
Sekrety magicznego ogrodu Docker
Sekrety magicznego ogrodu DockerSekrety magicznego ogrodu Docker
Sekrety magicznego ogrodu DockerKamil Grabowski
 
Jak poprawić Core Web Vitals w aplikacji Next.js
Jak poprawić Core Web Vitals w aplikacji Next.jsJak poprawić Core Web Vitals w aplikacji Next.js
Jak poprawić Core Web Vitals w aplikacji Next.jsThe Software House
 
Webpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótka
Webpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótkaWebpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótka
Webpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótkaMarcin Gajda
 
Deployment kodu z Capistrano
Deployment kodu z CapistranoDeployment kodu z Capistrano
Deployment kodu z CapistranoMichał Szajbe
 
Automatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPAutomatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPLaravel Poland MeetUp
 
Ruby, Ruby on Rails 2010
Ruby, Ruby on Rails 2010Ruby, Ruby on Rails 2010
Ruby, Ruby on Rails 2010Natalia Stanko
 
Kubernetes: from zero to be hero
Kubernetes: from zero to be heroKubernetes: from zero to be hero
Kubernetes: from zero to be heroThe Software House
 
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio player
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio playerFull Stack JavaScript case study na podstawie Maracuya Jukebox audio player
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio playerMarek Będkowski
 
Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...
Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...
Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...Kainos Polska
 

Tendances (20)

Testowanie rozwiązań serverless z LocalStack
Testowanie rozwiązań serverless z LocalStackTestowanie rozwiązań serverless z LocalStack
Testowanie rozwiązań serverless z LocalStack
 
Kubernetes (Canary) Deployments
Kubernetes (Canary) DeploymentsKubernetes (Canary) Deployments
Kubernetes (Canary) Deployments
 
Infrastructure As Code
Infrastructure As CodeInfrastructure As Code
Infrastructure As Code
 
Aplikacje internetowe real-time w oparciu o React/Redux
Aplikacje internetowe real-time w oparciu o React/ReduxAplikacje internetowe real-time w oparciu o React/Redux
Aplikacje internetowe real-time w oparciu o React/Redux
 
Monitoring sieci
Monitoring sieciMonitoring sieci
Monitoring sieci
 
Wprowadzenie do testów wydajnościowych w k6
Wprowadzenie do testów wydajnościowych w k6Wprowadzenie do testów wydajnościowych w k6
Wprowadzenie do testów wydajnościowych w k6
 
Ansible - Automatyzacja zadań IT
Ansible - Automatyzacja zadań ITAnsible - Automatyzacja zadań IT
Ansible - Automatyzacja zadań IT
 
Rundeck & Ansible
Rundeck & AnsibleRundeck & Ansible
Rundeck & Ansible
 
Szybkie stawianie aplikacji z Elastic Beanstalk
Szybkie stawianie aplikacji z Elastic BeanstalkSzybkie stawianie aplikacji z Elastic Beanstalk
Szybkie stawianie aplikacji z Elastic Beanstalk
 
Sekrety magicznego ogrodu Docker
Sekrety magicznego ogrodu DockerSekrety magicznego ogrodu Docker
Sekrety magicznego ogrodu Docker
 
Ansible w praktyce
Ansible w praktyceAnsible w praktyce
Ansible w praktyce
 
Jak poprawić Core Web Vitals w aplikacji Next.js
Jak poprawić Core Web Vitals w aplikacji Next.jsJak poprawić Core Web Vitals w aplikacji Next.js
Jak poprawić Core Web Vitals w aplikacji Next.js
 
Webpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótka
Webpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótkaWebpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótka
Webpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótka
 
Deployment kodu z Capistrano
Deployment kodu z CapistranoDeployment kodu z Capistrano
Deployment kodu z Capistrano
 
Automatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPAutomatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHP
 
Ruby, Ruby on Rails 2010
Ruby, Ruby on Rails 2010Ruby, Ruby on Rails 2010
Ruby, Ruby on Rails 2010
 
GlusterFS
GlusterFSGlusterFS
GlusterFS
 
Kubernetes: from zero to be hero
Kubernetes: from zero to be heroKubernetes: from zero to be hero
Kubernetes: from zero to be hero
 
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio player
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio playerFull Stack JavaScript case study na podstawie Maracuya Jukebox audio player
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio player
 
Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...
Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...
Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...
 

Similaire à PHP-PM. Hit czy kit?

Jak przyspieszyłem aplikację produkcyjną o ponad 40%
Jak przyspieszyłem aplikację produkcyjną o ponad 40%Jak przyspieszyłem aplikację produkcyjną o ponad 40%
Jak przyspieszyłem aplikację produkcyjną o ponad 40%Laravel Poland MeetUp
 
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegroallegro.tech
 
Adam Selin - Na czym WordPress stoi. O serwerach słów kilka
Adam Selin - Na czym WordPress stoi. O serwerach słów kilkaAdam Selin - Na czym WordPress stoi. O serwerach słów kilka
Adam Selin - Na czym WordPress stoi. O serwerach słów kilkaLeriss
 
3Camp Tech 2016/11/15 - Front-end tooling: package managers
3Camp Tech 2016/11/15 - Front-end tooling: package managers3Camp Tech 2016/11/15 - Front-end tooling: package managers
3Camp Tech 2016/11/15 - Front-end tooling: package managersMichał Michalczuk
 
Apache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaApache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaWojciech Lichota
 
Dobre przepisy na cake php
Dobre przepisy na cake phpDobre przepisy na cake php
Dobre przepisy na cake phpDaniel Mendalka
 
PLNOG 18 - Sebastian Pasternacki - Bezpieczeństwo sieci operatorskich oraz en...
PLNOG 18 - Sebastian Pasternacki - Bezpieczeństwo sieci operatorskich oraz en...PLNOG 18 - Sebastian Pasternacki - Bezpieczeństwo sieci operatorskich oraz en...
PLNOG 18 - Sebastian Pasternacki - Bezpieczeństwo sieci operatorskich oraz en...PROIDEA
 
PLNOG 17 - Sławomir Janukowicz - NFV – using Juniper vMX, vSRX and NFX
PLNOG 17 - Sławomir Janukowicz - NFV – using Juniper vMX, vSRX and NFXPLNOG 17 - Sławomir Janukowicz - NFV – using Juniper vMX, vSRX and NFX
PLNOG 17 - Sławomir Janukowicz - NFV – using Juniper vMX, vSRX and NFXPROIDEA
 
Noc informatyka
Noc informatykaNoc informatyka
Noc informatykaOnetIT
 
Agregacja i analiza logów
Agregacja i analiza logówAgregacja i analiza logów
Agregacja i analiza logówDivante
 
Zbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zapleczaZbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zapleczaGameDesire Academy
 
PHP5. Tworzenie stron WWW. Ćwiczenia praktyczne. Wydanie II
PHP5. Tworzenie stron WWW. Ćwiczenia praktyczne. Wydanie IIPHP5. Tworzenie stron WWW. Ćwiczenia praktyczne. Wydanie II
PHP5. Tworzenie stron WWW. Ćwiczenia praktyczne. Wydanie IIWydawnictwo Helion
 
Porównanie wdrożeń SAP HANA - cloud computing w data center vs. model zakupowy
Porównanie wdrożeń SAP HANA - cloud computing w data center vs. model zakupowy Porównanie wdrożeń SAP HANA - cloud computing w data center vs. model zakupowy
Porównanie wdrożeń SAP HANA - cloud computing w data center vs. model zakupowy Polcom
 
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOpsPLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOpsPROIDEA
 

Similaire à PHP-PM. Hit czy kit? (20)

Jak przyspieszyłem aplikację produkcyjną o ponad 40%
Jak przyspieszyłem aplikację produkcyjną o ponad 40%Jak przyspieszyłem aplikację produkcyjną o ponad 40%
Jak przyspieszyłem aplikację produkcyjną o ponad 40%
 
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
 
Webinar symfony
Webinar symfonyWebinar symfony
Webinar symfony
 
Adam Selin - Na czym WordPress stoi. O serwerach słów kilka
Adam Selin - Na czym WordPress stoi. O serwerach słów kilkaAdam Selin - Na czym WordPress stoi. O serwerach słów kilka
Adam Selin - Na czym WordPress stoi. O serwerach słów kilka
 
Wydajność i optymalizacja
Wydajność i optymalizacjaWydajność i optymalizacja
Wydajność i optymalizacja
 
3Camp Tech 2016/11/15 - Front-end tooling: package managers
3Camp Tech 2016/11/15 - Front-end tooling: package managers3Camp Tech 2016/11/15 - Front-end tooling: package managers
3Camp Tech 2016/11/15 - Front-end tooling: package managers
 
Apache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaApache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użycia
 
Dobre przepisy na cake php
Dobre przepisy na cake phpDobre przepisy na cake php
Dobre przepisy na cake php
 
PLNOG 18 - Sebastian Pasternacki - Bezpieczeństwo sieci operatorskich oraz en...
PLNOG 18 - Sebastian Pasternacki - Bezpieczeństwo sieci operatorskich oraz en...PLNOG 18 - Sebastian Pasternacki - Bezpieczeństwo sieci operatorskich oraz en...
PLNOG 18 - Sebastian Pasternacki - Bezpieczeństwo sieci operatorskich oraz en...
 
Jaki hosting pod wordpressa
Jaki hosting pod wordpressaJaki hosting pod wordpressa
Jaki hosting pod wordpressa
 
PLNOG 17 - Sławomir Janukowicz - NFV – using Juniper vMX, vSRX and NFX
PLNOG 17 - Sławomir Janukowicz - NFV – using Juniper vMX, vSRX and NFXPLNOG 17 - Sławomir Janukowicz - NFV – using Juniper vMX, vSRX and NFX
PLNOG 17 - Sławomir Janukowicz - NFV – using Juniper vMX, vSRX and NFX
 
Noc informatyka
Noc informatykaNoc informatyka
Noc informatyka
 
Od zera do Automattica
Od zera do AutomatticaOd zera do Automattica
Od zera do Automattica
 
Agregacja i analiza logów
Agregacja i analiza logówAgregacja i analiza logów
Agregacja i analiza logów
 
Zbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zapleczaZbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zaplecza
 
Feo w-joomla
Feo w-joomlaFeo w-joomla
Feo w-joomla
 
(prawie) Wszystko o Tinkerze
(prawie) Wszystko o Tinkerze(prawie) Wszystko o Tinkerze
(prawie) Wszystko o Tinkerze
 
PHP5. Tworzenie stron WWW. Ćwiczenia praktyczne. Wydanie II
PHP5. Tworzenie stron WWW. Ćwiczenia praktyczne. Wydanie IIPHP5. Tworzenie stron WWW. Ćwiczenia praktyczne. Wydanie II
PHP5. Tworzenie stron WWW. Ćwiczenia praktyczne. Wydanie II
 
Porównanie wdrożeń SAP HANA - cloud computing w data center vs. model zakupowy
Porównanie wdrożeń SAP HANA - cloud computing w data center vs. model zakupowy Porównanie wdrożeń SAP HANA - cloud computing w data center vs. model zakupowy
Porównanie wdrożeń SAP HANA - cloud computing w data center vs. model zakupowy
 
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOpsPLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
 

Plus de The Software House

Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...The Software House
 
Jak efektywnie podejść do certyfikacji w AWS?
Jak efektywnie podejść do certyfikacji w AWS?Jak efektywnie podejść do certyfikacji w AWS?
Jak efektywnie podejść do certyfikacji w AWS?The Software House
 
O co chodzi z tą dostępnością cyfrową?
O co chodzi z tą dostępnością cyfrową?O co chodzi z tą dostępnością cyfrową?
O co chodzi z tą dostępnością cyfrową?The Software House
 
Chat tekstowy z użyciem Amazon Chime
Chat tekstowy z użyciem Amazon ChimeChat tekstowy z użyciem Amazon Chime
Chat tekstowy z użyciem Amazon ChimeThe Software House
 
Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?The Software House
 
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWSAnaliza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWSThe Software House
 
Feature flags na ratunek projektu w JavaScript
Feature flags na ratunek projektu w JavaScriptFeature flags na ratunek projektu w JavaScript
Feature flags na ratunek projektu w JavaScriptThe Software House
 
Typowanie nominalne w TypeScript
Typowanie nominalne w TypeScriptTypowanie nominalne w TypeScript
Typowanie nominalne w TypeScriptThe Software House
 
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQLAutomatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQLThe Software House
 
Serverless Compose vs hurtownia danych
Serverless Compose vs hurtownia danychServerless Compose vs hurtownia danych
Serverless Compose vs hurtownia danychThe Software House
 
Testy API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięciTesty API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięciThe Software House
 
Jak skutecznie read model. Case study
Jak skutecznie read model. Case studyJak skutecznie read model. Case study
Jak skutecznie read model. Case studyThe Software House
 
Firestore czyli ognista baza od giganta z Doliny Krzemowej
Firestore czyli ognista baza od giganta z Doliny KrzemowejFirestore czyli ognista baza od giganta z Doliny Krzemowej
Firestore czyli ognista baza od giganta z Doliny KrzemowejThe Software House
 
Jak utrzymać stado Lambd w ryzach
Jak utrzymać stado Lambd w ryzachJak utrzymać stado Lambd w ryzach
Jak utrzymać stado Lambd w ryzachThe Software House
 
O łączeniu Storyblok i Next.js
O łączeniu Storyblok i Next.jsO łączeniu Storyblok i Next.js
O łączeniu Storyblok i Next.jsThe Software House
 
Amazon Step Functions. Sposób na implementację procesów w chmurze
Amazon Step Functions. Sposób na implementację procesów w chmurzeAmazon Step Functions. Sposób na implementację procesów w chmurze
Amazon Step Functions. Sposób na implementację procesów w chmurzeThe Software House
 
Od Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki koduOd Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki koduThe Software House
 

Plus de The Software House (20)

Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
 
Uszanowanko Podsumowanko
Uszanowanko PodsumowankoUszanowanko Podsumowanko
Uszanowanko Podsumowanko
 
Jak efektywnie podejść do certyfikacji w AWS?
Jak efektywnie podejść do certyfikacji w AWS?Jak efektywnie podejść do certyfikacji w AWS?
Jak efektywnie podejść do certyfikacji w AWS?
 
O co chodzi z tą dostępnością cyfrową?
O co chodzi z tą dostępnością cyfrową?O co chodzi z tą dostępnością cyfrową?
O co chodzi z tą dostępnością cyfrową?
 
Chat tekstowy z użyciem Amazon Chime
Chat tekstowy z użyciem Amazon ChimeChat tekstowy z użyciem Amazon Chime
Chat tekstowy z użyciem Amazon Chime
 
Migracje danych serverless
Migracje danych serverlessMigracje danych serverless
Migracje danych serverless
 
Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?
 
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWSAnaliza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
 
Feature flags na ratunek projektu w JavaScript
Feature flags na ratunek projektu w JavaScriptFeature flags na ratunek projektu w JavaScript
Feature flags na ratunek projektu w JavaScript
 
Typowanie nominalne w TypeScript
Typowanie nominalne w TypeScriptTypowanie nominalne w TypeScript
Typowanie nominalne w TypeScript
 
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQLAutomatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
 
Serverless Compose vs hurtownia danych
Serverless Compose vs hurtownia danychServerless Compose vs hurtownia danych
Serverless Compose vs hurtownia danych
 
Testy API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięciTesty API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięci
 
Jak skutecznie read model. Case study
Jak skutecznie read model. Case studyJak skutecznie read model. Case study
Jak skutecznie read model. Case study
 
Firestore czyli ognista baza od giganta z Doliny Krzemowej
Firestore czyli ognista baza od giganta z Doliny KrzemowejFirestore czyli ognista baza od giganta z Doliny Krzemowej
Firestore czyli ognista baza od giganta z Doliny Krzemowej
 
Jak utrzymać stado Lambd w ryzach
Jak utrzymać stado Lambd w ryzachJak utrzymać stado Lambd w ryzach
Jak utrzymać stado Lambd w ryzach
 
Jak poskromić AWS?
Jak poskromić AWS?Jak poskromić AWS?
Jak poskromić AWS?
 
O łączeniu Storyblok i Next.js
O łączeniu Storyblok i Next.jsO łączeniu Storyblok i Next.js
O łączeniu Storyblok i Next.js
 
Amazon Step Functions. Sposób na implementację procesów w chmurze
Amazon Step Functions. Sposób na implementację procesów w chmurzeAmazon Step Functions. Sposób na implementację procesów w chmurze
Amazon Step Functions. Sposób na implementację procesów w chmurze
 
Od Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki koduOd Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki kodu
 

PHP-PM. Hit czy kit?

  • 1. PHP-PM Hit czy kit? Franciszek Krasowski PHP developer
  • 2. Agenda • Trochę teorii • PHP-PM - Co to jest? • PHP jako serwer • Zastosowania PHP-PM • Użycie PHP-PM • Benchmarki • Podsumowanie
  • 3.
  • 4. PPM – według twórców
  • 8. Istotne informacje • Workery mimo wszystko nie są stabilne • Spore wycieki pamięci • Resetowanesą po x czasu (konfigurowalne) • Reset również po x requestachobsłużonych przez worker • debug mode odświeża workery przy każdej zmianie
  • 9.
  • 15. Zastosowania • Wymaga abstrakcji Request-Response • Nie działa na „czystym” PHP • Działa bezproblemowo z Symfony (włącznie z 4.1) • Laravel • Drupal, Zend i CakePHP -> teoretycznie obsługiwane, ale zalecana ostrożność • NIE działa z Wordpressem
  • 17. Docker • 3 gotowe obrazy: • nginx + pm • pm standalone • pm jako entrypoint
  • 18. Lokalnie • Wymagania: • phpX-cgi -> X >=5.6.0 • PCNTL -> wyklucza postawienie na Windows • Możliwości: • git clone php-pm/php-pm • composer require php-pm/php-pm • + dodatkowy adapter
  • 19. Istotne parametry • --bridge=HttpKernel -> bridge konwertującyrequest z ReactPHPdo PSR7 • --workers=8 -> ilość równoległych workerów • --debug=0 -> live reload workerów przy zmianie kodu (+ verbose) • --logging=1 -> logowanie na stdOut • --static-directory="" -> katalog z statycznymiplikami • --bootstrap=Symfony -> Klasa do boostrapowania frameworka (dla Laravela -> laravel) • --cgi-path -> ścieżka do php-cgi
  • 21. Co będzie testowane? • Wszystko skonteneryzowane • PHP-PM + nginx (szybszy) • FPM + nginx • Apache server • Baza z php 7.2.8 dla wszystkich kontenerów • Kod wewnątrz kontenerów • Symfony + Laravel • Kod można znaleźć: https://gitlab.com/Franek.krasowski/php-pm-uszanowanko
  • 22. Na czym będzie testowane? • i5-4690k 4,2GHz-> 4 rdzeniowy • 24GB RAM • Ubuntu 17.04 • Docker 18.03.1 • Docker Compose 1.22.0 • Siege 4.0.2
  • 23. PPM + nginx fpm + nginx apache siege –c1 –t1m –b http://localhost:8x/
  • 24. PPM + nginx fpm + nginx apache siege –c10 –t1m –b http://localhost:8x/
  • 25. PPM + nginx fpm + nginx apache siege –c100 –t1m –b http://localhost:8x/
  • 26. Zestawienie • PPM maksymalnie 5x szybszy • Przy większym obciążeniu traci przewagę • PPM czasem potrafi zjeść całą pamięć828,4 1316,91 1396,26 164,88 653,26 7 09,46 160,95 635,76 559,43 0 200 400 600 800 1000 1200 1400 1600 1 10 100 Requests/s Concurency PHP-PM FPM Apache
  • 27.
  • 28. PPM + nginx fpm + nginx apache siege –c1 –t1m –b http://localhost:8x/api/test_entities.json
  • 29. PPM + nginx fpm + nginx apache siege –c10 –t1m –b http://localhost:8x/api/test_entities.json
  • 30. PPM + nginx fpm + nginx apache siege –c100 –t1m –b http://localhost:8x/api/test_entities.json
  • 31. Zestawienie • PPM średnio około 3x szybszy • Nie traci przewagi przy większym zrównolegleniu 122,58 315,88 308,4 38,31 137,73 106,56 37 131,53 100,07 0 50 100 150 200 250 300 350 1 10 100 Requests/s Concurency PHP-PM FPM Apache
  • 32. PPM + nginx fpm + nginx apache siege –c1 –t1m –b http://localhost:9x/
  • 33. PPM + nginx fpm + nginx apache siege –c10 –t1m –b http://localhost:9x/
  • 34. PPM + nginx fpm + nginx apache siege –c100 –t1m –b http://localhost:9x/
  • 35. Zestawienie • Gorzej w porównaniu do Symfony • Duża losowość wyników 15,67 115,27 128,29 16,43 113,42 134,78 16,03 88,02 138,31 0 20 40 60 80 100 120 140 160 1 10 100 Requests/s Concurency PHP-PM FPM Apache
  • 36. PPM + nginx fpm + nginx apache siege –c10 –t10h –b http://localhost:8x/
  • 37. Zestawienie • PPM • ponad 4x szybszy od FPM-a • 2x od Apache • PPM – zgubił 3 requesty w 10h, Apache i FPM żadnego • PPM -> najdłuższy maksymalny czas requesta(1,04s) 1341,76 313,81 597,69 0 200 400 600 800 1000 1200 1400 1600 PHP-PM FPM Apache Requests/s
  • 38. Uruchomienie na serwerze z Rancherem • Bieda serwery nie dały rady obsłużyć requestów • Wynik równy, ograniczony możliwościami serwerów • Requestobsługiwany nawet do 40s • Większe obciążenie -> mniej requestów/s
  • 39. Podsumowanie • Szybszy od klasycznego rozwiązania (chociaż stwierdzenie 15x szybszy to przesada) • Pamięciożerny • „Gubi” niektóre requesty • Potrafi się zamulić • Duża apka (?) • Hit czy kit?