FaaS vs Container

Qual modelo usar para suportar os códigos?

Matheus Dias
Aug 4 · 5 min read
Image for post
Image for post

Por diversas vezes, em diversas companhias e para diversos cenários, encontramos o dilema entre utilizar um modelo FaaS ou um modelo baseado em Container para suportar os códigos. Hoje, vamos falar um pouco sobre os conceitos que vão auxiliar na escolha do melhor caminho para seguir.

O que é FaaS (Functions as a Service)?

E o que é Serverless?

No caso da AWS, o serviço que provê esse tipo de solução é chamado de "Lambda" e é cobrado basicamente por quantidade de execuções, tempo de execução e em alguns casos pela quantidade de memória dedicada.

Image for post
Image for post

O que é Container?

Quando escolher algum dos dois?

Stateless
Como o próprio nome já diz, Stateless significa "Sem estado", ou seja, é uma estratégia de design de código que faz com que todas as chamadas desse código sejam tratadas como se fossem a primeira e, assim, não existe nenhum armazenamento de valores em memória que possa ser reutilizado por chamadas posteriores.

Stateful
É o contrario do conceito de Stateless, ou seja, é uma estratégia de design de código que permite armazenar valores em memória que possam ser resgatados e reutilizados em próxima chamadas.

Boa! Agora que entendemos de forma resumida os dois conceitos podemos notar que o modelo de código em FaaS atende somente à estratégia Stateless, pelo simples fato de que cada chamada é tratada por uma nova "instância" daquele código, ou seja, é tratada como se fosse a primeira chamada. E claramente podemos utilizar as duas estratégias no caso do código em Container, porque ele compartilha da mesma instância para receber requisições e possui uma infraestrutura com memória compartilhada entre essas requisições (Stateful), e também porque um código não necessariamente precisa trabalhar com essa memória (Stateless).

Ok! Mas se o Container resolve as duas estratégias, então por que utilizar FaaS? Como já foi dito, no modelo FaaS não existe infraestrutura para gerenciar, então é uma estrutura muito mais fácil de manter e provisionar.

Não perca de vista o conceito de FaaS

E no caso da performance?

tempoTotal=tempoDeSubida+tempoDeProcessamento

  • Para o serviço “AWS Lambda” existe uma forma de resolver esse problema ativando o modo de simultaneidade, que vai deixar o seu código pré-pronto para executar, mas essa é uma feature que custa um valor à parte.

No modelo de Container o código já está em execução e preparado para receber as requisições, sem ter a necessidade de subir uma nova instância dele para processar cada uma. Porém, pelo fato de compartilhar da mesma instância para as requisições, os recursos de hardware desse container são compartilhados também, ou seja, quanto mais requisições, mais threads serão abertas e consequentemente haverá um maior consumo de CPU e memória para processar todas em paralelo, mas é possível escalar containers de forma horizontal para distribuir as requisições.

E para processos Batch?

Para o modelo de código em FaaS podem haver alguns impedimentos… Em alguns serviços de nuvem, como o AWS Lambda, existe um limite de tempo de execução e de recursos de hardware, ou seja, se o código faz um processamento pesado em cima de GB's de dados, então possivelmente não será possível finalizar a execução até que o tempo limite de execução acabe,e assim o seu processo vai ficar incompleto.

Também é possível usar ambos os modelos, juntos, para resolver um processo batch de forma mais performática e segura. Por exemplo, usando o container para buscar os dados e colocá-los em um serviço de fila (por exemplo o AWS SQS) e um processo FaaS ser acionado por esse evento na fila para tratar esses dados de forma paralelizada.

Resumindo…

Para usar o código em um modelo FaaS é recomendado que a aplicação respeite algumas "regras", sendo elas:

  • Tenha um processamento "curto", ou seja, requisições leves com processamento rápido.
  • Não dependa de recursos de "terceiros" (fora de seu domínio) em momento de processamento (ex: API's).
  • Design Stateless.

Enquanto que para usar o código no modelo de Container:

  • Recebimento de centenas de requisições por segundo com um processamento mais "pesado" em cada uma, talvez maior do que 2 ou 3 segundos.
  • Funcionalidades com persistência em recursos de servidor (ex: Disco rígido, memória e etc).
  • Processamentos com muito uso de recursos de hardware em uma grande quantidade de dados.

E é isso! Se ficou alguma dúvida ou tem algo a dizer, é só deixar um comentário. E se você quiser trabalhar com um time que está sempre compartilhando conhecimento, clique aqui, saiba mais sobre a Concrete e Vamos Aprender Juntos! Até a próxima.

Concrete

Nós desenvolvemos produtos digitais com inovação, agilidade…

Matheus Dias

Written by

LinkedIn: https://www.linkedin.com/in/matheus-duarte-dias-a3b812113/ Github: https://github.com/matheusdias0211

Concrete

Concrete

Nós desenvolvemos produtos digitais com inovação, agilidade e excelentes práticas, para que o mercado brasileiro e latino-americano acompanhe a velocidade do mercado digital mundial.

Matheus Dias

Written by

LinkedIn: https://www.linkedin.com/in/matheus-duarte-dias-a3b812113/ Github: https://github.com/matheusdias0211

Concrete

Concrete

Nós desenvolvemos produtos digitais com inovação, agilidade e excelentes práticas, para que o mercado brasileiro e latino-americano acompanhe a velocidade do mercado digital mundial.

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store