Como implementar Serverless com OpenFaaS e PHP


As arquiteturas sem servidor (serverless) são projetos de aplicações que incorporam serviços “Backend as a Service” (BaaS) de terceiros e/ou que incluem execução de código personalizado em contêineres efêmeros gerenciados em uma plataforma “Functions as a Service” (FaaS).

Ao usar essas ideias e outras relacionadas, como aplicações single-page, estas arquiteturas removem grande parte da necessidade de um componente tradicional de servidor. As arquiteturas serverless podem se beneficiar de um custo operacional, complexidade e lead time de engenharia significativamente reduzidos, a um custo de maior dependência de fornecedores e serviços de suporte.

Como implementar funções PHP Serverless com OpenFaaS

Serverless computing, ou simplesmente serverless, é um tema quente no mundo da arquitetura de software. Os fornecedores de nuvem “Big Three” – Amazon, Google e Microsoft – investem pesado em Serverless, e vimos muitos livros, projetos de código aberto, conferências e fornecedores de software dedicados ao assunto.

Neste artigo, vamos ver como podemos implementar serverless utilizando uma solução open source, o OpenFaaS.

O que é o OpenFaas?

O OpenFaaS é uma estrutura para criar funções serverless em contêineres (com o Docker e o Kubernetes).

Com a ajuda de FaaS abertas, é fácil transformar qualquer coisa em uma função sem servidor que seja executada no Linux ou no Windows, por meio do Docker ou do Kubernetes. Ele fornece uma funcionalidade integrada, como infraestrutura de auto-recuperação, dimensionamento automático e a capacidade de controlar todos os aspectos do cluster.

Então, basicamente, o OpenFaaS é um conceito de decompor nossas aplicações em uma pequena unidade de trabalho. Um dos principais benefícios é o fato de não precisarmos gerenciar a infraestrutura de aplicações, possibilitando aos desenvolvedores se concentrarem em fornecer valor de negócios. Vale reforçar que o serverless é perfeito para dispositivos IoT, arquitetura de microsserviços ou qualquer outro tipo de aplicação que precise ser eficiente.

Além disso, o OpenFaaS permite criar e distribuir funções “serverless” em um ambiente de computação em nuvem.

A “function” pode ser uma lógica simples que você programa ou a execução de um binário para realizar uma ação.

Abro aqui um parêntese para comentar que o termo “serverless” é um pouco inadequado, pois você ainda precisa de um servidor ou de muitos servidores, mas ao implantar sua função na nuvem, não precisa se preocupar em escalar ou gerenciar recursos de servidor físico por conta própria.

Voltando ao OpenFaas, ele tem em destaque algumas funcionalidades como:

  • Facilidade de uso através do portal de interface do usuário e instalação com um clique;
  • Escrever funções em qualquer linguagem para Linux ou Windows e empacotar no formato de imagem Docker / OCI;
  • Portátil – executado em hardware existente ou nuvem pública/privada – Kubernetes e Docker Swarm nativos;
  • CLI disponível com formato YAML para modelar e definir funções;
  • Escala automática à medida que a demanda aumenta.

Visão geral do OpenFaaS

 

Function Watchdog

Você pode transformar qualquer imagem do Docker em uma função sem servidor, adicionando o Function Watchdog (um minúsculo servidor HTTP Golang).
O Watchdog é o ponto de entrada que permite que as solicitações HTTP sejam encaminhadas para o processo de destino via STDIN. A resposta é enviada de volta ao requisitor escrevendo para STDOUT a partir do seu aplicativo.

API Gateway / UI Portal

O API Gateway fornece uma rota externa para suas funções e coleta métricas do Native Cloud por meio do Prometheus.
Seu API gateway escalará as funções de acordo com a demanda, alterando a contagem de réplicas de serviço no Docker Swarm ou na API do Kubernetes.
Uma interface do usuário é preparada para permitir que você invoque funções em seu navegador e crie novas, conforme necessário.

Prometheus / Grafana

O prometheus é utilizado para monitorar os serviços, mostrando o dimensionamento automático ao vivo em ação. Exemplo de um painel Grafana vinculado ao OpenFaaS:

 

CLI

Qualquer container ou processo em um container Docker pode ser uma função sem servidor no FaaS. Usando a FaaS CLI, você pode implantar suas funções ou criar rapidamente novas funções a partir de modelos como o Node.js, Python ou PHP.

Configurando o OpenFaaS

Supondo que você já tenha o Docker instalado, a primeira coisa que você precisa fazer é inicializar o Docker Swarm e implantar a stack do OpenFaaS.

Mude para uma pasta de trabalho adequada e instale a stack do OpenFaaS clonando o repositório do github e executando o script de implementação.

Neste momento é gerado um username e password para acesso a UI e CLI do OpenFaaS, guarde estes dados.

Teste se a stack está funcionando invocando a função de exemplo echoit que faz echo de todos os dados de entrada enviados.

Agora que o OpenFaaS está funcionando, você precisa instalar a estrutura cli do OpenFaaS (faas-cli) que permite construir, implementar e invocar suas próprias funções facilmente a partir da linha de comando.

Em seguida, instale o modelo PHP do OpenFaaS:

Agora vamos criar uma nova função e dizer qual linguagem usar.

Construindo e implementando uma função PHP no OpenFaaS

Uma vez instalado o template, podemos testá-lo criando nossa primeira função PHP.

A sintaxe da linha de comando do OpenFaaS para criar uma nova função é a faas-cli new functionname –lang languagename.

O template PHP usa o nome da linguagem php para funções PHP7, e php5 para funções PHP5. Vamos criar uma função PHP7 chamada func-ping-php usando o código do template.

Você observará um novo arquivo func-ping-php.yml e a pasta da função será criada.
Dentro de ./func-ping-php há um diretório src que contém uma classe Handler.php. Abra isso e você verá:

Então, por padrão, ela apenas retorna os dados que você envia para ele.
Agora temos a configuração do projeto, podemos construí-lo!

Construindo nossa função

Para construir uma função, usaremos novamente o faas-cli:

Isso criará o container docker que executará nossa função.
Uma vez que é construído, podemos implantá-lo!

Implantando nossa função

Depois de executar esta função, você deverá ver:

Isso nos diz que está tudo bem, assim como a URL com a qual podemos invocar a função.

Executando nossa função

Agora, podemos acessar nossa função enviando uma solicitação POST para o URL especificada:

No entanto, não veremos nada, pois a função apenas retorna o que você envia para ela, e nós não enviamos nada para ela!

Agora, se enviarmos dados para ele, devemos ter os dados retornados. Então executamos:

Nos dará uma saída:
olá blog

Agora, vamos atualizar nossa função para responder com o timestamp atual, já que é uma função “ping”.

Atualizando nossa função

Vamos atualizar nossa função para retornar algum json, então, de volta em ./func-ping-php/src/Handler.php, vamos alterá-lo para:

Podemos verificar executando:

O que nos mostrará que a resposta também retorna o application/json:

Agora então vamos reconstruir nossa função e reimplanta-lá de acordo com as etapas acima:

Construir

Implantar

Agora, se executarmos nossa função, veremos que recuperamos o JSON especificado:

Conclusão

Neste artigo/tutorial vimos que é simples criarmos funções serverless utilizando o projeto open source OpenFaaS, uma alternativa aos principais players do mercado que fornecem este serviço.

Para isso nós usamos basicamente a ferramenta CLI do OpenFaaS (faas-cli), mas você também pode utilizar a interface do usuário, que facilita e permite que invoque funções em seu navegador e crie novas, conforme necessário.

E você, já conhecia o projeto OpenFaaS e qual a sua opinião sobre Serverless, já está utilizando?

Quer saber mais sobre o assunto? Não perca o Conexão KingHost nos dias 17 e 18 de outubro, vai rolar uma palestra toda dedicada à serverless e faas. As inscrições já estão abertas, basta clicar no banner abaixo!

conexão kinghost

Resumo
Como implementar Serverless com OpenFaaS e PHP
Nome do Artigo
Como implementar Serverless com OpenFaaS e PHP
Descrição
Neste artigo, vamos ver como podemos implementar serverless utilizando uma solução open source, o OpenFaaS.
Autor
Nome
KingHost
Logo
Fernando Silva

Fernando Silva

Analista de Desenvolvimento em KingHost
Analista de Desenvolvimento na KingHost, graduado em Análise e Desenvolvimento de Sistemas (ADS) pela Faculdade Senac Porto Alegre, onde ganhou o Prêmio Keller de melhor trajetória acadêmica. Atualmente faz pós-graduação em Segurança Cibernética pela UFRGS, além disso, é um dos coordenadores da comunidade PHP-RS, é entusiasta Open Source e Software Livre.
Fernando Silva

Comentários

comentário(s)

Categories