第一步,提问明确需求

本例中需求:

  • 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的长度可根据需求适当调整
  • 高可用