SlideShare une entreprise Scribd logo
1  sur  26
Télécharger pour lire hors ligne
PHP de alta performance
com RoadRunner
PHP Conference 2020
Leonardo Tumadjian
Quem sou eu?
Não sei quem eu sou, mas sei o que quero ser!
1. PHP lover desde 2009
2. Especialista PHP na HeroSpark
3. Tech Lead/Consultor técnico na Multiverse Marketing
4. Professor/Instrutor Web a 7 anos
5. Pós graduado em Engenharia Web
6. Palestrante
7. Gamer nas horas vagas
Linkedin:
https://www.linkedin.com/in/leonardotumadjian
Youtube
https://www.youtube.com/channel/UC3k1OluPr0VPnwKmkfvwrPg
O PHP vai morrer?
Claro que vai, tudo morre nessa vida!
Mas… not yet!
Já experimentou comida Coreana?
Bibimp bap!
Proposta da palestra
Atenção, o projeto apresentado aqui não tem o intuito de ir de encontro com as
stacks que já usamos, mas sim dar uma visão de que podemos encontrar
soluções em casos de maiores necessidades, temos que ter cuidado com a hype
e estudar com muito cuidado o que devemos ou não usar.
Lembrando que não existe bala de prata e toda solução terá pontos positivos e
pontos negativos, cabe a nós achar o que melhor se adequa em nossa
necessidade.
Servidores para PHP
https://hostingwiki.org/what-is-apache/ https://www.zabbix.com/integrations/nginx https://www.similartech.com/technologies/zend-server
Ciclo de vida de um Request
Client/Browser Server/NGINX PHP-FPM / Reverse Proxy
Request > Execução > Resposta > Fim da execução
Dentro da Aplicação Language boot
Globals Parser
Framework boot
Load dependencies
Load globals
Load Routes
Handle routes
Execute action (Controller)
Load Response
Stream response
Dentro da Aplicação Language boot
Globals Parser
Framework boot
Load dependencies
Load globals
Load Routes
Handle routes
Execute action (Controller)
Stream response
Preloading
O preload é um solução que veio no PHP 7.4 para que possamos indicar ao
OPCache quais classes devemos deixar pré carregadas, chegando a algo bem
semelhante, segue um exemplo:
Infinite looping
Técnica usada com bibliotecas assíncronas onde o servidor HTTP fica em loop, esperando por uma
requisição, as mais conhecidas são: ReactPHP e Swoole.
Abaixo uma implementação abaixo usando o swoole:
Problemas
1. Dificil monitorar
2. Gerenciamento de memória
3. I/O sem padrão
4. Extensão do PHP
Apresento-lhes o RoadRunner
Servidor de aplicação de alta performance para PHP, load
balancer e gerenciador de processos escrito em Golang,
desernvolvido pela empresa russa Spiral Scout, o
RoadRunner vem com a premissa de potencializar a vida
longa ao PHP.
1. Pronto para produção
2. Alta performance
3. Não querer extensão
As features
Funcionalidades que vão além de performance:
1. Middlewares em Golang
2. PSR7
3. HTTPS / HTTP2
4. Load balancer / Process manager e task pipeline
5. Frontend agnostic (Queue, PSR-7, GRPC, etc)
6. Metricas (Prometheus)
7. Trabalha sobre TCP/Unix socket
8. Workers replacement
9. Gerenciamento do ciclo de vida
10. Super rápido
11. Integração com Frameworks
12. Funciona no Windows (Uau!)
Install
É possível instalar de duas formas:
Composer:
$ composer require spiral/roadrunner
$ ./vendor/bin/rr get-binary
$ mv ./rr /usr/local/bin/rr
Precisa ter as ext: php-curl e php-zip
Via golang build:
$ clone https://github.com/spiral/roadrunner.git
$ go mod download
$ make
$ make test
Config
Configure o servidor via YAML ou JSON file, criar um arquivo
.rr.yml, nele é onde é possível colocar configurações sobre o
workers, server, gerenciamento e etc.
Escrevendo um Worker
Um simples worker sem framework:
Caveats
Com grandes poderes ...
Talvez o RoadRunner não seja para você, é preciso lidar com
problemas ao usar o PHP old school:
● Sem globals _POST, _GET, _COOKIES, _SESSION, _SERVER
● PSR7 request handle(PSR17 for factory)
● Problema de Upload(Symfony, Laravel)
● Exit and die
● Session default problems
Produção
1. Fechar todos os recursos
2. Regule seu pool time
3. MemoryLeaks
4. $workers === $cpuNumThreads
5. Evite poluição de estado(global, memory cache)
6. maxJobs
7. OPCache via CLI
8. Health Check para Nuvem
Integrando com Golang
Via RPC é possível delegar via PHP usando TCP ao golang
alguma execução, para que assim seja processado e
retornado a execução.
Já existe uma extensão para o RR que faz integração com
gRPC ficando ainda mais performático e padronizado as
conversas entre os serviços, segue endereço do projeto:
Formas de implantação
● Server as service (vertical)
● ECS Serverless (horizontal)
● K8 cluster (horizontal)
● Lambda Serverless (functional)
Performance
Performance
Rodando o RoadRunner
● Config
● Server command
● Worker
● Frameworks
Perguntas?
Obrigado!
Contato: tumadjian@gmail.com
Referências
Site official:
https://roadrunner.dev
Documentação:
https://roadrunner.dev/docs
Artigos:
https://spiralscout.com/blog/php-was-never-meant-to-die
https://dzone.com/articles/new-dedicated-application-server-revs-php-to-peak
https://mnapoli.fr/serverless-php-performances/
https://stitcher.io/blog/preloading-in-php-74

Contenu connexe

Tendances

Phpreact flisol-fb-2014
Phpreact flisol-fb-2014Phpreact flisol-fb-2014
Phpreact flisol-fb-2014
Adler Medrado
 

Tendances (20)

Entendendo Conceitos Caching com PHP
Entendendo Conceitos Caching com PHPEntendendo Conceitos Caching com PHP
Entendendo Conceitos Caching com PHP
 
Cya grunt.js, hello gulp.js
Cya grunt.js, hello gulp.jsCya grunt.js, hello gulp.js
Cya grunt.js, hello gulp.js
 
O Spring está morto! Viva o Spring!
O Spring está morto! Viva o Spring!O Spring está morto! Viva o Spring!
O Spring está morto! Viva o Spring!
 
1001 maneiras de debugar o WordPress
1001 maneiras de debugar o WordPress1001 maneiras de debugar o WordPress
1001 maneiras de debugar o WordPress
 
PHP GUIA DE REFERÊNCIA - 02 - USANDO PHP
PHP GUIA DE REFERÊNCIA - 02 - USANDO PHPPHP GUIA DE REFERÊNCIA - 02 - USANDO PHP
PHP GUIA DE REFERÊNCIA - 02 - USANDO PHP
 
Django para desenvolvimento web; porque ser repetitivo é chato.
Django para desenvolvimento web; porque ser repetitivo é chato.Django para desenvolvimento web; porque ser repetitivo é chato.
Django para desenvolvimento web; porque ser repetitivo é chato.
 
Django Channels - Aplicações real time com Django
Django Channels - Aplicações real time com DjangoDjango Channels - Aplicações real time com Django
Django Channels - Aplicações real time com Django
 
Drupal Performance - Dicas e técnicas para levar seu Drupal às nuvens
Drupal Performance - Dicas e técnicas para levar seu Drupal às nuvensDrupal Performance - Dicas e técnicas para levar seu Drupal às nuvens
Drupal Performance - Dicas e técnicas para levar seu Drupal às nuvens
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panos
 
Programando php com mais segurança
Programando php com mais segurançaProgramando php com mais segurança
Programando php com mais segurança
 
PostgreSQL Rock Star
PostgreSQL Rock StarPostgreSQL Rock Star
PostgreSQL Rock Star
 
Django - A sua cápsula de soluções web em python
Django - A sua cápsula de soluções web em pythonDjango - A sua cápsula de soluções web em python
Django - A sua cápsula de soluções web em python
 
A mágica por trás dos aplicativos ( Api com o Laravel )
A mágica por trás dos aplicativos ( Api com o Laravel )A mágica por trás dos aplicativos ( Api com o Laravel )
A mágica por trás dos aplicativos ( Api com o Laravel )
 
Primeira Aula PHP
Primeira Aula PHPPrimeira Aula PHP
Primeira Aula PHP
 
A saga do desenvolvedor java
A saga do desenvolvedor javaA saga do desenvolvedor java
A saga do desenvolvedor java
 
Phpreact flisol-fb-2014
Phpreact flisol-fb-2014Phpreact flisol-fb-2014
Phpreact flisol-fb-2014
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
Desenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2pyDesenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2py
 
Trabalhando de forma profissional com silex
Trabalhando de forma profissional com silexTrabalhando de forma profissional com silex
Trabalhando de forma profissional com silex
 
Qualidade no desenvolvimento de sistemas
Qualidade no desenvolvimento de sistemasQualidade no desenvolvimento de sistemas
Qualidade no desenvolvimento de sistemas
 

Similaire à PHP de alta performance com RoadRunner

PHP para aplicações Web de grande porte
PHP para aplicações Web  de grande portePHP para aplicações Web  de grande porte
PHP para aplicações Web de grande porte
Felipe Ribeiro
 
Php5 Orientado A Objetos
Php5 Orientado A ObjetosPhp5 Orientado A Objetos
Php5 Orientado A Objetos
Rápido Site
 
Tutorial Django + Python
Tutorial Django + PythonTutorial Django + Python
Tutorial Django + Python
Mateus Padua
 
40 php orientado a objetos
40 php orientado a objetos40 php orientado a objetos
40 php orientado a objetos
Francisco Santos
 

Similaire à PHP de alta performance com RoadRunner (20)

Mini Curso de PHP
Mini Curso de PHPMini Curso de PHP
Mini Curso de PHP
 
Guia php
Guia phpGuia php
Guia php
 
Evolucao php2
Evolucao php2Evolucao php2
Evolucao php2
 
PHP, Presente e Futuro
PHP, Presente e FuturoPHP, Presente e Futuro
PHP, Presente e Futuro
 
PHP 5 de Forma Correta e Segura
PHP 5 de Forma Correta e SeguraPHP 5 de Forma Correta e Segura
PHP 5 de Forma Correta e Segura
 
A Evolução do PHP - 4º Dev In Santos
A Evolução do PHP - 4º Dev In SantosA Evolução do PHP - 4º Dev In Santos
A Evolução do PHP - 4º Dev In Santos
 
PHP Presente e Futuro
PHP Presente e FuturoPHP Presente e Futuro
PHP Presente e Futuro
 
PHP para aplicações Web de grande porte
PHP para aplicações Web  de grande portePHP para aplicações Web  de grande porte
PHP para aplicações Web de grande porte
 
Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011
 
Pense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkPense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend Framework
 
CURSO DE PHP PARA INICIANTES - AULA 1
CURSO DE PHP PARA INICIANTES - AULA 1CURSO DE PHP PARA INICIANTES - AULA 1
CURSO DE PHP PARA INICIANTES - AULA 1
 
Apresentação faef
Apresentação faefApresentação faef
Apresentação faef
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com Python
 
Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011
 
JS Experience 2017 - Utilizando a virtualização para simplificar o desenvolvi...
JS Experience 2017 - Utilizando a virtualização para simplificar o desenvolvi...JS Experience 2017 - Utilizando a virtualização para simplificar o desenvolvi...
JS Experience 2017 - Utilizando a virtualização para simplificar o desenvolvi...
 
Php5 Orientado A Objetos
Php5 Orientado A ObjetosPhp5 Orientado A Objetos
Php5 Orientado A Objetos
 
Tutorial Django + Python
Tutorial Django + PythonTutorial Django + Python
Tutorial Django + Python
 
Apostila ph pwamp
Apostila ph pwampApostila ph pwamp
Apostila ph pwamp
 
40 php orientado a objetos
40 php orientado a objetos40 php orientado a objetos
40 php orientado a objetos
 
php orientado_a_objetos
php orientado_a_objetosphp orientado_a_objetos
php orientado_a_objetos
 

Plus de Leonardo Tumadjian

Plus de Leonardo Tumadjian (6)

Zend Expressive de micro a fullstack
Zend Expressive de micro a fullstackZend Expressive de micro a fullstack
Zend Expressive de micro a fullstack
 
Php 7 do início ao profissional
Php 7  do início ao profissionalPhp 7  do início ao profissional
Php 7 do início ao profissional
 
PHP freakshow 2 PHP Experience 2016
PHP freakshow 2 PHP Experience 2016PHP freakshow 2 PHP Experience 2016
PHP freakshow 2 PHP Experience 2016
 
Palestra Linux Survival Kit para PHPeiros
Palestra Linux Survival Kit para PHPeirosPalestra Linux Survival Kit para PHPeiros
Palestra Linux Survival Kit para PHPeiros
 
Escreva menos e entenda mais com DSLs desacopladas
Escreva menos e entenda mais com DSLs desacopladasEscreva menos e entenda mais com DSLs desacopladas
Escreva menos e entenda mais com DSLs desacopladas
 
Php Freak Show por Leonardo Tumadjian
Php Freak Show por Leonardo TumadjianPhp Freak Show por Leonardo Tumadjian
Php Freak Show por Leonardo Tumadjian
 

Dernier

Dernier (6)

Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 

PHP de alta performance com RoadRunner

  • 1. PHP de alta performance com RoadRunner PHP Conference 2020 Leonardo Tumadjian
  • 2. Quem sou eu? Não sei quem eu sou, mas sei o que quero ser! 1. PHP lover desde 2009 2. Especialista PHP na HeroSpark 3. Tech Lead/Consultor técnico na Multiverse Marketing 4. Professor/Instrutor Web a 7 anos 5. Pós graduado em Engenharia Web 6. Palestrante 7. Gamer nas horas vagas Linkedin: https://www.linkedin.com/in/leonardotumadjian Youtube https://www.youtube.com/channel/UC3k1OluPr0VPnwKmkfvwrPg
  • 3. O PHP vai morrer? Claro que vai, tudo morre nessa vida! Mas… not yet! Já experimentou comida Coreana? Bibimp bap!
  • 4. Proposta da palestra Atenção, o projeto apresentado aqui não tem o intuito de ir de encontro com as stacks que já usamos, mas sim dar uma visão de que podemos encontrar soluções em casos de maiores necessidades, temos que ter cuidado com a hype e estudar com muito cuidado o que devemos ou não usar. Lembrando que não existe bala de prata e toda solução terá pontos positivos e pontos negativos, cabe a nós achar o que melhor se adequa em nossa necessidade.
  • 5. Servidores para PHP https://hostingwiki.org/what-is-apache/ https://www.zabbix.com/integrations/nginx https://www.similartech.com/technologies/zend-server
  • 6. Ciclo de vida de um Request Client/Browser Server/NGINX PHP-FPM / Reverse Proxy Request > Execução > Resposta > Fim da execução
  • 7. Dentro da Aplicação Language boot Globals Parser Framework boot Load dependencies Load globals Load Routes Handle routes Execute action (Controller) Load Response Stream response
  • 8. Dentro da Aplicação Language boot Globals Parser Framework boot Load dependencies Load globals Load Routes Handle routes Execute action (Controller) Stream response
  • 9. Preloading O preload é um solução que veio no PHP 7.4 para que possamos indicar ao OPCache quais classes devemos deixar pré carregadas, chegando a algo bem semelhante, segue um exemplo:
  • 10. Infinite looping Técnica usada com bibliotecas assíncronas onde o servidor HTTP fica em loop, esperando por uma requisição, as mais conhecidas são: ReactPHP e Swoole. Abaixo uma implementação abaixo usando o swoole:
  • 11. Problemas 1. Dificil monitorar 2. Gerenciamento de memória 3. I/O sem padrão 4. Extensão do PHP
  • 12. Apresento-lhes o RoadRunner Servidor de aplicação de alta performance para PHP, load balancer e gerenciador de processos escrito em Golang, desernvolvido pela empresa russa Spiral Scout, o RoadRunner vem com a premissa de potencializar a vida longa ao PHP. 1. Pronto para produção 2. Alta performance 3. Não querer extensão
  • 13. As features Funcionalidades que vão além de performance: 1. Middlewares em Golang 2. PSR7 3. HTTPS / HTTP2 4. Load balancer / Process manager e task pipeline 5. Frontend agnostic (Queue, PSR-7, GRPC, etc) 6. Metricas (Prometheus) 7. Trabalha sobre TCP/Unix socket 8. Workers replacement 9. Gerenciamento do ciclo de vida 10. Super rápido 11. Integração com Frameworks 12. Funciona no Windows (Uau!)
  • 14. Install É possível instalar de duas formas: Composer: $ composer require spiral/roadrunner $ ./vendor/bin/rr get-binary $ mv ./rr /usr/local/bin/rr Precisa ter as ext: php-curl e php-zip Via golang build: $ clone https://github.com/spiral/roadrunner.git $ go mod download $ make $ make test
  • 15. Config Configure o servidor via YAML ou JSON file, criar um arquivo .rr.yml, nele é onde é possível colocar configurações sobre o workers, server, gerenciamento e etc.
  • 16. Escrevendo um Worker Um simples worker sem framework:
  • 17. Caveats Com grandes poderes ... Talvez o RoadRunner não seja para você, é preciso lidar com problemas ao usar o PHP old school: ● Sem globals _POST, _GET, _COOKIES, _SESSION, _SERVER ● PSR7 request handle(PSR17 for factory) ● Problema de Upload(Symfony, Laravel) ● Exit and die ● Session default problems
  • 18. Produção 1. Fechar todos os recursos 2. Regule seu pool time 3. MemoryLeaks 4. $workers === $cpuNumThreads 5. Evite poluição de estado(global, memory cache) 6. maxJobs 7. OPCache via CLI 8. Health Check para Nuvem
  • 19. Integrando com Golang Via RPC é possível delegar via PHP usando TCP ao golang alguma execução, para que assim seja processado e retornado a execução. Já existe uma extensão para o RR que faz integração com gRPC ficando ainda mais performático e padronizado as conversas entre os serviços, segue endereço do projeto:
  • 20. Formas de implantação ● Server as service (vertical) ● ECS Serverless (horizontal) ● K8 cluster (horizontal) ● Lambda Serverless (functional)
  • 23. Rodando o RoadRunner ● Config ● Server command ● Worker ● Frameworks