Identity Generators (ID生成器)

Identity Generators (ID生成器)


概述

Agrona提供了多种高性能的ID生成器,用于在分布式系统中生成唯一标识符。

SnowflakeIdGenerator

基于Twitter Snowflake算法的ID生成器:


                import org.agrona.concurrent.SnowflakeIdGenerator;

                // 创建生成器
                // 参数: nodeId (0-1023), epoch (基准时间)
                final SnowflakeIdGenerator generator =
                    new SnowflakeIdGenerator(nodeId, epoch);

                // 生成唯一ID
                final long uniqueId = generator.nextId();
                

ID结构

Snowflake ID由以下部分组成:


                |-- 1位符号位 --|-- 41位时间戳 --|-- 10位节点ID --|-- 12位序列号 --|
                      0              timestamp          nodeId         sequence
                

使用示例


                public class OrderIdGenerator
                {
                    private static final long EPOCH = 1609459200000L; // 2021-01-01
                    private final SnowflakeIdGenerator generator;

                    public OrderIdGenerator(final int nodeId)
                    {
                        this.generator = new SnowflakeIdGenerator(nodeId, EPOCH);
                    }

                    public long generateOrderId()
                    {
                        return generator.nextId();
                    }

                    // 从ID中提取信息
                    public long extractTimestamp(final long id)
                    {
                        return ((id >> 22) & 0x1FFFFFFFFFFL) + EPOCH;
                    }

                    public int extractNodeId(final long id)
                    {
                        return (int)((id >> 12) & 0x3FFL);
                    }

                    public int extractSequence(final long id)
                    {
                        return (int)(id & 0xFFFL);
                    }
                }
                

特性

  • 趋势递增
  • 包含时间信息
  • 分布式唯一性
  • 高性能生成

最佳实践

  1. 为每个节点分配唯一的nodeId
  2. 选择合适的epoch基准时间
  3. 避免时钟回拨问题
  4. 监控ID生成速率

总结

SnowflakeIdGenerator提供了高效的分布式ID生成方案。