即时消息技术剖析与实战
袁武林
微博研发中心技术专家
24187 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 25 讲
即时消息技术剖析与实战
15
15
1.0x
00:00/00:00
登录|注册

22 | 答疑解惑:不同即时消息场景下架构实现上的异同

第五问:群聊和直播互动消息下推的区别
第四问:离线消息下推的优化
第三问:应用层ACK的必要性
第二问:长连接消息推送的实现
第一问:消息的服务端存储和本地存储
答疑解惑:不同即时消息场景下架构实现上的异同

该思维导图由 AI 生成,仅供参考

你好,我是袁武林。
随着专栏最后一个进阶篇模块的更新后,咱们的即时消息专栏课程,到这里就要告一段落了。首先,感谢你在这段时间里对专栏的持续关注,也非常高兴看到你一直在积极地思考和学习。
在专栏的讨论区,同学们也都十分活跃,都在热情地留言和互动讨论,留下了很多比较典型和有意义的问题。
有一些问题可能限于篇幅的原因,我没有详细展开,那么今天,我就摘录出比较有代表性的 5 个问题,来做一下集中的整理和回复。也希望通过这种方式,能够帮助你对这些知识点有更清晰的理解和认识。

第一问:消息的服务端存储和本地存储

第 1 讲“架构与特性:一个完整的 IM 系统是怎样的?”中,有很多同学都问到了这个问题:即时消息系统实现中,消息一定需要在服务端的存储服务里进行存储吗?
首先呢,关于服务端存储的问题,我们需要更多地考虑存储成本和数据安全。
一方面,如果消息不在服务端存储,服务器只是作为消息的中转路由服务,那么,相应的消息存储成本就会低很多,在数据安全性方面也更好一些。
另外,这个问题也和产品定位有关。
比如,如果你的产品定位上不需要支持消息多终端同步(比如微信),那么像核心的消息等这些数据,就可以不在服务端进行存储。不过,用户的好友关系等数据信息还是需要存储在服务端的。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

即时消息系统的架构实现在不同场景下存在一些异同。首先,需要考虑消息存储在服务端还是本地存储的成本、数据安全和产品定位等因素。其次,长连接消息推送的实现需要用户上线操作,服务端维护用户与连接的映射,并在用户断连下线时删除映射。此外,业务层ACK机制在连接异常断开等场景下能够保证消息收发的可靠性。对于离线消息下推的优化,可以采用批量打包+压缩、推拉结合等方式,并考虑离线消息存储成本的问题。在群聊和直播互动消息下推的区别方面,直播场景下消息的扇出可以推迟到网关机层,而群聊场景中需要在业务层扇出后再提交到网关机进行处理。总的来说,即时消息技术是众多前后端技术的紧密结合,涉及的知识面广泛,随着业务形态的变化和升级,相应的架构设计和技术侧重点也各有异同。因此,需要从问题和业务形态的本质出发,经过不断地思考和实践,才能找到最适合自身业务的架构和方案。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《即时消息技术剖析与实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(6)

  • 最新
  • 精选
  • mgxian
    老师我有一个问题,这个用户--> 连接的映射是如何存储在中央资源里的,对于像 java 这样的语言,其实这个所谓的连接其实是一个 java 对象,对于更底层的实现,这个连接其实就是一个表示文件描述符的数字而已,而这个数字不同的网关机肯定会重复的,所以我想问一下,这个用户到连接的映射到到底是怎么存储在中央资源里的。对象或者一个可能会重复的数字,存储起来也没有意义吧。是不是用户到连接的映射实际上只存储在网关机的内存里,中央资源里存储的只是某个用户在哪个网关机的映射,找到网关机后直接发消息给那台网关机,由那台网关机在自己的内存中查找到用户到连接的映射,然后发送消息?

    作者回复: 是的,用户上线的时候把用户和连接的网关ip作为映射存在中央存储,同时网关机本机内存也存储一个uid到连接的映射(这个映射可以直接把连接这个对象放在Map里),然后消息推送时读取中央全局的映射,查询待推送消息的接收人所在的网关机,再通过rpc方式把这条消息发给这台网关机就可以了。

    2019-10-16
    9
  • 小可
    直播房间和群聊消息扇出这个问题特别好,两者确实有区别,老师的解答也很清楚😁

    作者回复: 谢谢支持😁

    2019-10-18
    3
  • mong
    老师你好,有一个问题,想和你交流一下,关于离线群消息的存储的问题,我想问一下,离线的群消息你们是为群里的每个人都存储他的离线消息,还是消息只是存储一份;,如果选择存储一份(大家进行共用),你是如何他们在拉离线消息的时候,进行标记哪个用户拉取到群的离线消息的哪一条了?

    作者回复: 一般会每个用户存储一份,不过只会存储消息id,内容真正下推前再获取。

    2019-10-17
    2
  • 老师,websocket网关和im服务能否用dubbo通信?或者老师对他们之间的rpc通信有什么好的建议

    作者回复: dubbo没问题的,成熟的rpc框架都可以,微博开源的motan也非常好,可以了解一下

    2019-10-19
  • 谢谢老师,以后有问题了,还可以和你讨论吗?

    作者回复: 没问题的呀,随时欢迎大家来交流讨论。

    2019-10-17
  • 最初的爱恋
    老师 我有个问题 我想问一下 我最近在做自营客服系统研发 我现在打通两个端 可以进行聊天 那么他们的聊天数据 应该是存缓存还是数据库了? 还有回撤操作 回撤操作我之前的想法是做假删除 然后通知另外一端 对关键字回复 针对种 我的想法 用户发送消息 拿到字体去匹配关键字吗 如果有则直接回复?
    2022-11-09归属地:广东
收起评论
显示
设置
留言
6
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部