🚨Laravel octane - É o futuro do laravel?
O que é o octane?
Laravel Octane é um wrapper por trás dos servidores de alto desempenho, Swoole e RoadRunner. Swoole é uma extensão PHP que, após a instalação, nos fornece uma miríade de recursos interessantes e essenciais, como corrotinas, fibras, soquetes da web, cache e assim por diante. Por outro lado, o RoadRunner é um servidor de aplicativos de alto desempenho, balanceador de carga e gerenciador de processos escrito em GoLang. O Octane utiliza um ou outro, dependendo do próprio desenvolvedor. No entanto, vale a pena dizer que, ao usar a extensão PHP Swoole, o Octane obtém recursos muito mais úteis do que com o RoadRunner.
A ideia é que você possa começar a usar o Octane em segundos se escolher o RoadRunner, pois é apenas um arquivo binário GoLang, e você precisa baixá-lo e pronto. Quanto à instalação da extensão PHP Swoole, pode se tornar um processo complexo e pouco complicado, mas o resultado final é muito melhor, pois oferece muito mais recursos do que o RoadRunner.
Como o Octane funciona?
Os desenvolvedores adoram o Laravel; mesmo assim, há que levantar uma questão em relação ao desempenho. Não estamos dizendo que o Laravel é lento, mas pelo menos não é a melhor fera da área. O Laravel Octane tenta cortar esse problema pela metade.
Primeiro, vamos entender como o aplicativo Laravel é tradicionalmente servido em um servidor web. Depois que um servidor web (Apache ou Nginx) recebe uma solicitação, ele delega a solicitação ao PHP-FPM, iniciando um novo worker ou reutilizando o disponível.
Um trabalhador gera o novo processo ao executar um script PHP. Depois disso, o PHP incluirá todos os arquivos associados ao Projeto Laravel e os lerá do disco rígido, e a leitura do disco rígido sempre consome tempo e recursos. Em seguida, o PHP inicializará o Laravel Framework e seu contêiner de dependência, que na maioria das vezes leva muito mais tempo e recursos do que executar a lógica específica do negócio.
E, finalmente, nossa lógica de negócios é executada. A ideia é que a criação de novos processos, incluindo todos aqueles muitos arquivos do disco, a estrutura de bootstrap é apenas demorada e consome recursos, e isso acontece em cada solicitação. Então, o que o Laravel Octane pode fazer sobre isso?
O Laravel Octane simplesmente armazena em cache o framework laravel inicializado na RAM na primeira solicitação. Cada solicitação depois dele apenas usa a estrutura já inicializada da RAM em vez de ler os arquivos do disco rígido e reinicializar a estrutura. E essa é a ideia central que aumenta tanto o desempenho da estrutura.
Advertências a considerar
Embora o Octane sobrecarregue seu aplicativo Laravel, você deve considerar alguns problemas antes de entrar nesse barco. A ideia de que o Octane salva um framework inicializado na RAM significa que o Laravel Application se torna stateful. Simplesmente, quaisquer alterações de tempo de execução nas instâncias de classe, propriedades estáticas de classe e variáveis são preservadas. E todas as variáveis e instâncias criadas durante a solicitação são preservadas e disponibilizadas para todas as solicitações subsequentes.
Portanto, é o ambiente perfeito para vazamentos de memória. Pior de tudo, nós, programadores de PHP, não estamos acostumados a pensar em coleta de lixo e vazamentos de memória e coisas assim porque os aplicativos tradicionais isolariam um processo para cada solicitação. Depois de enviar a resposta, o processo morreria imediatamente. Portanto, cada solicitação seria colocada em área restrita em seu processo e os vazamentos de memória se tornariam quase impossíveis, pois toda a memória seria liberada no momento do encerramento do processo.
Mas a equipe do Laravel tenta reduzir essas armadilhas e possibilidades onde podem ocorrer vazamentos de memória. Então, eles estão reutilizando o Dependency Container montado na primeira requisição. Dependency Container é o núcleo da fundação laravel, e é a base da estrutura. O Contêiner de Dependência cuida da fiação automática, resolvendo/registrando/fornecendo serviços e assim por diante. Como é o componente central do framework, a equipe do Laravel decidiu que seria melhor torná-lo imutável entre solicitações. E então, é isso que acontece.
Quando o servidor Octane é iniciado, na primeira solicitação, o framework é inicializado e salvo na memória compartilhada, e também o Contêiner de Dependência é salvo separadamente. Vamos chamá-lo de Contêiner de Dependência Original. Então, em cada solicitação subseqüente, este Contêiner de Dependência Original é clonado e fornecido para esta solicitação. Depois que a solicitação é encerrada, esse clone é destruído. E nas próximas solicitações, o mesmo cenário é reproduzido.
A ideia é sempre ter o Contêiner de Dependência Original em todas as requisições, e se o Contêiner for modificado, isso não deve afetar as próximas requisições. Portanto, podemos dizer que o aplicativo Laravel alimentado por Octane é parcialmente stateful. No entanto, como observou Mohamed Said, um membro da Equipe Laravel, as bibliotecas e desenvolvedores PHP não estão prontos para que o Laravel se torne completamente stateful. Portanto, ao trabalhar com Contêiner de Dependência e Provedores de Serviços, lembre-se de que a Octane preserva o Contêiner de Dependência e tudo deve ficar bem.
Além disso, tenha em mente que o aplicativo Laravel baseado em Octane é diferente do aplicativo Laravel tradicional. A Octane tem seu servidor, e servidores web como Nginx e Apache devem apenas redirecionar o tráfego de entrada para o Octane Server e passar cabeçalhos de proxy adicionais, se necessário. Outra ressalva é que você precisa iniciar o servidor Octane no modo de observação durante o processo de desenvolvimento para que o servidor reinicie automaticamente nas alterações de código. Isso será muito familiar se você tiver um pouco de experiência no Node.
Benchmarks
“ Em um mundo pós-opcache e pós-octano – não vejo razão para escolher o Lumen para um novo projeto, ” – Diz Taylor Otwell, criador do Laravel. Lumen é um micro-framework baseado em Laravel, falando francamente, é um framework Laravel sem alguns dos componentes para torná-lo rápido. Portanto, o Laravel com o Octane como servidor tem muito mais desempenho do que o Lumen. Vamos ver alguns números reais, certo?
Resolvi testar o estresse do aplicativo Laravel em 3 modos:
Laravel com Octane Laravel com Apache WebServer (abordagem tradicional) Laravel com seu servidor embutido Bem, os resultados foram como você deve ter imaginado. Para teste, usei a conhecida e popular ferramenta wrk , com a seguinte configuração: wrk -t1 -c50 URL
E a rota de teste estava respondendo apenas com Hello World HTML, nada extravagante, mas mesmo com isso, o resultado é bem interessante.
Modo Laravel | Solicitação atendida em 10 segundos | RPS – Requisição por segundo |
---|---|---|
Laravel com Octane | 2667 | 266 rps |
Laravel com Apache | 1210 | 121 rps |
Laravel com servidor integrado | 705 | 70 rps |
Então, ao que parece, o Laravel com Octane como servidor é pelo menos duas vezes mais rápido que o tradicional Apache-Served Laravel.
Benefícios do Swoole
Como mencionei anteriormente, se você for usar o Octane, é muito melhor fazer isso com a extensão Swoole PHP, pois ela fornece alguns recursos interessantes adicionais. Claro, a própria extensão Swoole é uma história totalmente diferente e deveria ter um artigo próprio, mas vamos, por enquanto, mergulhar no que podemos obter de Swoole com o Octane.
Tarefas simultâneas – um dos recursos interessantes do Swoole é a simultaneidade. Você pode fazer várias tarefas ao mesmo tempo. Não é um suporte de encadeamento completo, mas mesmo essa pequena adição de simultaneidade no PHP pode ser incrivelmente útil. Por exemplo, conforme a figura abaixo, você pode utilizar as threads disponíveis e fazer diversas consultas assíncronas no banco de dados. E não se limita ao banco de dados; você pode fazer qualquer trabalho com tarefas simultâneas.
Ticks & Intervals – Tradicionalmente, como já dissemos várias vezes, o Laravel não é stateful, ou seja, cada requisição tem sua própria execução de script PHP, e não há servidor embutido em aplicações de produção. Por esse motivo, as tarefas que devem ser executadas na linha do tempo agendada são acionadas com a ajuda de um cron integrado ao Linux. Mas com o Octane, o Laravel obtém estado e seu próprio servidor, e não precisa de cron para acionar algumas ações de maneira programada. Toda essa lógica pode ser feita dentro do servidor Octane. E para utilizar essa funcionalidade, precisamos registrar nossas tarefas agendadas no método de inicialização do provedor de serviços com a ajuda de Octane Ticks, e a Octane se encarregará de acionar essas tarefas.
O Octane Cache – E assim, vêm mais vantagens com statefulness. Com a capacidade de Swoole Tables e statefulness, agora podemos aproveitar o novo repositório de cache ultrarrápido – The Octane Cache. Como a documentação nos diz, ele é capaz de realizar 2 milhões de operações por segundo – leituras e gravações, o que é incrível! A única desvantagem desse sistema de cache é que ele será liberado sempre que reiniciarmos ou pararmos o servidor Octane, pois persiste na memória compartilhada – RAM.
Você deve começar a usar o Octane agora?
Laravel Octane é uma oferta alucinante da equipe Laravel, que fornece um aumento de desempenho de várias maneiras. Mas com grandes poderes, vêm grandes responsabilidades. Como eu disse anteriormente, nós desenvolvedores PHP não estamos acostumados a pensar em statefulness e suas dores de cabeça – coleta de lixo, vazamentos de memória, etc.
Então, se você sabe que seu aplicativo simplesmente não precisa de tanto desempenho supersônico, pode ser uma opção melhor ficar com a abordagem tradicional. E se for necessário esse aumento de desempenho, não é tão difícil atualizar seu aplicativo Laravel tradicional com uma fera movida a Octane. Quanto aos aplicativos em que o desempenho é essencial, sugiro não hesitar e pular direto! Você não precisa começar a aprender Node por causa dos requisitos de negócios; você pode ficar com sua ferramenta favorita e carregá-la com Octane.
Obrigado pelo artigo tão bem escrito, estou pensando em utilizá-lo na empresa para melhorar o desempenho da aplicação e este texto foi bastante útil para eu compreender sobre tal tecnologia!
Muito interessante, estou estudando Octane agora e este artigo ajudou muito. Também para fins de informações existe outro framework que parte do mesmo princípio e promete até sem melhor que o laravel para paralelismo, é o Hyperf.