Stateless vs Stateful
Entenda a diferença entre serviços que lembram de você e serviços que tratam cada requisição como se fosse a primeira vez.
O caixa de supermercado
Um serviço stateless é como um caixa de supermercado que não lembra de nenhum cliente — cada atendimento começa do zero. Um serviço stateful é como o dono da padaria do bairro que te conhece pelo nome e lembra do seu pedido habitual.
Stateless: sem memória
O servidor não guarda nenhuma informação entre requisições. Toda informação necessária vem junto com a requisição (ex: token JWT). Isso facilita escalar horizontalmente — qualquer servidor pode atender qualquer cliente.
Stateful: com memória
O servidor mantém estado da sessão do usuário na memória. O cliente precisa sempre voltar ao mesmo servidor. É mais simples de programar, mas difícil de escalar e frágil a falhas.
JWT (stateless) vs Session (stateful)
Compare as duas abordagens de autenticação:
// Stateless com JWT
// O token carrega todas as informações necessárias
const token = jwt.sign(
{ userId: 42, role: 'admin' },
SECRET,
{ expiresIn: '1h' }
);
// Qualquer servidor valida o token sem consultar banco
// Stateful com Session
// O servidor guarda a sessão na memória
app.post('/login', (req, res) => {
req.session.userId = 42; // salvo no servidor
req.session.role = 'admin';
});Escalabilidade
Stateless escala facilmente: basta adicionar mais servidores atrás de um load balancer. Stateful exige sticky sessions ou compartilhamento de estado (Redis), o que adiciona complexidade.
Quando usar cada um?
APIs REST e microsserviços geralmente são stateless — como guichês de atendimento intercambiáveis. Conexões WebSocket e jogos online geralmente são stateful — como uma ligação telefônica onde o contexto da conversa importa.