背景
闲鱼的消息系统作为沟通买家与卖家的工具,增进理解、促进信任,对闲鱼的商品成交有重要的价值,是提升用户体验最关键的环节。
闲鱼消息系统面临的问题包括:在线消息的体验提升、离线推送的到达率问题、消息玩法与消息底层系统的耦合过强。
现阶段离线推送的问题最为关键,对用户体验影响较大,本文优先解决离线推送的到达问题。
消息系统现状
强感知链路与弱感知链路
根据闲鱼客户端是否在线,闲鱼的整体消息链路大致可以分为强感知链路和弱感知链路。
强感知链路由发送方客户端、idleapi-message(闲鱼的消息网关)、heracles(闲鱼的消息底层服务)、accs(阿里自研的长连接通道)、接收方客户端组成。整条链路的核心指标在于端到端延迟和消息到达率。强感知链路的双方都是在线的,消息到达客户端就可以保证接收方感知到。强感知链路的主要痛点在消息的端到端延迟。
弱感知链路与强感知链路的主要不同在于:弱感知链路的接收方是离线的,需要依赖离线推送这样的方式送达。因此弱感知链路的用户感知度不强。其核心指标在于消息的到达率,而非延迟。当前弱感知链路的主要的问题是到达率不高。
闲鱼消息架构
这里放一张闲鱼消息系统的架构图,大家感受下整体链路:
HSF是一个远程服务框架,是dubbo的内部版本。tair是阿里自研的分布式缓存框架,支持 memcached、Redis、LevelDB 等不同存储引擎。agoo是阿里的离线推送中台,负责整合不同厂商的离线推送通道,向集团用户提供一个统一的离线推送服务。accs是阿里自研的长连接通道,为客户端、服务端的实时双向交互提供便利。lindorm是阿里自研的NoSQL产品,与HBase有异曲同工之妙。域环是闲鱼消息优化性能的核心结构,用来存储用户最新的128条消息。
强感知链路和弱感知链路在通道选择上是不同的。强感知链路使用accs这个在线通道。弱感知链路使用a