Serverless: escalando serviços com baixo custo
Fala galera!
Abrindo nossa temporada de posts por aqui, decidimos falar sobre serverless, Mas além de explicar como, vamos abordar também pros e contras. O foco principal como o próprio título diz, é explicar como escalar serviços com o baixo custo que a arquitetura serverless proporciona.
Mas afinal, o que é serverless?
Uma maneira de descrever arquitetura serverless, seria usando a nomenclatura FaaS (Function As A Service) e BaaS (Backend As A Service), mas vamos focar somente no FaaS nesse post.
A arquitetura roda em containers efêmeros, que duram apenas uma execução, isso quer dizer, que a cada chamada na função, um container é executado para realizar a tarefa e logo depois ele morre.
As três maiores plataformas de serviços de nuvem têm seus produtos de FaaS, porém nesse post, vamos usar a AWS como provedor, você pode acompanhar por aqui os principais players:
AWS Lambda
Google Cloud Function
Azure Functions
Todas essas plataformas aceitam código, tanto em python como NodeJS e até algumas coisas que rodam na JVM como Scala, Java e Clojure, mas para o bem do exemplo iremos usar NodeJS
Exemplificando
Em uma arquitetura cliente servidor padrão, com um backend monolítico, qualquer desenho seria algo parecido com isso:
Já em uma arquitetura serverless, a arquitetura começa a ficar mais interessante, vamos imaginar um checkout simples de um e-commerce.
Um ponto importante sobre o AWS lambda, é que ele funciona com eventos, por isso temos um player importante na arquitetura acima, o API Gateway
O API gateway, nada mais é do que um servidor HTTP, Ele vai ser o responsável por gerenciar as requisições e chamar as funções equivalentes a rota da requisição realizada, além de gerenciar a autenticação dos usuários, e sim, ele é um BaaS.
Mão na massa
Pensando nessa arquitetura, podemos colocar agora a mão na massa e criar nossas duas functions no AWS Lambda, pra isso basta pesquisar AWS Lambda no console AWS(você pode criar uma conta de nível gratuito por 1 ano!)
Ao clicar em criar função, você vai perceber três opções:
Clicando em usar um esquema, você deve digitar “http” e selecionar o esquema “microservice-http-endpoint”, como mostrado abaixo:
Depois desse passo, o console da AWS vai te entregar uma série de opções, inclusive configurações do API Gateway.
Nesse ponto ele vai nos entregar algumas configurações relacionadas ao DynamoDB, vamos ignorar por enquanto, e selecionar API HTTP e segurança colocamos “Abrir”.
Após criar a função, o código se parece com isso:
Pra ficar tudo mais fácil, vamos ignorar a parte do DynamoDB, e fazer nosso código se parecer com isso:
Clicando em deploy, nossa function já está preparada para receber requisições HTTP, quando clicamos em API Gateway e detalhes, podemos ver o endpoint para consumirmos.
Esse seria o nosso Hello World utilizando serverless no AWS Lambda, logicamente existem milhares de possibilidades dentro dessa arquitetura no console da AWS.
Pros e Contras
Pros
A redução do custo operacional se sobressai quando falamos dessa arquitetura, pois o custo de implementar um API Gateway e todos esses serviços aumenta muito quando falamos de fazer isso tudo in-house.
Mas e o preço disso? O nível de uso gratuito do AWS Lambda inclui 1 milhão de solicitações gratuitas por mês e 400.000 GB/segundos de tempo de computação por mês, o que geralmente é mais que necessário pra maioria das aplicações.
Contras
Obviamente, como em qualquer arquitetura de software, não existe bala de prata. Um dos maiores contras de utilizar serverless é o vendor lock-in, uma vez com seu sistema rodando dentro da plataforma, você não pode migrar isso com tanta facilidade.
Espero que tenham gostado do post, e vejo vocês na próxima! :)
Referências: