Blog e Artigos Tecnologia

Blog e Artigos Tecnologia

Who am I?

Sou ūüíĽ Desenvolvedor PHP | Laravel #Fullstack #Dev #DevOps #Laravel #PHP #lucena


What I write about


Recent Posts

Acelere o Laravel em cima do Swoole

Swoole¬†√© uma estrutura de programa√ß√£o ass√≠ncrona de n√≠vel de produ√ß√£o para PHP.¬†√Č uma extens√£o PHP escrita em linguagem C pura, que permite que desenvolvedores de PHP escrevam servi√ßos TCP, UDP, soquete Unix, HTTP, WebSocket de alto desempenho, escal√°veis ‚Äč‚Äče simult√Ęneos em HTTP, sem servi√ßos de muito conhecimento da programa√ß√£o de E / S sem bloqueio e kernel Linux de baixo n√≠vel.¬†Voc√™ pode pensar no¬†Swoole¬†como algo como o NodeJS, mas para o PHP, com maior desempenho.

Por que rodar o Laravel no Swoole?

A imagem abaixo ilustra o ciclo de vida em PHP. Como você pode ver, quando você executa o script php sempre, o PHP precisa inicializar os módulos e iniciar o Zend Engine para o seu ambiente de execução. E seu script PHP precisa ser compilado no OpCodes para a execução do Zend Engine.

No entanto, esse ciclo de vida precisa ser repetido v√°rias vezes em cada solicita√ß√£o.¬†Como o ambiente criado para uma √ļnica solicita√ß√£o ser√° imediatamente destru√≠do ap√≥s a conclus√£o do processo de solicita√ß√£o.

Em outras palavras, no ciclo de vida tradicional do PHP, gasta muito tempo criando e destruindo recursos para a execução do script. E imagine em estruturas como o Laravel , quantos arquivos ele precisa carregar para uma solicitação? Também há muito consumo de E / S para carregar arquivos.

Ciclo de vida do PHP

E se tivermos um servidor¬†interno¬†sobre o¬†Swoole¬†e todos os scripts puderem ser mantidos na mem√≥ria ap√≥s o primeiro carregamento?¬†√Č por isso que tentamos rodar o¬†Laravel¬†no¬†Swoole¬†.¬†O Swoole¬†pode ser um poderoso impulsionador de desempenho e o¬†Laravel¬†fornece a estrutura elegante e o uso do c√≥digo.¬†Essa √© uma combina√ß√£o perfeita!

Instalação

Aqui estão os principais recursos de swooletw/laravel-swoole:

  • Execute o¬†aplicativo¬†Laravel / Lumen¬†em cima do¬†Swoole¬†.
  • Excelente desempenho, aumentando at√©¬†30x¬†.
  • Modo Sandbox para isolar o cont√™iner de aplicativos.
  • Suporte √† execu√ß√£o do servidor WebSocket no¬†Laravel¬†.
  • Socket.ioProtocolo de¬†suporte¬†.
  • Tabela Swoole de suporte para compartilhamento de dados entre processos.

Exija este pacote com o Composer:

$ composer require swooletw/laravel-swoole

Este pacote depende da extensão Swoole . Verifique se você instalou o Swoole antes de usar este pacote. Usando este comando para instalá-lo rapidamente:

pecl install swoole

Após instalar a extensão, você precisará editar o php.ini e adicionar uma extension=swoole.solinha antes de usá-lo.

php -i | grep php.ini                      # check the php.ini file location
sudo echo "extension=swoole.so" >> php.ini  # add the extension=swoole.so to the end of php.ini
php -m | grep swoole                       # check if the swoole extension has been enabled

Visite o¬†site oficial¬†para mais informa√ß√Ķes.

Aviso: Atualmente, o Swoole suporta apenas Linux e OSX. Os servidores Windows ainda não podem usar o Swoole.

Em seguida, adicione o provedor de serviços:

Se você estiver usando o Laravel , adicione o provedor de serviços à matriz do provedor em config/app.php:

[
    'providers' => [
        SwooleTW\Http\LaravelServiceProvider::class,
    ],
]

Se você estiver usando o Lumen , acrescente o seguinte código a bootstrap/app.php:

$app->register(SwooleTW\Http\LumenServiceProvider::class);

Ele suporta a descoberta automática de pacotes. Se você estiver executando o Laravel 5.5, poderá pular esta etapa.

Funcionando

Agora, você pode executar o seguinte comando para iniciar o servidor HTTP Swoole.

$ php artisan swoole:http start

Então você pode ver a seguinte mensagem:

Starting swoole http server...
Swoole http server started: <http://127.0.0.1:1215>

Agora você pode acessar seu aplicativo Laravel no http://127.0.0.1:1215.

Referência

Teste com o Lumen 5.5 limpo, usando o MacBook Air 13, 2015.
Ferramenta de benchmarking: wrk

wrk -t4 -c100 http://your.app

Nginx com FPM

Running 10s test @ http://lumen.app:9999
  4 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     1.14s   191.03ms   1.40s    90.31%
    Req/Sec    22.65     10.65    50.00     65.31%
  815 requests in 10.07s, 223.65KB read
Requests/sec:     80.93
Transfer/sec:     22.21KB

Servidor HTTP Swoole

Running 10s test @ http://127.0.0.1:1215
  4 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    11.58ms    4.74ms  68.73ms   81.63%
    Req/Sec     2.19k   357.43     2.90k    69.50%
  87879 requests in 10.08s, 15.67MB read
Requests/sec:   8717.00
Transfer/sec:      1.55MB

Saber mais

https://github.com/swooletw/laravel-swoole

https://github.com/swooletw/laravel-swoole/wiki