默认

IM消息ID技术专题(四):深度解密美团的分布式ID生成算法

查看数: 106788 | 评论数: 12 | 收藏 9
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2019-09-23 12:22

正文摘要:

本文来自美团技术团队“照东”的分享,原题《Leaf——美团点评分布式ID生成系统》,即时通讯网收录时有勘误、修订并重新排版,感谢原作者的分享。 1、引言 鉴于IM系统中聊天消息ID生成算法和生成策略的重要性(因 ...

评论

苏门答腊伟 发表于 2 个月前
引用:JackJiang 发表于 2022-06-17 10:51
这样肯定就没法保证递增了,肯定还得有个网关一样的东西,统一调用

路由层进行biz_tag转发的话,其实还是会有单点问题,感觉想要单调递增且全局唯一的id绕不开单点了。
JackJiang 发表于 1 年前
引用:qzuser 发表于 2022-06-17 09:47
如果一个业务的并发数很高,单个leaf服务不够用,需要两个leaf服务,第一个leaf服务号段是1-1000,第二个 ...

这样肯定就没法保证递增了,肯定还得有个网关一样的东西,统一调用
游客 发表于 1 年前
引用:JackJiang 发表于 2022-06-02 11:05
不同的leaf服务,对应于不同的业务,用biz_tag字段区分

如果一个业务的并发数很高,单个leaf服务不够用,需要两个leaf服务,第一个leaf服务号段是1-1000,第二个leaf服务号段是1001-2000。那么这两个leaf服务同时对外提供服务时,会出现发号不是递增的情况呢,1,1001,2,1002,...。单个leaf服务是递增的,但是一个业务如果有多台leaf服务,怎么保证递增呢
JackJiang 发表于 1 年前
引用:陈萌1 发表于 2022-06-02 00:39
Leaf-segment 是怎么保证全局有序的呢,拿文章中图为例,三个leaf服务分别去了test_tag业务的不同号段分别 ...

不同的leaf服务,对应于不同的业务,用biz_tag字段区分
陈萌1 发表于 1 年前
Leaf-segment 是怎么保证全局有序的呢,拿文章中图为例,三个leaf服务分别去了test_tag业务的不同号段分别是1-1000,1001-2000,2001-3000,同时地外提供服务,这时候拿到的 id顺序了能是 1、1001、2、2001、3、2002、1002、4 这个顺序啊?求大神解答
JackJiang 发表于 4 年前
引用:ericqfli 发表于 2020-03-12 10:44
Leaf-snowflake 多个服务实例是无状态的吗?  如果是,每个机器时钟不能完全保障一致, 业务service的快速的两 ...

百度对SnowFlake算法进行了另一种思路的改进,可以学习一下:《IM消息ID技术专题(五):开源分布式ID生成器UidGenerator的技术实现
lixiaomeng8520 发表于 4 年前
ID生成更考验架构的设计能力,对于不同场景的理解。  学习
ericqfli 发表于 4 年前
Leaf-snowflake 多个服务实例是无状态的吗?  如果是,每个机器时钟不能完全保障一致, 业务service的快速的两次请求分别落在不同实例上,是不是就不能保证ID的有序性了?
JackJiang 发表于 4 年前
引用:laojichuxin 发表于 2019-09-30 17:19
小场景直接自增就够用了,不需要这么大的刀,杀苍蝇。

活体解刨苍蝇
Awei 发表于 4 年前
精辟
laojichuxin 发表于 4 年前
引用:不要·不要 发表于 2019-09-23 13:12
美团的这两种id生成算法算起来很牛,不过可能不太适合中小场景,
还是有点复杂,
技术不行的程序员可能ho ...

小场景直接自增就够用了,不需要这么大的刀,杀苍蝇。
不要·不要 发表于 4 年前
美团的这两种id生成算法算起来很牛,不过可能不太适合中小场景,
还是有点复杂,
技术不行的程序员可能hold不住。

那个leaf-snowflake值得研究一下,这玩意很实用

返回顶部