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 IDs Snowflake cria um número exclusivo 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 esse formato em 2010 para dar a cada tuíte um identificador que muitos servidores pudessem produzir ao mesmo tempo, sem precisar perguntar uns aos outros “esse número já foi usado?”. Esta ferramenta cria um ID Snowflake a partir dos valores inseridos 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. Em seguida, mostra o resultado em binário, dividido nos segmentos de carimbo de data e hora, data center, máquina e sequência.

O carimbo de data e hora é medido a partir de um ponto inicial fixo chamado época do Twitter: 4 de novembro de 2010, 1:42:54,657 UTC, ou 1.288.834.974.657 milissegundos após a época Unix. Este gerador não permite alterar esse ponto inicial. Todo ID produzido é medido a partir dessa única 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:

BitsCampoImagem
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:

d=t−1288834974657d = t - 1288834974657

I=(d<<22)∣(c<<17)∣(m<<12)∣sI = (d << 22) \mathbin{|} (c << 17) \mathbin{|} (m << 12) \mathbin{|} s

em que d é o delta, t é o carimbo de data e hora inserido em milissegundos, I é o ID finalizado, c é o ID do data center, m é o ID da máquina e s é o número de sequência.

<< é 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 ID Snowflake para essa entrada. A visualização de resultados da ferramenta divide a mesma sequência binária de 64 bits novamente em um bloco de carimbo de data e hora de 41 bits, um bloco de data center de 5 bits, um bloco de máquina de 5 bits e um bloco de sequência de 12 bits, mantendo visível a estrutura do número.

Onde os IDs Snowflake são usados

O Twitter criou o formato para fornecer IDs exclusivos e aproximadamente ordenados por tempo aos tuítes em milhares de máquinas de banco de dados, sem um contador central que todos os servidores precisassem consultar. Mais tarde, o Discord e o Instagram adotaram projetos semelhantes de IDs de 64 bits para mensagens e publicações. A mesma ideia aparece no particionamento de bancos de dados, em IDs de pedidos para sistemas de comércio eletrônico e em registros de eventos de aplicações distribuídas. Ela se adapta a qualquer situação em que muitas máquinas atribuam IDs de forma independente e ainda seja necessário ordená-los aproximadamente por tempo.

Limitações dos IDs Snowflake

Um gerador Snowflake de produção normalmente mantém seu próprio relógio em funcionamento: incrementa o número de sequência para cada ID criado no mesmo milissegundo e espera o próximo milissegundo quando a sequência chega a 4.095. Esta ferramenta não mantém memória entre os cálculos. Ela cria um ID a partir dos valores 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 anunciou o formato de ID Snowflake em 2010 como substituto dos simples IDs de banco de dados incrementados automaticamente, que não escalam entre muitos servidores de banco de dados independentes. O nome veio da ideia de que, assim como flocos de neve reais, não há dois IDs gerados iguais. Mais tarde, o projeto foi disponibilizado como código aberto e copiado, com alterações, por outras grandes plataformas que precisavam da mesma coisa: IDs exclusivos e ordenáveis, gerados por muitas máquinas ao mesmo tempo.

Dúvidas 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é por volta de julho de 2080. O campo de carimbo de data e hora de 41 bits pode armazenar no máximo cerca de 69,7 anos medidos a partir da época fixa de 2010, depois do que o valor excede a capacidade do campo.

Referências

  1. “Announcing Snowflake.” Blog de Engenharia do Twitter, 2010.
  2. "Snowflake ID." Wikipédia, https://en.wikipedia.org/wiki/Snowflake_ID