|
续前文:大型系统架构设计 |
补上文-->以微服务架构为例的技术选型参考
引入正题之分布式ID生成器
在分布式系统中,如何在各个不同的服务器产生ID值?
解决方案如下
1.使用数据库自增特性(不同节点直接使用相同数据库的自增Id值)
2.使用UUID算法产生Id值(UUID.randomUUID()获取UUID值(这个在项目中有用过,当时比较懵逼))
3.使用sonwFlake算法产生Id值
SnowFlake--雪花算法
Twitter提出的一种生成id的算法
该算法生成一个64bit的整数,也就是long类型来存储Id值
第一位可以理解为符号位
再往后的41位时间戳,表示2的41次方数字,换算到年除以1000(毫秒)*60(秒)*60(分钟)*24(小时)*365(天)等于69年,作为起始时间2021-12-28 23:05:12.3-2090之间的任一时刻
根据时间戳区分Id值
接下来是10位机器码,通过10位与节点有关的物理信息,对不同节点生成不同的Id值
12位序列号:0.1.2...12递增数字的二进制表达形式
根据机器码和序列号区分Id值
ps:关于雪花算法的源码笔者还得去研究
写在后面的话:事件结果:现在的时间完全按照自己的规划走下去,所以写下了以上blog 碎碎念:欢迎大家指出blog中的问题,督促笔者进一步改善,你的建议是笔者坚持的动力 |