Plataformas como X, Discord e Instagram expõem identificadores numéricos longos, aparentemente aleatórios — mas que, na prática, seguem uma lógica muito bem definida.
Neste artigo, vamos entender:
- Por que unicidade não é o único requisito de um ID
- As limitações de IDs sequenciais e UUIDs em sistemas distribuídos
- O que são Snowflake IDs e como eles funcionam
- Por que grandes APIs adotam esse modelo
- Quando essa estratégia faz sentido (e quando não faz)
Unicidade é só o requisito mínimo
Quando falamos em identificadores, quase todo mundo concorda em um ponto:
Um ID precisa ser único.
Mas em sistemas reais, distribuídos e em produção, isso está longe de ser suficiente.
Em APIs modernas, bons identificadores também precisam:
- Ser gerados sem coordenação central
- Funcionar bem com múltiplas instâncias
- Não virar gargalo de performance
- Permitir paralelismo
- Não vazar informações sensíveis do negócio
- Ajudar (e não atrapalhar) observabilidade e operação
Ou seja: unicidade é o requisito mínimo, não o objetivo final.
O problema dos sistemas distribuídos
Em arquiteturas distribuídas lidamos com:
- Auto scaling
- Múltiplos serviços
- Concorrência real
- Execução paralela
- Múltiplas regiões
- Infraestrutura dinâmica
Nesse cenário, deixar a geração de IDs:
- centralizada no banco
- dependente de sequência
- ou altamente acoplada a um único ponto
é pedir para criar gargalos.
IDs sequenciais funcionam muito bem… até deixarem de funcionar.
UUIDs resolvem tudo? Mais ou menos
UUIDs (ou GUIDs) são extremamente populares — e com bons motivos.
Eles oferecem:
- Unicidade global
- Geração totalmente descentralizada
- Suporte nativo em praticamente todas as linguagens
- Facilidade para geração no frontend, backend ou offline
Isso os torna uma excelente escolha para:
- Integrações externas
- Sistemas sem controle rígido de infraestrutura
- Sincronizações offline
- Casos onde flexibilidade é mais importante que controle
Mas essa flexibilidade vem com um custo.
UUIDs:
- Não carregam significado operacional
- São ruins para ordenação temporal (especialmente V4)
- Geram índices grandes (128 bits)
- Podem degradar performance em tabelas massivas
- Não ajudam na observabilidade
Em muitos casos, unicidade global não é tudo o que o negócio precisa.
Quando você quer mais controle que o UUID oferece
Agora imagine que você queira:
- Saber quando um registro foi criado apenas olhando o ID
- Garantir ordenação temporal forte
- Evitar gargalo no banco
- Melhorar eficiência de índices
- Facilitar particionamento
- Ter previsibilidade operacional
É nesse ponto que entra o Snowflake ID.
O que é um Snowflake ID?
Snowflake IDs são identificadores numéricos de 64 bits, criados originalmente pelo Twitter por volta de 2010 para identificar tweets em um sistema altamente distribuído.
A ideia central não é apenas gerar um ID único, mas controlar como ele é gerado.
A estrutura clássica do Snowflake é:
- 1 bit: sempre zero (sinal)
- 41 bits: timestamp (baseado em uma época customizada)
- 10 bits: identificador do nó / instância
- 12 bits: sequência local naquele nó
Isso permite:
- Até 4.096 IDs por milissegundo por nó
- Milhões de IDs por segundo em escala horizontal
- Geração totalmente local, sem coordenação central
IDs que já nascem distribuídos
Uma característica fundamental do Snowflake é que:
👉 cada nó é responsável por gerar seus próprios IDs.
Isso elimina:
- Locks globais
- Dependência do banco
- Gargalos de sequência
- Contenção em ambientes paralelos
O banco deixa de ser o “gerador de IDs” e passa a ser apenas um consumidor deles.
IDs que contam uma história
Um efeito colateral (positivo) dessa estrutura é que os Snowflake IDs são temporalmente ordenáveis.
Isso significa que:
- Você pode ordenar registros pelo ID
- Extrair data e hora de criação
- Identificar picos de tráfego
- Analisar padrões operacionais
Tudo isso sem metadados adicionais.
O próprio ID já carrega essas informações.
Por que grandes APIs usam Snowflakes?
Agora fica mais fácil entender por que grandes plataformas adotam esse modelo.
Entre os principais benefícios:
- Menor acoplamento ao banco de dados
- Melhor eficiência de índices (64 bits)
- Ordenação temporal natural
- Excelente suporte a particionamento
- Melhor observabilidade
- Geração previsível e controlada
No Instagram, por exemplo, os bits que representariam o nó físico são usados para identificar shards lógicos.
No Discord, esses bits são divididos entre worker e processo.
Ou seja: o conceito é o mesmo, mas a implementação se adapta à infraestrutura.
Os custos e riscos dessa estratégia
Snowflake IDs não são uma bala de prata.
Eles exigem:
- Configuração correta de infraestrutura
- Garantia absoluta de unicidade do ID do nó
- Disciplina arquitetural
- Sincronização de relógio (clock drift)
- Estratégia clara de deploy e autoscaling
Além disso:
- Snowflake não é um padrão formal
- Não existe uma RFC
- Cada implementação é uma variação
Isso traz flexibilidade, mas também responsabilidade.
Outro ponto importante:
👉 Snowflakes vazam informação temporal.
Se isso for um problema para o seu negócio, essa estratégia pode não ser adequada.
Snowflake vs UUID: um resumo honesto
UUIDs
- Simples
- Amplamente suportados
- Flexíveis
- Ótimos para começar
- Pouco controle
- Pior performance em escala extrema
Snowflake IDs
- Controle explícito
- Excelente para sistemas distribuídos
- Melhores índices
- Ordenação temporal
- Mais complexidade
- Forte dependência da infraestrutura
Não existe “melhor ID universal”.
Existe o ID certo para o seu contexto.
Identificadores são decisão arquitetural
Talvez o ponto mais importante de todo esse artigo seja este:
A escolha do identificador não é detalhe de implementação.
Ela impacta:
- Escalabilidade
- Observabilidade
- Performance
- Segurança
- Evolução do sistema
Escolher entre ID sequencial, UUID ou Snowflake é escolher como seu sistema cresce, opera e se mantém.
E isso é, por definição, uma decisão arquitetural.
Conclusão
Grandes APIs não escolhem Snowflake IDs por moda ou acaso.
Elas escolhem porque:
- Precisam de controle
- Precisam de escala
- Precisam de previsibilidade
- Precisam operar sistemas distribuídos reais
UUIDs continuam sendo excelentes ferramentas.
Snowflakes são ferramentas mais especializadas.
Saber quando usar cada uma é o que separa uma decisão técnica de uma decisão arquitetural.
Se quiser, no próximo artigo a gente pode explorar:
- UUID V7 vs Snowflake
- NanoID, KSUID, ULID
- IDs naturais
- Estratégias híbridas
- Impacto direto em bancos relacionais
Se esse tema te fez repensar a forma como você cria IDs nas suas APIs, comenta lá no blog ou compartilha com o time.
Essa discussão vale muito a pena continuar.

