Índice
1 Qual é o algoritmo do floco de neve?
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());
}
}