Análise e prática de geração de ID usando algoritmo floco de neve

Índice

1 Qual é o algoritmo do floco de neve?

estrutura

vantagem

deficiência

2 Use em java

Notas sobre uso: 

código de teste

Efeito


1 Qual é o algoritmo do floco de neve?

Algoritmo do floco de neve de Witter. Snowflake ID é um algoritmo distribuído de geração de ID exclusivo projetado para resolver a necessidade de gerar IDs exclusivos em sistemas distribuídos.

estrutura

A estrutura do Snowflake ID é a seguinte:

0 | 00000000000000000000000000000000000000 | 00000 | 00000 | 000000000000

- O primeiro bit (bit mais alto) é o bit de sinal, geralmente 0.

- Os próximos 41 bits são o carimbo de data/hora, usado para registrar a hora em que o ID foi gerado.

-Depois, há um ID de máquina funcional de 10 dígitos, usado para identificar máquinas diferentes.

- De modo geral, o ID da máquina de trabalho é dividido em ID do nó de trabalho e ID do data center, cada um ocupando 5 bits.

 - O último é um número de sequência de 12 dígitos, usado para resolver o problema de conflito de vários IDs gerados no mesmo milissegundo.

Por meio dessa estrutura, o Snowflake ID pode gerar IDs exclusivos e ordenados em sistemas distribuídos.

vantagem

Eficiente, com tendência crescente, classificável e não dependente de bancos de dados ou redes externas.

deficiência

Embora o algoritmo Snowflake ID tenha muitas vantagens para gerar IDs exclusivos em sistemas distribuídos, ele também apresenta algumas desvantagens potenciais:

1. Dependência do relógio da máquina: A parte do carimbo de data/hora do ID do Snowflake depende do relógio do sistema da máquina que gerou o ID. Se o relógio da máquina estiver atrasado ou fora de sincronia, isso poderá fazer com que o ID gerado não seja exclusivo ou esteja incorreto.

2. Problema de reversão do relógio: Se o relógio da máquina for revertido, o ID gerado poderá ser menor que o ID gerado anteriormente. Isso pode causar alguns problemas potenciais, como não classificar ou indexar corretamente em determinados cenários.

3. Duplicação do número de sequência sob alta simultaneidade: Se o número de solicitações de ID geradas no mesmo milissegundo for muito alto, a parte do número de sequência pode não ser suficiente para garantir a exclusividade. Neste caso, são necessárias estratégias adicionais para resolver conflitos de IDs gerados.

4. Limitações de escalabilidade: A estrutura do Snowflake ID inclui ID da máquina de trabalho e ID do data center, o que limita a escalabilidade do sistema. Se precisar aumentar o número de máquinas ou data centers, talvez seja necessário realocar o intervalo de ID ou modificar o algoritmo.

5. É necessário um único ponto para gerar IDs: Para garantir a exclusividade dos IDs, é necessário um gerador de ID centralizado para atribuir IDs de máquinas de trabalho e IDs de data center. Isso pode se tornar um ponto único de falha ou gargalo de desempenho no sistema.

Embora o algoritmo Snowflake ID tenha algumas deficiências, ele ainda é um esquema de geração de ID exclusivo distribuído viável e amplamente utilizado na maioria dos casos. Dependendo dos cenários e requisitos específicos da aplicação, outros algoritmos de geração de ID podem ser considerados ou medidas adicionais podem ser tomadas para resolver essas deficiências.

2 Use em java

Usamos diretamente o kit de ferramentas hutool para nos ajudar a implementar o algoritmo do floco de neve

confiar

        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.16</version>
        </dependency>


Notas sobre uso: 

O ID da máquina de trabalho é dividido em ID do nó de trabalho e ID do data center, cada um ocupando 5 bits, portanto, o número máximo de ID do trabalhador e ID do data center é 31

código de teste

    /** 测试 */
    public static void main(String[] args) {
        // workerID和datacenterId最大31
        Snowflake snowflake = IdUtil.getSnowflake(0, 31);
        for (int i = 0; i < 10; i++) {
            System.out.println(snowflake.nextId());
        }
    }

Efeito

Acho que você gosta

Origin blog.csdn.net/qq_53679247/article/details/132651246
Recomendado
Clasificación