"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Implementando gerador de ID Snowflake

Implementando gerador de ID Snowflake

Publicado em 2024-11-07
Navegar:576

Implementing Snowflake Id generator

O que é um ID do floco de neve?

Snowflake IDs são usados ​​em ambientes distribuídos para gerar IDs curtos e exclusivos livres de colisões. Ao contrário dos métodos tradicionais, como depender de um banco de dados para geração de ID ou usar um UUID longo de 128 bits, os IDs do Snowflake usam tempo e operações bit a bit simples. Essa técnica inteligente permite que cada microsserviço gere IDs exclusivos de forma independente, sem a necessidade de um sistema central para evitar colisões.

Como gerar um

Gerar um ID do Snowflake é como construir um quebra-cabeça com três peças principais. Vamos decompô-lo:

  1. Pegue uma string de n bits de comprimento:

    Primeiro, começamos com uma sequência de bits de comprimento n. Isso conterá todas as informações necessárias para gerar um ID exclusivo.

  2. Divida-o em três seções: i, j e k:

    A sequência de bits é dividida em três partes, de modo que i j k = n.

  • i - O componente de tempo:

    A primeira parte, i, representa a hora atual. Escolha um horário de início fixo (também conhecido como época) e os bits de i serão calculados tomando o horário atual em nanossegundos e subtraindo o horário de início. Isso garante que os IDs mais recentes sejam sempre maiores que os mais antigos.

  • j - O ID da máquina:

    A segunda parte, j, é o identificador da máquina. Quando seu microsserviço é iniciado, é atribuído a ele um ID exclusivo (ID da máquina), que se torna a parte j. Isso garante que IDs gerados por máquinas diferentes não colidirão, mesmo que sejam criados exatamente no mesmo momento.

  • k - O número de sequência:

    A última parte, k, é o número de sequência. Ele atua como um contador que aumenta sempre que vários IDs são gerados na mesma unidade de tempo. Isso mantém os IDs únicos, mesmo que sejam gerados em rápida sucessão.

  1. Combine as peças: Depois de ter seus valores i, j e k, concatene-os para formar uma sequência de bits único. Em seguida, converta essa sequência de bits para base 10 para obter seu ID final do Snowflake.

Uma analogia rápida

Pense em um Snowflake ID como uma etiqueta de prato especial em uma cozinha movimentada:

  • Tempo (i): É como o tique-taque do relógio na cozinha, garantindo que os pratos preparados mais tarde recebam números maiores do que os feitos anteriormente.
  • ID da máquina (j): Cada chef (ou microsserviço) tem sua própria assinatura, garantindo que suas etiquetas de prato não entrem em conflito com as de mais ninguém.
  • Número de sequência (k): se um chef prepara vários pratos em um instante, ele adiciona um pequeno incremento às suas tags, para que cada prato tenha um rótulo exclusivo.

Floco de neve implementado em Go

Verifique este repositório GitHub para uma implementação Go da geração de ID do Snowflake

Fontes

  1. https://blog.x.com/engineering/en_us/a/2010/announcing-snowflake
  2. https://en.wikipedia.org/wiki/Snowflake_ID
Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/alquama/implementing-snowflake-id-generator-3f8k?1 Se houver alguma violação, entre em contato com [email protected] para excluí-la
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3