主要观点总结
本文主要讨论了架构设计中的离线消息可靠投递问题,以微信为例,介绍了离线消息存储、拉取、优化及可靠投递的关键技术。
关键观点总结
关键观点1: 离线消息存储流程
介绍了A给B发送离线消息时,服务器如何查看用户状态、存储消息到数据库并避免A重发特殊标识的流程。
关键观点2: 离线消息表设计
描述了离线消息表的关键属性,如接收方、消息ID、发送时间等。
关键观点3: 离线消息的拉取与删除流程
详细解释了用户B登录后如何从数据库拉取、删除离线消息并返回给用户B的流程。
关键观点4: 优化拉取策略
介绍了按需拉取、一次性拉取、分页拉取等优化方法以减少服务器交互次数和流量。
关键观点5: 离线消息的可靠投递技术
讲解了应用层的ACK机制、去重以及下一页拉取作为上一页ACK的技术,确保离线消息不丢不重。
文章预览
《架构师之路:架构设计中的100个知识点》 54.离线消息可靠投递 《 微信:我们绝不丢消息! 》提到, 单人实时聊天 消息的可靠投递, 是 通过 应用层的超时、重传、确认、去重来保证的。 那如果没有打开手机,没有登录微信,好友发给我的微信消息,有没有可能丢失呢? 今天和大家聊聊 离线消息 的话题。 没有做过IM业务的架构师可能会说,离线消息存储数据库不就行了吗?可事实上,远比你想的复杂。 接收方不在线,消息发送流程是怎么样的? 如上图所述,A给B发了一条消息,而B不在线, 离线消息存储 的流程如下: 1. A发送消息给B,通过server中转; 2. server查看用户B的状态为offline; 3. server将消息存储到DB中; 4. server返回用户A发送成功, 并带上特殊标识,避免A重发 ; 离线消息表如何设计? 很容易想到,消息业务有这样的一些 关键属性
………………………………