全局唯一ID生成算法

全局唯一ID算法需要满足的需求:

1.全局唯一
2.单调递增
3.高可用性(高QPS、低延迟等)
4.某些场景还要求ID非连续,防止被构造ID爬取信息

SnowFlake算法的不足:

1.依赖服务器时间,如果各个服务器时间不一致,或时间发生回拨会导出ID出错
2.单位时间生成ID的数量和可以使用的时间存在瓶颈,不适合某些场景
3.获取系统时间性能相对较差

美团Leaf-segment算法:

biz_tag:用来区分不同业务
max_id:该biz_tag已分配的最大ID
step:每次分配号段的长度

读一次DB理论上可以生成step个ID,可以通过双buffer缓解多个节点同时读DB的压力

缺点:
1.ID不是严格递增
2.号码不够随机

美团Leaf-snowflake算法:
1.通过ZooKeeper维护workerid
2.节点启动是检测时钟

百度UidGenerator算法:
1.通过数据库自增维护workerid
2.预生产uid来减少调用时间
3.老实说我没怎么看懂是咋借用未来时间的。。。


参考连接:
https://tech.meituan.com/2017/04/21/mt-leaf.html
https://www.infoq.cn/article/wechat-serial-number-generator-architecture
https://github.com/baidu/uid-generator/blob/master/README.zh_cn.md

你可能感兴趣的:(全局唯一ID生成算法)