默认
发表评论 4
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
IM中群聊写扩散如何保证写用户timeline的顺序性?
阅读(27652) | 评论(4 收藏 淘帖
xdm, 写扩散用户的接收timeline是不是也只能单条消息顺序保存呢?

比如: 消息1和消息2同时需要写到用户A的timeline中,

如果是并发的写, 我消息1拿到一个seqNo=1, 消息2拿到一个seqNo=2, 就可能出现消息2写完消息都发给用户了, 消息1还没写完.. 这样前端拉取seqNo不连续的消息就会导致消息丢失

但顺序写timeline的话, 比如我用消息队列的单个partition有序的特点来实现有序性, 那这样在群聊场景, 群里N个人, 消息写到存储库后, 需要再写到群用户的timeline中, 这时候我不能批量写这些用户的timeline, 得发N条mq消息出去, 然后再顺序的单独为每个用户写timeline, 这样成本看起来非常高.

大家的方案是咋样的呢, 有什么最佳实践吗?

2022/7/6 update:

最终还是采用了先写msg表, 再按用户为key发到kafka的partition来顺序写入到用户的timeline里, partition针对key是有序的


即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

标签:求助 IM开发
上一篇:求教基于websocket写的im中,心跳该谁发ping(客户端还是服务端?)下一篇:类似于discord之类的超大im群组,是如何实现的呢?
推荐方案
评论 4
其实有个分布式的Actor算法比较成熟,实现Acotr算法的Java方案有个叫Akka的框架,你也了解学习一下
引用:JackJiang 发表于 2022-03-11 22:22
其实有个分布式的Actor算法比较成熟,实现Acotr算法的Java方案有个叫Akka的框架,你也了解学习一下

我不会akka, 但我熟悉go的csp模型. 看起来好像都差不多, 本质上都是一个线程安全的队列. 然后由消费者消费.

这样说的话还是需要每个用户的写timeline的过程是顺序的吗站长? 不能直接写消息存储的时候批量写timeline了..
引用:Sudo 发表于 2022-03-12 11:29
我不会akka, 但我熟悉go的csp模型. 看起来好像都差不多, 本质上都是一个线程安全的队列. 然后由消费者 ...

在权衡性能的前提下,还能保证顺序那是很好的
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部