OpenFaaS

Você conhece OpenFaaS? Se não conhece não se desespere, irei explicar tudo o que você precisa saber!

OpenFaaS é um framework para construir funções Serverless com Docker e Kubernetes. Para entender como ele funciona, vamos dar uma olhada em sua stack:

Da base ao topo:

  • Docker
    A base de tudo! Toda as stack é provisionada em containers.
  • Swarm / Kubernetes:
    Escalabilidade é fundamental em quase todo projeto hoje em dia, em Serverless não é diferente. Para isso é necessário utilizarmos um orquestrador.
  • Prometheus:
    We need data! Precisamos saber o que está acontecendo em nosso ambiente Serverless: se temos algum erro, a utilização de CPU, a quantidade de invocações,etc. Prometheus é uma ótima ferramenta para monitoramento.
  • API Gateway:
    Um microserviço RESTful para invocar, deletar, modificar e adicionar funções.
  • Function Watchdog:
    A chave de tudo! Um pequeno server em Go, que permite os requests HTTP feitos no seu container passarem para o processo interno via STDIN e devolve o STDOUT como resposta na requisição.
“Talk is cheap. Show me the code.” — Torvalds, Linus.

Nada como colocar a mão na massa! Por isso, preparei o seguinte repositório para demonstrações, basta seguir os passos: GitHub OpenFaas-Example.

Tente você mesmo

Para melhor visualização, inclui o Swarm Visualizer na stack. Após todos os serviços subirem, você poderá vê-los clicando na porta exposta 5000 :

Note os containers em execução. Para melhor observá-los separei em quatro categorias, identificadas pelos labels: faas, monitor, queue e functions.

Faas

Contém os containers da API Gateway e do Orquestrador (neste caso Swam). O container de gateway, além de responsável por prover o endpoint de chamada das suas funções, possui embutido uma UI chamada de Portal, que fica exposta na porta 8080 por padrão:

Neste Portal, você tem uma lista das funções “deployadas”. O Gateway em questão pode: invocá-las , ver o número de réplicas em execução e a quantidade de vezes que esta função foi invocada. Além de poder incluir novas funções já prontas ou incluí-las manualmente.

Monitor

Contém os containers de monitoramento Prometheus e seu Alertmanager com seus consoles expostos nas portas 9090 e 9093 respectivamente.

Queue

Contém os containers NATS Server e Queue Worker, que são responsáveis pelo enfileramento de funções assíncronas. Quando invocado uma função de modo assíncrono, você apenas coloca sua requisição em uma fila (NATS Server) e, assim que possivel, o seu consumidor (Queue Worker) irá pegar essa mensagem da fila e enviará para a função que você solicitou.

Functions

Contém todas as funções “deployadas”. Cada função é um serviço que fica rodando sempre com o mínimo de um container, afim de evitar o tempo de inicialização e término de um container.

As funções podem ser escaladas automaticamente com triggers como o número de requisições e outros definidos pelo Alertmanager. Esse autoscaling é automatico tanto para UP quanto DOWN, isso reduz a manutenção e evita custos desnecessários por erros de configuração.

Para ver o autoscaling em ação, pode executar o seguinte comando em um terminal de um dos nodes:

Em breve você vera o autoscaling em ação e seu Swarm visualizer ficará parecido com isso:

Faas-cli

Uma ótima ferramenta para ajudar você com criação de templates, builds, pushes para o registry, deploy, invoke, delete e mais. Vale a pena dar uma conferida!


E esse é o OpenFaaS! Espero ter conseguido explicar a stack e seu funcionamento com clareza.

Na hora de tentar, não esqueça de se divertir, ser criativo e bolar novas idéias!

Comente o que achou e compartilhe seus planos/projetos ou dúvidas sobre OpenFaaS abaixo!

In open source, we feel strongly that to really do something well, you have to get a lot of people involved. — Torvalds, Linus.

Proximos passos
Atualmente estou estudando o caso de colocar APIs inteiras como uma função. Existem complicações com modelo REST, porém pode ser viável para modelos como a “O API”, trarei mais informações na próxima publicação. Até lá!