一 snowflake算法组成
snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是0。
最高位是符号位,始终为0,不可用。
41位的时间序列,精确到毫秒级,41位的长度可以使用69年。时间位还有一个很重要的作用是可以根据时间进行排序。
10位的机器标识,10位的长度最多支持部署1024个节点。
12位的计数序列号,序列号即一系列的自增id,可以支持同一节点同一毫秒生成多个ID序号,12位的计数序列号支持每个节点每毫秒产生4096个ID序号。
总结: 雪花算法组成结构大致分为了无效位、时间位、机器位和序列号位。其特点是自增、有序、纯数字组成查询效率高且不依赖于数据库。适合在分布式的场景中应用,可根据需求调整具体实现细节。
二 衍生问题 - 分布式系统如何生成一个单据号
一个订单号示例 - 20181024 0 4 099 021 00000000 21 00 1234567820181024-日期
0 - 弹性标识为master
4 - 新平台
099 - 写死的系统标识
00000000 - 8位扩展码
21 分库分表位
00 - 弹性管控位
12345678 - 8位随机sequece
标签:生成,毫秒,id,节点,序列号,ID,分布式 From: https://www.cnblogs.com/balfish/p/18042102