int64 可用位数63位, 前0位标志位,不可用, 机房位采用5位表示,支持32
开始位 | 结束位 | 长度 | 说明 |
---|---|---|---|
0 | 1 | 1 | int64的标志位 |
1 | 6 | 5 | 机房位,最多支持32个机房 |
6 | 64 | 58 | 计数位,最多支持 2^58 |
机房位: 2^5 = 32 最大计数: 2^58 = 288230376151711744, 假设业务QPS为1W/s,发号器可以保证91W年可用 (1 << 58) / (10000 * 3600 * 24 * 365) = 913972 不同机房采用Qconf配置机房ID
- M5 机房位 0
- LG 机房位 1
现有业务影响:
- 对于分库需要去掉机房位在做分库分表,使用的时候直接带上机房位。
- 生成的ID不再有序,需要使用独立字段排序。
解决方案:
- 分库分表提供sdk
- 改动现有id业务