O Que É Statelessness? Serviços Que Não Guardam Memória
Um serviço stateless não guarda estado por cliente entre requisições; tudo de que precisa vem com a requisição ou de armazenamento externo.
Statelessness é a propriedade que torna uma instância de serviço descartável. Se um serviço não lembra nada entre requisições, qualquer instância pode servir qualquer requisição, e você pode adicionar, remover ou reiniciar instâncias livremente. É o facilitador silencioso por trás da escala horizontal, dos deploys rolling e dos ambientes efêmeros de que o CI depende.
O que stateless significa
Cada requisição carrega (ou pode buscar) tudo o que é necessário para tratá-la. O serviço não depende de dados guardados na memória local de uma requisição anterior. Dados de sessão, se houver, vivem em um store compartilhado, não na instância.
Por que importa
- Qualquer instância pode servir qualquer requisição, permitindo load balancing.
- Instâncias podem ser adicionadas ou mortas sem perder dados.
- Restarts e crashes não perdem nada importante.
- É a pré-condição para escala horizontal limpa.
Para onde o estado vai
Statelessness não deleta o estado; ela o realoca. Sessões vão para um cache como o Redis, dados para um banco de dados, arquivos para object storage. O serviço se torna um transformador puro, e as partes stateful ficam concentradas onde podem ser gerenciadas deliberadamente.
Um presente para o CI/CD
Serviços stateless são trivialmente fáceis de fazer deploy: suba a nova versão, desvie o tráfego, mate a antiga, sem migração de estado em memória, sem drenagem de sessões sticky. É isso que torna deploys rolling e blue-green seguros e rotineiros.
Mais fáceis de testar, também
Um handler stateless é uma função de sua entrada, o que o torna direto de testar unitariamente de forma determinística. Não há estado oculto em memória para preparar ou resetar entre testes, então o isolamento de testes vem de forma mais natural.
Stateless por design nos runners
Os próprios runners de CI são melhor mantidos stateless: cada job recebe um ambiente limpo e não deixa nada para trás. Os runners do Latchkey são efêmeros e stateless por design, para que um job não possa contaminar o próximo.
Principais conclusões
- Um serviço stateless não guarda memória por cliente entre requisições.
- Ele torna instâncias intercambiáveis, permitindo escala e deploys sem complicações.
- O estado é realocado para caches, bancos de dados e object storage, não eliminado.