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);
}
}
特性
- 趋势递增
- 包含时间信息
- 分布式唯一性
- 高性能生成
最佳实践
- 为每个节点分配唯一的nodeId
- 选择合适的epoch基准时间
- 避免时钟回拨问题
- 监控ID生成速率
总结
SnowflakeIdGenerator提供了高效的分布式ID生成方案。