Como o PHP é
executado na Web?

Vinícius Campitelli

Sobre

Sobre

Sobre mim

Vinícius Campitelli
Vinícius
Campitelli
  • Bacharel em Ciência da Computação pela UFSCar
  • Desenvolvedor há quase 20 anos
  • Membro do PHPSP
  • Entusiasta em cibersegurança
  • Consultor de TI e instrutor de treinamentos

Preparação

Preparação

Preparação

  1. Certifique-se que você tenha o Docker e o Docker Compose instalados
  2. Clone o repositório vcampitelli/slides-como-php-executado-web do GitHub
    
                                        $  git clone --recursive git@github.com/vcampitelli/slides-como-php-executado-web.git
                                    
  3. Acesse os slides localmente em docs/index.html

Continua... »

Preparação

  1. Na pasta demo, temos 5 pastas com aplicações de demonstração, cada uma com uma configuração de Docker Compose e rodando em uma porta diferente:
    Pasta Porta
    01-built-in 8001
    02-apache 8002
    03-nginx-fpm 8003
    04-serverless -
    05-swoole 8005
    06-roadrunner 8006
    07-frankenphp 8007
  2. Entre na pasta demo/app e instale as dependências:
    
                                        $  ./install
                                    

Introdução

Introdução

Como o PHP é executado?

Servidor embutido

Servidor embutido

O PHP possui um servidor embutido desde a versão 5.4 (de 2012), que pode ser utilizado para desenvolvimento e testes rápidos através do comando abaixo:


                            $  php -S <endereço>:<porta>
                        
PHP: Built-in web server

Servidor embutido

Mãos na massa

  • Entre na pasta demo/01-built-in
  • Inicialize os containers com:
    
                                        $  docker compose up -d
                                    
  • Efetue requisições para localhost:8001
Dica: você pode usar a variável de ambiente PHP_CLI_SERVER_WORKERS para permitir requisições simultâneas para o próprio servidor

Apache

Apache

Servidor Web criado em 1995 por desenvolvedores da NCSA (Universidade de Illinois), que por muitos anos dominou totalmente o mercado, mas que atualmente vem perdendo espaço — embora ainda sirva cerca de 16% dos sites do mundo

Desde 1999, é mantido pela Apache Software Foundation

About the Apache HTTP Server Project

Apache

Como o PHP é executado?

No modelo mais antigo de execução (chamado prefork), um interpretador do PHP é embutido no Apache em um módulo chamado mod_php

Quando uma requisição chega, o módulo executa os scripts PHP e retorna a resposta para o cliente

Atenção: esse modo não é mais recomendado por questões de performance
Running PHP on Apache httpd - Apache

Apache

Mãos na massa

  • Entre na pasta demo/02-apache
  • Inicialize os containers com:
    
                                        $  docker compose up -d
                                    
  • Efetue requisições para localhost:8002

Nginx e PHP-FPM

Nginx e PHP-FPM

O nginx é um servidor HTTP extremamente performático, mas que não possui interpretador PHP embutido, necessitando de um serviço externo para processar nossa aplicação

Através do protocolo FastCGI, podemos usá-lo junto com o PHP-FPM

Nginx e PHP-FPM

Funcionamento do Nginx + PHP-FPM

Nginx e PHP-FPM

Mãos na massa

  • Entre na pasta demo/03-nginx-fpm
  • Inicialize os containers com:
    
                                        $  docker compose up -d
                                    
  • Efetue requisições para localhost:8003

Serverless

Serverless

O AWS Lambda não possui suporte nativo ao PHP, mas permite facilmente configurarmos um ambiente (chamado runtime) para executarmos qualquer tipo de aplicação

Além do Vapor, a ferramenta mais conhecida para executar PHP em ambientes do Labmda é o bref.sh

Serverless

Bref

Como o Bref funciona?

Como o Bref funciona? PHP-FPM runtime for AWS Lambda - Bref

Serverless

Mãos na massa

  • Entre na pasta demo/04-serverless
  • Configure as credenciais de acesso à AWS no arquivo .env
  • Faça o deploy da Lambda com:
    
                                        $  docker compose up
                                    

Swoole

Swoole

A parallel network communication engine based on asynchronous event-driven and coroutine, written in C++, providing coroutine and high-performance network programming support for PHP
Swoole

Swoole

Funcionamento do Swoole

Swoole

Mãos na massa

  • Entre na pasta demo/05-swoole
  • Inicialize os containers com:
    
                                        $  docker compose up -d
                                    
  • Efetue requisições para localhost:8005

RoadRunner

RoadRunner

RoadRunner is a high-performance PHP application server, load-balancer, and process manager written in Golang
RoadRunner

RoadRunner

Projeto que começou em 2017 e teve sua primeira versão lançada em janeiro de 2018, tornou-se muito conhecido por ser o primeiro modelo de execução em PHP a permitir a criação de servidores gRPC com a linguagem

Você pode escolher entre o servidor Web próprio ou com nginx através do FastCGI

gRPC | RoadRunner

RoadRunner

Arquitetura básica

What is RoadRunner? What is RoadRunner?

RoadRunner

Mãos na massa

  • Entre na pasta demo/06-roadrunner
  • Inicialize os containers com:
    
                                        $  docker compose up -d
                                    
  • Efetue requisições para localhost:8006

FrankenPHP

FrankenPHP

FrankenPHP is a modern application server for PHP built on top of the Caddy web server.
FrankenPHP

FrankenPHP

Projeto começou em 2021, mas teve sua primeira versão oficial em 2023, causando um certo rebuliço na comunidade devido à sua alta performance

FrankenPHP

FrankenPHP

Possui dos modelos de execução:

Modo Clássico

Modelo parecido com o do PHP-FPM, em que se configura o número inicial e máximo de threads para processar as requisições

Using Classic Mode - FrankenPHP

Modo Worker

A aplicação é inicializada uma única vez em memória, e cada requisição é recebida e executada pelos processos ativos

Using Workers - FrankenPHP

FrankenPHP

Mãos na massa

  • Entre na pasta demo/07-frankenphp
  • Inicialize os containers com:
    
                                        $  docker compose up -d
                                    
  • Efetue requisições para localhost:8007

Benchmarks

Benchmarks

Benchmark 1 9 PHP runtimes: performance benchmark

Benchmarks

Benchmark 2 9 PHP runtimes: performance benchmark

Benchmarks

Benchmark 3 9 PHP runtimes: performance benchmark

Treinamentos in company

Gostou? Então conheça meus treinamentos corporativos e sob demanda sobre Desenvolvimento, Segurança da Informação, DevOps, Arquitetura de Sistemas e diversos outros assuntos em viniciuscampitelli.com
Workshops

Obrigado!