专栏首页WD学习记录每周一总结(4) 分布式ID 学习笔记

每周一总结(4) 分布式ID 学习笔记

在分布式系统,有些数据会存在全局唯一的需求,生成全局唯一的分布式ID也很重要。

分布式ID需要具备的特点

全局唯一:最基本的要素

趋势递增:分布式ID用来标识数据的唯一性,往往会被用作主键或者是唯一索引。常用的MySQL InnoDB,使用的索引往往是BTree索引,自增的数据在插入时会有较高的效率。

信息安全:避免恶意用户直接根据自增ID获取数据信息

几种分布式ID的实现方式

UUID

UUID(Universally Unique Identifier)的标准型式包含32个16进制数字,以连字号分为五段,形式为8-4-4-4-12的36个字符。UUID是基于当前时间、计数器和硬件标识(比如MAC地址)生成的

优点:

本地生成,不需要远程调用

缺点:

生成结果较长,不适合作为索引

无序的UUID作为主键索引也会严重影响数据插入的效率

基于MAC地址生成的UUID可能会造成MAC地址泄漏

雪花算法

64bit

第一个bit用于表示正数还是负数。作为ID的情况下,这个位置固定为0。

41bit用于表示毫秒级时间戳,可以使用69年。

10bit workerId可以用于表示1024台机器。

12bit用于作为自增序列号

雪花算法理论上的QPS可以到达4096000

优点:

时间在高位,序列号在低位。趋势递增

生成的ID为long类型

不需要依赖数据库等

缺点:

强依赖时钟,时钟回拨会导致发号重复

数据库生成

利用数据库自增ID特性生成ID,每次写入之后获取last insert id。

优点:

实现成本低

有序自增

缺点:

强依赖数据库,且ID生成性能受限于数据库写入的性能

Flickr 方案

每台机器设置不同的初始值以及指定步长,步长=部署的机器数量。比如2台机器的情况,第一台机器生成的ID是1,3,5,7,第二台生成的是2,4,6,8。

优点:

实现简单

缺点:

步长固定,需要扩容的时候很难处理

每次生成ID都需要读写数据库

号段方法

批量获取ID,缓存在本地,缓存数据用完之后才会再去获取下一批ID。

优点:

数据库的读写频率从原本的每次获取ID都需要对数据库进行读写,频率降为之前的1/(批量获取ID的size)

ID号码趋势递增

对号段有缓存,即使数据库暂时不可用,ID仍然可以坚持到缓存的号段分配完成

缺点:

ID号码不够随机,可能会泄露发号的数量

号段用完之后还是可能会受到DB读写性能的影响

可以从上面的几种方式,学习到的基本思路是:根据实例唯一标识+时间戳+自增序列号作为分布式ID生成的规则。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 牛客网 数列还原

    牛牛的作业薄上有一个长度为 n 的排列 A,这个排列包含了从1到n的n个数,但是因为一些原因,其中有一些位置(不超过 10 个)看不清了,但是牛牛记得这个数列顺...

  • 0-1背包问题

  • 牛客网 不用加减乘除做加法

    看到题目,最直接的想法应该是按照二进制的计算,然而看到好多人提交的是用sum()函数。

  • 大型互联网公司:常用的分布式ID方案总结!

    ID是数据的唯一标识,传统的做法是利用UUID和数据库的自增ID,在互联网企业中,大部分公司使用的都是Mysql,并且因为需要事务支持,所以通常会使用Innod...

    秃顶的Java程序员
  • 分布式ID生成方案总结

    ID是数据的唯一标识,传统的做法是利用UUID和数据库的自增ID,在互联网企业中,大部分公司使用的都是Mysql,并且因为需要事务支持,所以通常会使用Innod...

    macrozheng
  • 分布式ID生成器 | 架构师之路

    一、需求缘起 几乎所有的业务系统,都有生成一个唯一记录标识的需求,例如: 消息标识:message-id 订单标识:order-id 帖子标识:tiezi-id...

    架构师之路
  • 分布式系统ID的几种生成办法

    一般单机或者单数据库的项目可能规模比较小,适应的场景也比较有限,平台的访问量和业务量都较小,业务ID的生成方式比较原始但是够用,它并没有给这样的系统带来问题和瓶...

    用户1214487
  • 「脑图」各种设备的ID体系架构

    很多的数据业务都需要一个稳定的ID作为设备唯一的标识符,如广告追踪、归因、用户画像、数据统计等。随着对用户隐私的越来越关注,有些ID被放弃,有些新的ID取而代之...

    GA小站
  • 细聊分布式ID生成方法

    一、需求缘起 几乎所有的业务系统,都有生成一个记录标识的需求,例如: (1)消息标识:message-id (2)订单标识:order-id (3)帖子标识:t...

    架构师之路
  • Google Analytics里的各种ID

    默认情况下,Google Analytics 会为每台设备分配一个唯一的 Client ID,并在报告中将每个 Client ID 视为一个唯一身份用户。Cli...

    GA小站

扫码关注云+社区

领取腾讯云代金券