分布式唯一ID的思考

Snowflake算法的一些问题

Snowflake
其核心算法是使用41bit作为毫秒数差值,10bit作为机器的ID,12bit作为毫秒内的流水号

理论上2^41毫秒可以使用 69 年,机器ID上限 1024,每毫秒最多可生成 4096 个唯一ID(409万/秒)

缺点:

  1. 机器时间回拨,这种情况可能造成ID重复。
  2. ID趋势递增,可能被竞争对手分析出每日ID增量。

解决办法:

  1. 发生时间回拨时,自动切换机器ID(要求配置冗余的机器ID,且有一定的分配机制)
  2. 调整比特位顺序和长度,比如采用 39位毫秒数差值,11位流水号,13位机器ID的,这样可以使用17年,支持8192台机器ID,每毫秒可产生 2048 个唯一ID(200万/每秒)。再调整一下机器ID的切换机制,可以一定程度增加ID的分析门槛。

参考:

Leaf:美团分布式ID生成服务开源

分布式唯一id:snowflake算法思考

百度的 UidGenerator

伪共享(false sharing),并发编程无声的性能杀手


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 using1174@foxmail.com

文章标题: 分布式唯一ID的思考

文章字数: 288

本文作者: Jun

发布时间: 2019-09-12, 11:30:00

最后更新: 2019-09-12, 14:02:54

原始链接: http://yoursite.com/2019/09/12/分布式唯一ID的思考/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏