这是 Beta 探索课程,内容结构、实验步骤和示例可能会继续调整。
机器 ID
机器 ID 用于标识工作节点,确保不同节点生成的 ID 不冲突。
把 64 位拆成时间戳、机器 ID 和序列号之后,时间戳和序列号都是节点自己就能掌握的,唯独机器 ID 必须保证”不同节点拿到不同的值”。一旦两个同时存活的节点拿着同一个机器 ID,它们在同一毫秒、同一段序列号上生成的 ID 会彻底撞车。这种碰撞不会报错、也不会告警,往往要等到业务数据对不上才被发现,排查成本极高。
机器 ID 在 64 位里只占 10 位,结构上是 5 位数据中心 ID 加 5 位机器 ID,也就是 32 个数据中心、每个数据中心 32 台机器,合计 1024 个节点。这个数字直接决定了部署规模的上限:超过 1024 个节点就必须重新分配比特,而多机房部署时,数据中心 ID 还要留出扩容余量。
分配策略大致三条路。手动分配由管理员为每台机器登记 ID,最简单,但需要一套 ID 管理系统,换机器还得人工改配置。自动分配用 ZooKeeper 或 etcd 协调,新节点上线自动领号,省心但多了一个必须高可用的协调服务。基于 IP 分配取地址的最后几位映射成 ID,不需要额外组件,可一旦 IP 被复用或变更就会静默冲突。
读完这一章,你应该能按节点规模反推比特分配方案,并说明三种分配策略各自会在什么情况下失效。
结构
0000000000
↑ ↑
数据中心ID 机器ID
5位 5位
容量
数据中心 ID:5 位 = 32 个数据中心
机器 ID:5 位 = 32 台机器/数据中心
总容量:32 × 32 = 1024 个节点
1. 手动分配
管理员手动为每台机器分配 ID。
2. 自动分配
使用 ZooKeeper / etcd 协调分配。
3. 基于 IP
基于 IP 地址的最后几位分配。
了解了机器 ID 后,我们学习序列号设计。
👉 下一节:序列号
发现内容有问题?
告诉我们哪里需要改进。
