36

闲鱼消息推送底层的二三事...

 4 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzU4MDUxOTI5NA%3D%3D&%3Bmid=2247485193&%3Bidx=1&%3Bsn=1497038f37b077d8bfc4ba1120c0198a
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

问题描述

闲鱼是二手商品交易平台,当买家支付下单时,平台通过推送消息通知卖家;当卖家发货后,买家也会收到商品已发货推送消息。闲鱼的商品交易构建在消息会话之上,另外也需要消息推送让用户及时掌握二手商品交易动态和优惠活动信息。

消息推送与用户体验息息相关,实时精准的消息推送有助于提升用户体验,为此我们专门针对闲鱼消息系统各个链路进行分析和优化,并取得了一定成果。接下来我们将通过技术视角介绍闲鱼消息系统现状、面临问题和优化方案,以期让读者了解消息系统设计理念和优化方向。

闲鱼消息推送现状

消息推送是移动互联网的基础设施,阿里内部也有很多消息推送平台,从系统分层上分为两种,第一种是与业务无关的建设消息推送底层能力的基础平台,负责对接操作系统的系统消息通道和各手机厂商的厂商消息通道,屏蔽各种通道差异,对外提供统一消息推送规范和能力;第二种是基于底层消息推送能力,与业务特点相结合后抽象设计的消息推送中台,闲鱼消息推送系统就属于第二种。

rAB3aqB.png!web

问题抽象

那么大家可能会对闲鱼消息推送系统存在的必要性存疑,比如为什么不复用手淘消息推送的架构和能力。实际上闲鱼消息推送系统有存在的必要性,这也是由闲鱼业务特点决定的。因为手淘消息会话模型是基于人与人的,两个人之间只会存在一个消息会话;而闲鱼的商品交易流转依赖消息触发,闲鱼消息会话模型是在人与人基础之上挂载商品,所以两个人之间可以存在多个消息会话。基础业务模型的差异导致上层消息推送系统有比较大的差异。

3aYbMrj.png!web

闲鱼消息推送系统已经在线上稳定运行了很久,现有消息模型和系统性能基本满足业务需求。但随着闲鱼体量的增加,对消息推送整体的可靠性和性能提出更高要求,我们基于用户反馈对闲鱼消息推送系统的整体数据和架构进行review,发现一些影响用户体验需要优化的问题:

  • 调用底层消息推送平台的消息受理率比较低;

  • 通过系统通道和厂商通道的消息到达率和头部App相比有一定差距;

  • 云端之间缺少全链路采集和排查能力;

前两个问题导致用户经常反馈收不到别人发的聊天消息,重要通知没有推送;最后一个问题导致消息推送逻辑偏向黑盒,对于用户问题排查和研发效率都造成了阻碍。

基础依赖

消息消息推送系统底层依赖ACCS和Agoo平台。ACCS和Agoo是阿里建设的底层消息推送平台,支撑了很多亿级设备应用的消息推送。

ACCS是阿里无线向开发者提供全双工、低延时、高安全的通道服务,同时具备实时推送消息能力。ACCS是实时性更强的双向通道,支持业务上和用户产生实时的交互,展开各种形式的互动。

Agoo是一个消息推送平台,基于客户端与服务端建立的长连接ACCS通道,可实时推送消息到用户端,是阿里无线端最基本的工具组件之一。

VzMVFfR.png!web当用户打开闲鱼App后,客户端会调用Agoo SDK将登录用户与当前设备信息进行绑定,方便后续基于用户做消息推送。

eIb63qQ.png!web当闲鱼给用户发Push时,调用Agoo服务端SDK,入参为用户信息和推送内容。Agoo服务端会根据用户ID查询用户最近绑定设备,根据设备是否在线选择通过ACCS通道还是厂商通道推送消息。

优化方案

通过前面的章节可以看到从服务端开始推送消息,到用户在客户端上收到推送通知,中间环节和漏斗都比较长。之前提到的问题反映到数据漏斗上就是:

  • 因为Agoo的查询策略导致用户绑定设备和基于用户查最近登录设备漏斗比较大;

  • Android厂商对消息推送有不同的限制,包括每天推送量级和通知展示样式折叠;

我们的优化方案是在业务侧维护闲鱼用户设备库,包括在线实时和离线全量两种方式,在查询用户设备时,以在线实时数据为主,离线全量数据补全为辅,提高用户查询设备的成功率和精准率;另外端上也针对性升级Agoo SDK,提升设备上报实时性和准确率。

EjANvyu.png!web

对于云端之间缺少全链路数据采集和问题排查能力的问题,我们参考traceId的设计理念,为每个消息生成唯一的messageId,作为服务端和客户端查询消息的唯一标示,通过messageId把云端的消息排查链路串联;另外在消息推送核心流程的关键节点和异常节点进行埋点,将黑盒的核心流程白盒化,监控消息推送系统的大盘情况,提升消息问题排查效率。

mAJJfyY.png!web

总结

在消息推送优化方案上线后,消息侧用户体验提升,效果达到业务预期。效果如下:

  • 消息受理率相对提升达到两位数

  • 消息受理设备UV绝对值提升达到预期

  • 消息问题排查时间减少三分之一

从云到端上整体的消息推送解决方案是一套完整的技术方案,整体链路比较长,所以针对性的优化也是一个长期过程,目前我们正在针对提升消息到达率与各大Android厂商做优化对接,丰富推送样式,另外我们也在对消息的领域模型进行重构,给上层业务提供更多互动创新玩法,后续也会和大家分享,敬请期待。

闲鱼技术团队不仅是阿里巴巴集团旗下闲置交易社区的创造者,更是移动与高并发大数据应用新技术的引导者与创新者。我们与 Google Flutter/Dart 小组密切合作,为社区贡献了多个高 star 的项目和大量 PR 。我们正在积极探索深度学习和视觉技术在互动、交易、社区场景的创新应用。闲鱼技术与集团中间件团队共同打造的 FaaS 平台每天支持数以千万级用户的高并发访问场景。  

就是现在! 客户端/服务端java/架构/前端/质量 工程师 面向社会+校园招聘,base杭州阿里巴巴西溪园区,一起做有创想空间的社区产品、做深度顶级的开源项目,一起拓展技术边界成就极致!

*投喂简历给小闲鱼→ [email protected]

6VrARnz.jpg!web

ZriEn26.png!web

开源项目、峰会直击、关键洞察、深度解读

请认准 闲鱼技术


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK