Pular para o conteúdo

FaaS: o que é Function as a Service e quando usar

FaaS permite executar funções sob demanda sem administrar servidores diretamente. Entenda o modelo, os ganhos, os limites e como decidir se ele cabe no seu projeto.

Ilustração oficial sobre Function as a Service e computação serverless

Cloudflare Learning

O que significa Function as a Service

Function as a Service, ou FaaS, é um modelo de computação em que o desenvolvedor escreve pequenas unidades de código e o provedor executa cada unidade quando um evento acontece. O evento pode ser uma requisição HTTP, o envio de um arquivo, uma mensagem em uma fila, uma alteração em um banco de dados ou uma ação dentro de uma aplicação. A ideia central é separar a lógica em funções modulares, em vez de manter um processo inteiro rodando o tempo todo.

O termo serverless não significa que não existam servidores. Eles continuam necessários, mas ficam sob responsabilidade do provedor. A equipe do produto deixa de cuidar diretamente da alocação de máquinas, da capacidade ociosa e de parte da operação do sistema. Em troca, passa a trabalhar com um contrato de execução: informa o código, as permissões, as entradas e as dependências; a plataforma cuida de iniciar a função quando necessário.

Essa abordagem se aproxima da arquitetura de microsserviços porque favorece componentes pequenos e independentes. Ainda assim, FaaS não é sinônimo de microsserviço. Um microsserviço pode ser um processo persistente com sua própria API, enquanto uma função costuma ter escopo menor e ciclo de vida controlado pelo ambiente. A diferença é importante porque a decisão arquitetural deve considerar o comportamento real da aplicação, não apenas a popularidade do nome.

Ilustração oficial sobre Function as a Service e computação serverless

Como uma função é executada por eventos

Em um fluxo típico, um evento chega ao provedor e dispara uma função. A plataforma prepara o ambiente, entrega os dados de entrada e executa o código. Ao terminar, a função devolve uma resposta ou registra um resultado em outro serviço. Em execuções seguintes, o ambiente pode ser reaproveitado ou criado novamente. Por isso, o código deve tratar cada chamada como uma unidade independente e evitar depender de memória local persistente.

Essa característica muda a forma de pensar o estado da aplicação. Arquivos temporários e variáveis mantidas dentro da função não devem ser tratados como armazenamento permanente. Dados importantes precisam ficar em um banco, em um objeto de armazenamento ou em uma fila apropriada. Também é necessário projetar idempotência: se uma mensagem for entregue duas vezes, processá-la novamente não pode criar dois pedidos, dois pagamentos ou dois efeitos indesejados.

O modelo funciona bem para tarefas acionadas por eventos, como redimensionar uma imagem depois de um upload, validar um formulário, transformar uma mensagem ou expor um endpoint pequeno. Ele também pode compor automações de integração e rotinas de processamento. Antes de escolher FaaS, vale desenhar o caminho completo dos dados: origem do evento, função, serviços acessados, tempo de execução, resposta esperada e tratamento de falhas.

Latência também merece atenção. A primeira execução de um ambiente pode ser mais lenta que as seguintes, e a distância até a região escolhida influencia a experiência. Funções que respondem diretamente a uma interface sensível a tempo precisam de limites claros e testes de carga. O ganho de elasticidade não elimina a necessidade de medir tempo de resposta, taxa de erro, filas e consumo.

Vantagens e custos operacionais

A principal vantagem é reduzir a quantidade de infraestrutura que a equipe precisa administrar. O provedor pode distribuir as execuções, lidar com picos e aumentar ou diminuir a capacidade conforme os eventos recebidos. Para uma aplicação com tráfego irregular, isso evita manter servidores superdimensionados apenas para suportar uma janela de demanda. O time consegue concentrar mais energia na lógica do produto e menos em tarefas repetitivas de provisionamento.

Outro benefício é a modularidade. Uma função curta pode ser testada, implantada e observada com mais foco do que um sistema monolítico inteiro. Mudanças localizadas tendem a ser menores, e a separação por eventos pode tornar explícitas as responsabilidades de cada parte. Esse efeito só aparece quando o desenho é disciplinado; dividir um sistema em dezenas de funções sem fronteiras claras apenas espalha a complexidade.

O custo, por outro lado, não se resume ao preço de cada execução. Chamadas a bancos, filas, armazenamento, observabilidade, transferência de dados e ambientes de desenvolvimento também entram na conta. Uma função mal dimensionada ou disparada em excesso pode produzir uma fatura difícil de prever. O caminho seguro é acompanhar métricas desde o primeiro protótipo, definir limites e criar alertas antes de colocar o fluxo em produção.

Há ainda um custo de dependência. Cada provedor oferece formatos de eventos, permissões, ferramentas e limites próprios. Portar uma função pode parecer simples, mas o sistema completo talvez dependa de serviços específicos. Documentar entradas, saídas e contratos reduz o risco. Também ajuda manter testes locais e de integração que reproduzam os casos importantes, sem fingir que um ambiente local representa perfeitamente a plataforma real.

Imagem de apoio sobre arquitetura serverless e funções sob demanda

Limitações e critérios para decidir

FaaS não é a melhor resposta para todo tipo de trabalho. Processos longos, conexões persistentes, cargas previsíveis e aplicações que precisam de controle fino sobre o sistema operacional podem se encaixar melhor em contêineres ou servidores tradicionais. Também é preciso verificar limites de duração, memória, tamanho de pacote, concorrência e rede. Uma solução que ignora essas restrições pode funcionar no teste e falhar justamente quando o volume crescer.

O diagnóstico começa pela pergunta “o trabalho é naturalmente orientado a eventos?”. Se a resposta for sim, o modelo merece uma avaliação. Depois, compare o tempo de execução, a frequência, os dados acessados e a necessidade de estado. Funções pequenas, sem estado local e com entradas bem definidas tendem a ser candidatas melhores. Processos que exigem coordenação contínua ou transações longas pedem uma análise mais cuidadosa.

Segurança também faz parte da escolha. Cada função deve receber apenas as permissões necessárias, e os dados de entrada precisam ser validados. Segredos não devem ficar no código nem em registros de execução. Logs precisam ajudar a investigar falhas sem vazar informações pessoais. O fato de o provedor administrar servidores não transfere automaticamente toda a responsabilidade de segurança: a equipe continua responsável pelo código, pelas configurações e pelos acessos.

Em resumo, Function as a Service é uma ferramenta para executar lógica modular sob demanda, com a infraestrutura de execução administrada por um provedor. O modelo pode acelerar entregas, lidar com picos e reduzir trabalho operacional, mas cobra disciplina em estado, observabilidade, custos, testes e dependência de plataforma. A escolha fica mais segura quando parte do fluxo real da aplicação, dos limites mensuráveis e de uma comparação honesta com contêineres e servidores persistentes.

Fonte e próximos passos

Para aprofundar a definição, as vantagens, as limitações e a relação entre FaaS e computação serverless, consulte a fonte primária da Cloudflare: https://www.cloudflare.com/learning/serverless/glossary/function-as-a-service-faas/. Depois, escolha um fluxo pequeno, estabeleça métricas de latência e custo e faça um teste controlado antes de migrar uma parte crítica da aplicação.

Resumo da semana

Leve contexto para a caixa de entrada.

Uma edição semanal, sem barulho e sem promessas vazias.