资讯专栏INFORMATION COLUMN

分布式ID系列(1)——为什么需要分布式ID以及分布式ID的业务需求

Snailclimb / 3515人阅读

摘要:同时除了对号码自身的要求,业务还对号生成系统的可用性要求极高,想象一下,如果生成系统瘫痪,整个美团点评支付优惠券发券骑手派单等关键动作都无法执行,这就会带来一场灾难。

分布式id主要用到哪些地方

在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。如在美团点评的金融、支付、餐饮、酒店、猫眼电影等产品的系统中,数据日渐增长,对数据分库分表后需要有一个唯一ID来标识一条数据或消息,数据库的自增ID显然不能满足需求;特别一点的如订单、骑手、优惠券也都需要有唯一ID做标识。此时一个能够生成全局唯一ID的系统是非常必要的。

分布式id创建的业务需求

要求如下所示

1.全局唯一性:不能出现重复的ID号,既然是唯一标识,这是最基本的要求。
2.趋势递增:在MySQL InnoDB引擎中使用的是聚集索引,由于多数RDBMS使用B-tree的数据结构来存储索引数据,在主键的选择上面我们应该尽量使用有序的主键保证写入性能。
3.单调递增:保证下一个ID一定大于上一个ID,例如事务版本号、IM增量消息、排序等特殊需求。
4.信息安全:如果ID是连续的,恶意用户的扒取工作就非常容易做了,直接按照顺序下载指定URL即可;如果是订单号就更危险了,竞对可以直接知道我们一天的单量。所以在一些应用场景下,会需要ID无规则、不规则。
5.分布式id里面最好包含时间戳,这样就能够在开发中快速了解这个分布式id的生成时间

上述123对应三类不同的场景,3和4需求还是互斥的,所以无法使用同一个方案满足。

同时除了对ID号码自身的要求,业务还对ID号生成系统的可用性要求极高,想象一下,如果ID生成系统瘫痪,整个美团点评支付、优惠券发券、骑手派单等关键动作都无法执行,这就会带来一场灾难。由此我总结下一个ID生成系统应该做到如下几点:

可用性高:就是我用户发了一个获取分布式id的请求,那么你服务器就要保证99.999%的情况下给我创建一个分布式id
延迟低:就是我用户给你一个获取分布式id的请求,那么你服务器给我创建一个分布式id的速度就要快
高QPS:这个就是用户一下子有10万个创建分布式id请求同时过去了,那么你服务器要顶的住,你要一下子给我成功创建10万个分布式id

原文链接

其他分布式ID系列快捷键:
分布式ID系列(1)——为什么需要分布式ID以及分布式ID的业务需求
分布式ID系列(2)——UUID适合做分布式ID吗
分布式ID系列(3)——数据库自增ID机制适合做分布式ID吗
分布式ID系列(4)——Redis集群实现的分布式ID适合做分布式ID吗

大佬网址
https://www.itqiankun.com/art...
https://blog.csdn.net/hengyun...
https://tech.meituan.com/2017...
https://segmentfault.com/a/11...
https://www.jianshu.com/p/9d7...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/76113.html

相关文章

  • 布式ID系列(2)——UUID适合做布式ID

    摘要:用户指定一个名字空间和一个字符串,通过散列,生成。字符串本身需要是唯一的。。虽然是基于随机数,但是重复的可能性可以忽略不计,因此该版本也是被经常使用的版本。。当前正在使用的。。 UUID的生成策略: UUID的方式能生成一串唯一随机32位长度数据,它是无序的一串数据,按照开放软件基金会(OSF)制定的标准计算,UUID的生成用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。U...

    wayneli 评论0 收藏0
  • 布式ID系列(3)——数据库自增ID机制适合做布式ID

    摘要:数据库自增机制原理介绍在分布式里面,数据库的自增机制的主要原理是数据库自增和数据库的函数实现的。 数据库自增ID机制原理介绍 在分布式里面,数据库的自增ID机制的主要原理是:数据库自增ID和mysql数据库的replace_into()函数实现的。这里的replace数据库自增ID和mysql数据库的replace_into()函数实现的。这里的replace into跟insert功...

    Stardustsky 评论0 收藏0
  • 解决方案:如何防止数据重复插入?

    摘要:问题是,重复请求导致的数据重复插入。这问题造成的后果很明显数据冗余,可能不单单多一条有些业务需求不能有多余数据,造成服务问题问题如图所示解决方式如何将同请求,不执行插入,而是读取前一个请求插入的数据并返回。那么使用分布式锁的解决方案。 摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢!目录 为啥要解...

    wenshi11019 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<