O que você sabe sobre Serverless? Vem comigo que eu te conto tudo!
Por Thauany Moedano – Cloud Architect e Back-End Software Developer da Zappts
Neste artigo, eu vou te contar um pouco do surgimento do Serverless e como aplicá-lo da melhor forma.
Antigamente, o modelo mais comum de arquitetura eram os monolitos. Em um monolito, todos os componentes da sua aplicação estão unidos em um único módulo.
Embora o deploy de uma aplicação monolítica seja muito simples e seja fácil evoluir os componentes como um todo, o monolito apresenta um único ponto de falha. Isso quer dizer que se qualquer falha ocorrer em sua aplicação, todo o sistema falha.
E assim surgiram os microsserviços!
Os microsserviços surgiram com o objetivo de quebrar a aplicação em várias partes pequenas e independentes.
Então, se um componente falhar, tudo bem: nossa aplicação não cairá por completo, mas o custo de uma aplicação distribuída e resiliente se torna um problema conforme a aplicação escala.
Quantas máquinas e quantos contêineres vou precisar gerenciar?
E a nuvem veio
Com o advento da nuvem, hoje é possível fazer deploy de aplicações inteiras sem ser o dono de um único data center.
Aplicações distribuídas se tornaram muito mais simples de se manter. Os principais benefícios de usar um provedor em nuvem são:
- Pagar somente o que usar: quando seu sistema escala, é possível provisionar mais máquinas para atender a demanda. Quando as máquinas não são mais necessárias, basta deletá-las. Você só é cobrado pelo tempo de uso.
- Não há necessidade de estimar a capacidade final da aplicação: com a nuvem, é possível escalar o ambiente à medida que a demanda cresce. Em outras palavras, não é necessário se preocupar se o setup atual atende à demanda, pois sempre é possível provisionar novos recursos.
- Simplicidade na criação de recursos: e a melhor parte desses benefícios é que tudo pode ser feito com poucos cliques!
É por isso que muitos estão migrando suas aplicações para a nuvem.
Isso impulsionou a popularidade da Arquitetura de Microsserviços, mas a disseminação dessa arquitetura levou as equipes de desenvolvimento a um novo desafio: orquestrar e gerenciar uma infraestrutura distribuída, dividida em contêineres, pode ser tão complexo quanto se queira.
Esses novos desafios podem acarretar em deploys longos e aumentar o custo operacional.
Mas, e se não precisássemos nos preocupar com manutenção e gerenciamento de servidores? E se o desenvolvimento fosse completamente focado na criação da aplicação ao invés da infraestrutura?
E assim nasceu o Serverless!
Serverless, que na tradução livre significa “ Sem Servidor “, é um modelo em nuvem onde a equipe de desenvolvimento não gerencia os servidores.
O objetivo principal do conceito de Serverless é que sua equipe foque mais no desenvolvimento da aplicação do que na infraestrutura.
Mas, calma: como uma aplicação pode existir sem servidor?
O servidor está lá, mas é totalmente gerenciado pelo provedor de nuvem.
Ao invés de pagar pelo provisionamento de recursos, o Serverless cobra somente o consumo computacional da sua aplicação, conforme ela é executada.
E como funciona o desenvolvimento pensando Serverless?
A aplicação é desenvolvida em um modelo de execução conhecido como Function As a Service (FaaS).
Nesse modelo, pequenas funções são escritas e associadas a eventos. Quando um evento ocorre, a função é executada.
Esses eventos podem, por exemplo, ser uma chamada de API, uma postagem em uma fila, um upload de uma imagem ou um registro de usuário e o custo é somente no consumo computacional da função quando é executada.
Já entendemos que Serverless significa não se preocupar com infraestrutura. Mas quais outras vantagens esse modelo em nuvem pode nos trazer?
Vantagens do Serverless
E para entender mais sobre esse modelo, nada melhor que conhecer suas principais vantagens de usar a arquitetura Serverless, que são:
- Lançamento de uma aplicação com pouco custo e em tempo rápido: o timing de um negócio é extremamente importante para o sucesso do mesmo. Com Serverless, é possível lançar rapidamente no mercado aplicações funcionais com pouco gasto de recursos.
- Menor complexidade: as aplicações costumam ser menos complexas, pois é o provedor cloud que gerencia a infraestrutura.
- Alta disponibilidade: como todo o servidor é gerenciado pelo provedor de nuvem, a aplicação é altamente disponível sem um custo extra por isso.
- Fácil integração com CI/CD: a computação “sem servidor” torna muito mais simples o deploy e a atualização da sua aplicação
Então, Serverless é nossa bala de prata?
Embora Serverless traga muitos benefícios, nem todo modelo de negócio se adequa à sua utilização.
Existem cenários que precisamos ter, em algum nível, controle sobre a infraestrutura. Além disso, existem outros fatores que podem comprometer a opção por Serverless. São eles:
- As funções tem um tempo pequeno para timeout (em torno de 15 minutos). Logo, aplicações com workloads grandes e contínuos não são indicadas para serem escritas em Serverless.
- As soluções Serverless ainda são bem distintas entre os provedores de nuvem. Isso significa que se sua aplicação precisa ser mais independente de um provedor o possível, Serverless não é recomendado.
- Troubleshooting pode ser complicado uma vez que não é possível reproduzir fielmente um ambiente Serverless localmente.
Qual o preço de Serverless?
Muito se fala no custo operacional de uma aplicação Serverless, e na maioria dos casos, as aplicações sem servidor realmente apresentam custos menores do que aplicações tradicionais.
Isso acontece porque em Serverless você paga pelo consumo do recurso em si e não pelo provisionamento da infraestrutura.
Entretanto, é importante sempre calcularmos o preço do consumo do recurso.
Aplicações com uma demanda muito grande de utilização e com uma intensidade grande de requests por segundo podem se tornar mais caras utilizando Serverless do que provisionando máquinas virtuais para hospedar a aplicação. Veja alguns exemplos:
Serverless – Cenário 1: Sistema escolar
Considere um sistema escolar em que os alunos podem se matricular nas matérias e no fim do período consultar suas notas.
Existem dois períodos de grande movimentação no site: o começo das aulas e o fim das aulas.
Vamos imaginar a seguinte situação: o dono desse sistema escolheu como provedor de nuvem a AWS: ele optou por provisionar instâncias virtuais (também conhecidas como EC2). Por sua vez, o arquiteto escolheu para a solução uma máquina do tipo m4.large, que é a indicada para a maioria das aplicações em produção (essa máquina gera por mês um custo aproximado de $ 72 dólares).
Durante o período de matrícula (2 meses do ano) e o período de notas finais (2 meses do ano), o tráfego aumenta e é necessário provisionar uma máquina extra.
Em um ano, o custo total dessa aplicação seria de $ 1152 dólares, mas o arquiteto analisou que esse sistema ficará no ar por bastante tempo e fez a reserva de uma instância para um ano.
Com apenas uma máquina rodando sob demanda por 4 meses, o custo diminuiu para $ 789 dólares. Considerável, mas ainda parece alto.
Se movermos a solução para uma aplicação Serverless, utilizando os serviços AWS Lambda e API Gateway, qual seria nossa economia?
Suponha que durante no período em que a demanda é baixa aconteça por volta de 5 mil requisições por dia. Em oito meses de baixa demanda, seria gerada em torno de 1.200.000 requisições.
Agora, considere que nos meses de matrícula e notas finais, o número de requisições salta para 100 mil por dia. Em quatro meses, teria acontecido em torno de 12 a 13 milhões de requisições. A soma total nos traz em torno de 14 milhões de requisições no ano. Isso não custaria mais do que $ 55 dólares.
Impressionante, não? Mas calma, vamos ver um cenário em que Serverless poderia sair muito caro.
Serverless – Cenário 2: E-commerce
Para simplificar, vamos supor que um e-commerce esteja calculando o custo de uma operação especial de natal.
Para atender a demanda, o arquiteto sugeriu provisionar cinco máquinas m4.large. Isso custaria para esse mês especial um total de $ 360 dólares.
Qual o custo usando as mesmas tecnologias Serverless do cenário anterior?
Bem, com a correria de fim de ano, o site estará bem movimentado, gerando pelo menos 50 requisições por segundo. Apenas o custo do serviço de API Gateway geraria no mínimo um custo de $ 451 dólares.
E vale lembrar que também estamos desconsiderando o custo do banco de dados, que em um banco de dados Serverless pode ter um custo por conexão mais elevado.
Isso nos mostra que Serverless não é indicado em cenários de grande carga de requisições, já que o custo de provisionar uma máquina será menor que o custo do consumo dos recursos.
Sobre custos da nuvem, aproveito para falar em FinOps, um modelo operacional que trabalha o gerenciamento eficiente de finanças, tornando mais assertivo o cálculo de gastos futuros em plataformas cloud como a AWS, Azure e Google Cloud. Baixe agora o ebook e saiba mais!
Como aplicar Serverless da melhor forma?
O ideal em uma arquitetura em nuvem é sempre aproveitar o melhor que cada modelo de negócio pode nos oferecer.
Uma aplicação não precisa ser 100% Serverless se esse modelo não atender a todos os requisitos do seu produto.
Isso significa que Serverless pode ser um recurso estrategicamente inteligente quando utilizado em pontos chave da sua aplicação.
Dessa forma, os melhores cenários para usar Serverless são:
- Eventos stateless (para pequenas tarefas na sua aplicação) e assíncronos (cujo padrão de execução não pode ser previsto);
- Pequenos processamentos/transformação de dados, desde que sejam concluídos em um curto espaço de tempo;
- Aplicações Web simples, como portais e gerenciamento de conteúdo;
- Backend de aplicações mobile cujo acesso é esporádico;
- Gerenciamento de notificações , sistema de mensagens e chatbots.
E agora, pronto para usar Serverless?
Serverless deve ser visto como uma nova opção no catálogo de soluções ao desenvolver uma arquitetura em nuvem.
Sempre em algum grau, é possível implementar conceitos de Serverless em sua aplicação, desde a criação de pequenos eventos para alterar o tamanho de uma imagem, até a criação de uma aplicação inteiramente sem servidor.
Aqui, contei um pouco da história do Serverless e dei alguns exemplos de como esse modelo da Cloud Computing pode ser útil para tocar processos mais simples e ágeis.
Continue acompanhando os conteúdos do nosso blog. Temos artigos sobre UX, Scrum e muitos outros assuntos da área de tecnologia.
Espero que tenha gostado desta publicação e até a próxima! 🙂