Serverless: escalando serviços com baixo custo

Bruno Benicio
Bowe
Published in
4 min readNov 17, 2020

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.

Requisição GET usando chrome

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! :)

--

--