默认

IM消息ID技术专题(三):解密融云IM产品的聊天消息ID生成策略

查看数: 188278 | 评论数: 21 | 收藏 8
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2019-09-19 15:36

正文摘要:

本文来自融云技术团队原创分享,原文发布于“融云全球互联网通信云”公众号,原题《如何实现分布式场景下唯一 ID 生成?》,即时通讯网收录时有部分改动。 1、引言 对于IM应用来说,消息ID(或称序列号)是个看似 ...

评论

穷屌丝2 发表于 3 个月前
引用:ZJoker 发表于 2022-11-04 22:56
有专门的ID发号器服务

怎么个流程呢,是先不带id发送给服务端吗,服务端生成填充。那么客户端的消息没id,什么时候能给到他呢?
游客 发表于 1 年前
6.取会话 ID 的低 16 位作为 lowBits
int lowBits = (sessionIdInt & 0xFFFF) << 16;
这一步有问题吧,2^16=65536,65536-1 转为16进制为: 0xFFFF,(sessionIdInt & 0xFFFF) 这个意思是先把sessionIdInt 中高于16位的都为0,然后左移16位,z 这样 sessionIdInt 就是32位了呀
JackJiang 发表于 1 年前
引用:xiaoskery2 发表于 2023-08-21 15:40
会话类型+会话id一共只有22位,能表示的会话会不会太少了?冲突了怎么办?
像有匿名用户的场景,会不断的 ...

qq活了24年了,qq号现在才多少位。。。
先不说这22位能不能正的用完,假使真的会用完,我估计公司肯定比这个id先走。。。
xiaoskery2 发表于 1 年前
会话类型+会话id一共只有22位,能表示的会话会不会太少了?冲突了怎么办?
像有匿名用户的场景,会不断的产生匿名账号,匿名账号每次都会产生新的会话id,时间长了会话id就不够用了。
JackJiang 发表于 1 年前
引用:HK意境 发表于 2023-02-10 21:18
这相当于是全局递增的是吧,不能做到会话级别递增吧

融云的是全局唯一
HK意境 发表于 1 年前
这相当于是全局递增的是吧,不能做到会话级别递增吧
zenggang 发表于 2 年前
集群模式如何确保ID不重复, 因为ID没有work_id 信息
ZJoker 发表于 2 年前
引用:林北lpepsi 发表于 2021-09-11 23:32
有个疑惑,ID生成是在哪里生成,是客户端每次要发送消息前,请求这个ID生成的服务嘛,然后把生成的ID加到消 ...

有专门的ID发号器服务
BrainWong 发表于 2 年前
想问一下,使用这个算法生成的id,是不是就不需要另外弄一个id生成服务了?
林北lpepsi 发表于 3 年前
有个疑惑,ID生成是在哪里生成,是客户端每次要发送消息前,请求这个ID生成的服务嘛,然后把生成的ID加到消息中发给服务器
akira 发表于 3 年前
左右移的时候丢弃的数据,反解析时岂不是可能无法得到正确的值?
逍遥小子 发表于 3 年前
引用:JackJiang 发表于 2021-07-07 18:34
id用数字只能说比较大小更直接,字符串还不是一样可以有顺序,只是不直观而已,就看你要怎么用了

好的谢谢楼主
JackJiang 发表于 3 年前
引用:逍遥小子 发表于 2021-07-07 18:09
楼主好,请问下,消息ID一般服务端有用作消息顺序性排序,如果是字符串,应该比较不了大小把

id用数字只能说比较大小更直接,字符串还不是一样可以有顺序,只是不直观而已,就看你要怎么用了
逍遥小子 发表于 3 年前
楼主好,请问下,消息ID一般服务端有用作消息顺序性排序,如果是字符串,应该比较不了大小把
JackJiang 发表于 3 年前
引用:461611894 发表于 2021-04-15 12:46
请问集群环境下,服务器时钟不一致,会不会导致时间戳不一样造成消息乱序?

是的,所以不能全依赖服务器时间来排序

评分

1

查看评分

461611894 发表于 3 年前
引用:JackJiang 发表于 2020-01-18 20:25
你说的理论上确实存在这种可能性,但现实来说几率小到可以忽略,当然程序员都是这种思维。
不过,记住做 ...

请问集群环境下,服务器时钟不一致,会不会导致时间戳不一样造成消息乱序?
JackJiang 发表于 4 年前
引用:王卿 发表于 2020-01-18 18:22
设计很精巧,但有个疑问:集群环境下,假设同一会话的两个不同成员登录在不同主机,两人恰好同时发消息,此 ...

你说的理论上确实存在这种可能性,但现实来说几率小到可以忽略,当然程序员都是这种思维。
不过,记住做im不是做支付这类金融系统,数据可以允许万有一失(腾讯就是一直用这个原则设计qq的),聊天消息相当于自然语言,是有上下文关系的,系统做为容错机制扔掉一条冲突的消息,完全可以理解,也不会出现什么大不了的事。
dangyuan 发表于 5 年前
消息 id 客户端来生成可以吗?
JackJiang 发表于 5 年前
引用:高双文 发表于 2019-11-19 10:44
我有一个不明白的地方,就是会话id如果hash
冲突了,那不就表明不能通过会话类型和会话id唯一确定了啊

会话id不需要hash啊,会话id(比如群id号)可以用唯一主键的方式生成,没有什么问题
高双文 发表于 5 年前
我有一个不明白的地方,就是会话id如果hash
冲突了,那不就表明不能通过会话类型和会话id唯一确定了啊

返回顶部