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)
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:
| Bits | Campo | Imagem |
|---|---|---|
| 1 | Bit de sinal | sempre 0 |
| 41 | Carimbo de data e hora | milissegundos desde a época do Twitter |
| 5 | ID do data center | 0–31 |
| 5 | ID da máquina (worker) | 0–31 |
| 12 | Número de sequência | 0–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:
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
- “Announcing Snowflake.” Blog de Engenharia do Twitter, 2010.
- "Snowflake ID." Wikipédia, https://en.wikipedia.org/wiki/Snowflake_ID