22 | 答疑解惑:不同即时消息场景下架构实现上的异同
袁武林
该思维导图由 AI 生成,仅供参考
你好,我是袁武林。
随着专栏最后一个进阶篇模块的更新后,咱们的即时消息专栏课程,到这里就要告一段落了。首先,感谢你在这段时间里对专栏的持续关注,也非常高兴看到你一直在积极地思考和学习。
在专栏的讨论区,同学们也都十分活跃,都在热情地留言和互动讨论,留下了很多比较典型和有意义的问题。
有一些问题可能限于篇幅的原因,我没有详细展开,那么今天,我就摘录出比较有代表性的 5 个问题,来做一下集中的整理和回复。也希望通过这种方式,能够帮助你对这些知识点有更清晰的理解和认识。
第一问:消息的服务端存储和本地存储
首先呢,关于服务端存储的问题,我们需要更多地考虑存储成本和数据安全。
一方面,如果消息不在服务端存储,服务器只是作为消息的中转路由服务,那么,相应的消息存储成本就会低很多,在数据安全性方面也更好一些。
另外,这个问题也和产品定位有关。
比如,如果你的产品定位上不需要支持消息多终端同步(比如微信),那么像核心的消息等这些数据,就可以不在服务端进行存储。不过,用户的好友关系等数据信息还是需要存储在服务端的。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
即时消息系统的架构实现在不同场景下存在一些异同。首先,需要考虑消息存储在服务端还是本地存储的成本、数据安全和产品定位等因素。其次,长连接消息推送的实现需要用户上线操作,服务端维护用户与连接的映射,并在用户断连下线时删除映射。此外,业务层ACK机制在连接异常断开等场景下能够保证消息收发的可靠性。对于离线消息下推的优化,可以采用批量打包+压缩、推拉结合等方式,并考虑离线消息存储成本的问题。在群聊和直播互动消息下推的区别方面,直播场景下消息的扇出可以推迟到网关机层,而群聊场景中需要在业务层扇出后再提交到网关机进行处理。总的来说,即时消息技术是众多前后端技术的紧密结合,涉及的知识面广泛,随着业务形态的变化和升级,相应的架构设计和技术侧重点也各有异同。因此,需要从问题和业务形态的本质出发,经过不断地思考和实践,才能找到最适合自身业务的架构和方案。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《即时消息技术剖析与实战》,新⼈⾸单¥59
《即时消息技术剖析与实战》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(6)
- 最新
- 精选
- mgxian老师我有一个问题,这个用户--> 连接的映射是如何存储在中央资源里的,对于像 java 这样的语言,其实这个所谓的连接其实是一个 java 对象,对于更底层的实现,这个连接其实就是一个表示文件描述符的数字而已,而这个数字不同的网关机肯定会重复的,所以我想问一下,这个用户到连接的映射到到底是怎么存储在中央资源里的。对象或者一个可能会重复的数字,存储起来也没有意义吧。是不是用户到连接的映射实际上只存储在网关机的内存里,中央资源里存储的只是某个用户在哪个网关机的映射,找到网关机后直接发消息给那台网关机,由那台网关机在自己的内存中查找到用户到连接的映射,然后发送消息?
作者回复: 是的,用户上线的时候把用户和连接的网关ip作为映射存在中央存储,同时网关机本机内存也存储一个uid到连接的映射(这个映射可以直接把连接这个对象放在Map里),然后消息推送时读取中央全局的映射,查询待推送消息的接收人所在的网关机,再通过rpc方式把这条消息发给这台网关机就可以了。
2019-10-169 - 小可直播房间和群聊消息扇出这个问题特别好,两者确实有区别,老师的解答也很清楚😁
作者回复: 谢谢支持😁
2019-10-183 - mong老师你好,有一个问题,想和你交流一下,关于离线群消息的存储的问题,我想问一下,离线的群消息你们是为群里的每个人都存储他的离线消息,还是消息只是存储一份;,如果选择存储一份(大家进行共用),你是如何他们在拉离线消息的时候,进行标记哪个用户拉取到群的离线消息的哪一条了?
作者回复: 一般会每个用户存储一份,不过只会存储消息id,内容真正下推前再获取。
2019-10-172 - 煜老师,websocket网关和im服务能否用dubbo通信?或者老师对他们之间的rpc通信有什么好的建议
作者回复: dubbo没问题的,成熟的rpc框架都可以,微博开源的motan也非常好,可以了解一下
2019-10-19 - 忘谢谢老师,以后有问题了,还可以和你讨论吗?
作者回复: 没问题的呀,随时欢迎大家来交流讨论。
2019-10-17 - 最初的爱恋老师 我有个问题 我想问一下 我最近在做自营客服系统研发 我现在打通两个端 可以进行聊天 那么他们的聊天数据 应该是存缓存还是数据库了? 还有回撤操作 回撤操作我之前的想法是做假删除 然后通知另外一端 对关键字回复 针对种 我的想法 用户发送消息 拿到字体去匹配关键字吗 如果有则直接回复?2022-11-09归属地:广东
收起评论