Skip to content
Latchkey

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.

Guias relacionados