第一步,提问明确需求
本例中需求:
- id唯一
- id只含数字
- 长度64bit
- 可通过日期排序
- 每秒支持生成10000个id
第二步 high-level设计
考虑四种方法:
- Multi-master replication(db auto increment by k)
- UUID (128bit 优点各服务器可单独负责生成id)
- Ticket Server(单独db专门负责id自增,缺点是单点故障)
- Twitter snowflake approach(符号位0+41位timestamp+5位datacenterID+5位machineID+12位序列号)
第三步 deep dive
- Twitter snowflake approach满足需求
- 41位timestamp够用69年
- 12位序列号,每台机器每毫秒可支持4096个新id
第四步 总结
其它讨论:
- 时钟同步
- 各个section的长度可根据需求适当调整
- 高可用