Pular para o conteúdo

Gerador de ID Snowflake - Crie IDs Distribuídos Únicos

Gerador e analisador de ID Snowflake gratuito. Gere IDs únicos de 64 bits para sistemas distribuídos. Analise IDs existentes para extrair carimbo de tempo, ID da máquina e sequência.

Gerador de ID Snowflake

Opcional: timestamp Unix em milissegundos (padrão é o tempo atual)

ID da Máquina (0-31)

ID do Data Center (0-31)

Número de Sequência (0-4095)

ID Snowflake
2094810864971415552
00111010001001001000011011000100000011001
00000
00000
000000000000
Timestamp (41 bits)
ID do Data Center (5 bits)
ID da Máquina (5 bits)
Número de Sequência (12 bits)
Calculadora de carregamento...
📚

Documentação

O que é um gerador de IDs Snowflake?

Um gerador de Snowflake ID cria um número único de 64 bits a partir de um carimbo de data e hora, um identificador de máquina e um número de sequência. O Twitter criou o formato em 2010 para que as máquinas que geram IDs não precisassem se coordenar entre si. Muitos servidores podem produzir IDs ao mesmo tempo sem perguntar "este número já foi usado?". Esta ferramenta cria um Snowflake ID a partir dos valores informados e mostra como esses valores preenchem os 64 bits.

Como funciona este gerador de IDs Snowflake

O gerador recebe quatro entradas:

  • Carimbo de data e hora: um carimbo de data e hora Unix em milissegundos. Deixe em branco para usar a hora atual.
  • ID da máquina: um número inteiro de 0 a 31 (5 bits). Esse é o “ID do worker” original do Twitter.
  • ID do data center: um número inteiro de 0 a 31 (5 bits).
  • Número de sequência: um número inteiro de 0 a 4095 (12 bits), usado para diferenciar IDs criados no mesmo milissegundo.

A ferramenta combina os quatro valores em um único ID de 64 bits e exibe o resultado dividido nos segmentos de carimbo de data e hora, máquina e sequência.

O carimbo de data e hora é medido a partir de um ponto de partida fixo chamado de época do Twitter: 4 de novembro de 2010, 1:42:54,657 UTC, ou 1.288.834.974.657 milissegundos depois da época Unix. Este gerador não permite alterar esse ponto de partida; todo ID que ele produz é medido a partir dessa data fixa.

Estrutura do ID Snowflake

Um ID Snowflake é um inteiro de 64 bits dividido em quatro partes, lidas do bit mais significativo para baixo:

BitsCampoFaixa
1Bit de sinalsempre 0
41Carimbo de data e horamilissegundos desde a época do Twitter
5ID do data center0–31
5ID da máquina (worker)0–31
12Número de sequência0–4095

O bit inicial é sempre 0, portanto um ID Snowflake é sempre um número positivo. O carimbo de data e hora de 41 bits e o campo de sequência de 12 bits são as duas partes que tornam os IDs Snowflake úteis para ordenação: IDs criados mais tarde têm um segmento de carimbo de data e hora maior, portanto são ordenados depois dos anteriores.

Fórmula do ID Snowflake

O gerador cria o ID com esta fórmula:

1delta = timestamp - 1288834974657
2id = (delta << 22) | (dataCenterId << 17) | (machineId << 12) | sequence
3

<< é um deslocamento de bits para a esquerda. Deslocar um número 22 bits para a esquerda equivale a multiplicá-lo por 2²², ou 4.194.304. As quantidades de deslocamento (22, 17, 12) vêm diretamente das larguras dos campos: o campo de sequência tem 12 bits de largura, portanto o ID da máquina fica 12 bits acima; o campo da máquina tem 5 bits de largura, portanto o ID do data center fica 17 bits acima (12 + 5); e assim por diante.

Como calcular um ID Snowflake: exemplo resolvido

Suponha que alguém insira:

  • Carimbo de data e hora: 1.288.834.975.657 (exatamente 1.000 ms após a época do Twitter)
  • ID do data center: 1
  • ID da máquina: 1
  • Número de sequência: 0

Etapa 1 — Encontre o delta. Subtraia a época do carimbo de data e hora: 1.288.834.975.657 − 1.288.834.974.657 = 1.000.

Etapa 2 — Desloque cada campo para sua posição.

  • Carimbo de data e hora: 1.000 << 22 = 4.194.304.000
  • ID do data center: 1 << 17 = 131.072
  • ID da máquina: 1 << 12 = 4.096
  • Sequência: 0

Etapa 3 — Combine com OU bit a bit. Como nenhum dos campos deslocados se sobrepõe, somá-los produz o mesmo resultado que aplicar OU a eles:

4.194.304.000 + 131.072 + 4.096 + 0 = 4.194.439.168

Esse é o Snowflake ID para esta entrada. A visualização do resultado da ferramenta divide a mesma sequência binária de 64 bits de volta em um bloco de carimbo de data e hora de 41 bits, um bloco de máquina de 10 bits e um bloco de sequência de 12 bits, de modo que a estrutura do número permaneça visível.

Onde os IDs Snowflake são usados

O Twitter criou o formato para gerar IDs únicos e aproximadamente ordenados no tempo em muitas máquinas, sem um contador central que cada servidor precisasse consultar. Outras plataformas copiaram a ideia. O Discord, por exemplo, afirma que usa o formato snowflake do Twitter para os seus IDs. A mesma ideia aparece em fragmentação de bancos de dados (sharding), IDs de pedidos em sistemas de comércio eletrônico e registros de eventos em aplicações distribuídas: em qualquer lugar em que muitas máquinas precisem distribuir IDs de forma independente e ainda mantê-los aproximadamente ordenados por tempo.

Limitações dos IDs Snowflake

Um gerador Snowflake de produção normalmente mantém seu próprio relógio contínuo: ele aumenta o número de sequência a cada ID criado no mesmo milissegundo e espera o milissegundo seguinte quando a sequência chega a 4.095. Esta ferramenta não guarda memória entre os cálculos. Ela cria um ID a partir do carimbo de data e hora, dos IDs e do número de sequência informados, o que a torna útil para explorar o formato, mas diferente de um serviço de produção em funcionamento.

O projeto tem limites fixos, independentemente do serviço que o implemente:

  • Época fixa: este gerador aceita apenas carimbos de data e hora iguais ou posteriores a 4 de novembro de 2010 (a época do Twitter). Datas anteriores não podem ser codificadas.
  • Limite superior do carimbo de data e hora: o campo de carimbo de data e hora de 41 bits se esgota por volta de julho de 2080. Depois disso, o delta em relação à época não cabe mais em 41 bits.
  • Limite da sequência: apenas 4.096 IDs distintos (0–4095) podem ser emitidos por uma máquina no mesmo milissegundo antes que os valores se repitam.
  • Espaço de máquinas: com 5 bits para cada ID de máquina e ID de data center, uma implantação tem 1.024 identidades de máquina distintas (32 × 32) para distribuir sem colisões.
  • Ordenação local, não global: os IDs só são ordenados corretamente entre si se vierem de máquinas com relógios sincronizados. A diferença entre os relógios das máquinas pode interromper a ordenação temporal estrita.

História do ID Snowflake

O Twitter criou o Snowflake ao migrar seu armazenamento do MySQL para o Cassandra, que não tem recurso para IDs sequenciais. Os objetivos do projeto eram IDs com menos de 64 bits, únicos, aproximadamente ordenados no tempo e diretamente classificáveis. A versão inicial foi lançada em 2010 e depois descontinuada em favor de uma reescrita interna. Outras grandes plataformas copiaram o projeto, de forma modificada, porque precisavam da mesma coisa: IDs únicos e classificáveis gerados por muitas máquinas ao mesmo tempo.

Perguntas frequentes

O que é um ID Snowflake? Um ID Snowflake é um número de 64 bits formado por um carimbo de data e hora, um identificador de máquina e um número de sequência, projetado para que muitas máquinas possam gerar IDs exclusivos sem coordenar umas com as outras.

Qual é a fórmula do ID Snowflake? id = ((timestamp − epoch) << 22) | (dataCenterId << 17) | (machineId << 12) | sequence, em que a época é uma data inicial fixa e << é um deslocamento de bits para a esquerda.

Posso alterar a época neste gerador? Não. Esta ferramenta sempre mede o carimbo de data e hora a partir da época fixa do Twitter, 4 de novembro de 2010. Não há um campo para definir uma data inicial diferente.

Esta ferramenta decodifica um ID Snowflake existente? Não. Ela apenas cria um novo ID a partir do carimbo de data e hora, do ID da máquina, do ID do data center e do número de sequência inseridos, depois mostra a decomposição em bits desse novo ID.

Quantos IDs Snowflake uma máquina pode gerar por milissegundo? Até 4.096, pois o campo de sequência tem 12 bits de largura (valores de 0 a 4.095).

Até que ano este gerador pode produzir carimbos de data e hora válidos? Até cerca de julho de 2080. O campo de carimbo de data e hora de 41 bits comporta no máximo cerca de 69,7 anos medidos a partir da época fixa de 2010 (as notas do Twitter arredondam isso para 69 anos), depois dos quais o valor estoura o campo.

Referências

  1. Twitter. Snowflake README (tag snowflake-2010), GitHub. README do Snowflake — IDs sem coordenação e aproximadamente ordenados no tempo, com menos de 64 bits; tempo de 41 bits (69 anos), ID de máquina de 10 bits (1.024 máquinas), sequência de 12 bits (4.096 por máquina por milissegundo); motivado pela migração do MySQL para o Cassandra.
  2. Twitter. IdWorker.scala (tag snowflake-2010), GitHub. IdWorker.scala do Snowflake — twepoch = 1288834974657; 5 bits de worker, 5 bits de datacenter, 12 bits de sequência; deslocamentos de 12, 17 e 22.
  3. Discord. API Reference: Snowflakes. Referência da API do Discord — o Discord usa o formato snowflake do Twitter para seus IDs.
  4. Twitter. Snowflake README (master), GitHub. Aviso de descontinuação do Snowflake — a versão inicial foi lançada em 2010 e foi descontinuada.