构建可扩展实时消息平台:去重与可靠性策略

需积分: 19 18 下载量 131 浏览量 更新于2024-08-09 收藏 794KB PDF 举报
"58到家的实时消息平台设计与实践" 在构建实时消息系统时,面临的主要问题包括端到云的实时数据上报、云到端的即时推送以及端到端的聊天通信需求。58到家的实时消息平台旨在解决这些问题,并确保系统的通用性和业务线的解耦。 传统解决方案常常存在不足。对于端到云的实时上报,如58速运司机端的GPS位置更新,通常采用HTTP轮询方式,但这会导致HTTP短连接的问题,增加web-server的并发压力。云到端的实时推送(如订单通知)和端到端的聊天消息,传统上可能依赖于APNs(Apple Push Notification Service)和mqtt协议,但APNs可能在可达性、实时性和速度方面受限,而mqtt的可用性也有待提高。 为了克服这些局限,58到家的可扩展实时消息平台进行了多方面的优化。首先,通过分析业务并抽象出“在线业务”概念,建立TCP长连接消息通道,提高了数据上报的效率。然而,这在多APP多业务后端场景下可能导致扩展性差和耦合严重,于是引入消息总线来解耦业务后端,实现“端到云”的实时上报。 对于“云到端”的消息推送,平台提供了RPC接口,使得推送更加便捷。然而,考虑到用户可能不在线导致消息无法送达,平台引入了缓存来存储用户在线状态,确保即使用户离线也能在上线后接收到消息。此外,为防止消息丢失,消息先被持久化存储,接收方确认接收后(通过ACK)再从服务器删除,同时发送方还具备消息重发机制以防未收到服务器确认。 在处理端到端的消息推送时,如果接收方不在线,系统会保存离线消息,确保在接收方上线时能够接收到完整的消息流。为了进一步保证消息的可靠性,系统执行严格的发送流程,当未收到服务器确认时,发送方会进行消息重发,以最大程度地降低消息丢失的风险。 58到家的实时消息平台通过优化TCP连接、引入消息总线、缓存机制、离线消息存储以及消息确认和重发策略,成功地构建了一个高性能、高可用且可扩展的实时消息系统,满足了各类实时通信需求,同时降低了业务线之间的耦合。