1. 9IM首页
  2. 热点

开源的分布式ID框架实现原理分析

Leaf

Leaf主要有Leaf-Segment和Leaf-Snowflake两种模式

Leaf-Segment

Leaf-Segment主要采用上面的第四种.数据库分段发号生成唯一id的技术方案实现的。

这是我画的一个执行流程图,左边部分是业务系统获取id的流程:

1.业务系统通过HTTP,RPC,Client等方式向ID生成系统获取ID。

2.判断ID生成系统内存中当前SegmentBuffer使用率是否达到了10%,是的话触发另一个SegmentBuffer的异步更新。 (SegmentBuffer可以认为是一个容器,用于存放每次从数据库取出的step数量的id,然后供业务系统消耗。)

3.判断当前SegmentBuffer的id是否使用完了,如果没有使用完,就直接从这个SegmentBuffer取一个id返回。否则就将当前SegmentBuffer与备用SegmentBuffer进行交换,然后从交换后的SegmentBuffer取一个id返回给业务系统。

右边是备用SegementBuffer的更新流程:

ID生成系统会判断内存中当前Segement使用率是否达到了10%

开源的分布式ID框架实现原理分析

Leaf框架的优化点之一就是使用了双SegmentBuffer进行优化,如果单个SegmentBuffer,在id消耗完之后,ID生成系统需要从数据库获取新的号段,填充到SegmentBuffer,然后供业务系统消费,此时业务系统发来的请求需要进行等待。如果是双SegmentBuffer,可以在一个SegmentBuffer的id使用率达到阀值(默认是10%),就触发另一个SegmentBuffer的异步更新,提取把号段获取到,存储到内存中。

原创文章,作者:9IM,如若转载,请注明出处:https://www.9im.cn/817.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注