前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >每周一总结(4) 分布式ID 学习笔记

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

作者头像
发布2020-09-22 11:15:39
6860
发布2020-09-22 11:15:39
举报
文章被收录于专栏:WD学习记录

在分布式系统,有些数据会存在全局唯一的需求,生成全局唯一的分布式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生成的规则。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/09/20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 分布式ID需要具备的特点
  • 几种分布式ID的实现方式
    • UUID
      • 雪花算法
        • 数据库生成
          • Flickr 方案
            • 号段方法
            相关产品与服务
            数据库
            云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档