乐趣区

关于即时通讯:阿里IM技术分享六闲鱼亿级IM消息系统的离线推送到达率优化

本文由阿里闲鱼技术团队逸昂分享,原题“音讯链路优化之弱感知链路优化”,有订正和改变,感激作者的分享。

1、引言

闲鱼的 IM 音讯零碎作为买家与卖家的沟通工具,增进了解、促成信赖,对闲鱼的商品成交有重要的价值,是晋升用户体验最要害的环节。

然而,随着业务体量的快速增长,以后这套音讯零碎正面临着诸多急待解决的问题。

以下几个问题典型最为典型:

1)在线音讯的体验晋升;
2)离线推送的达到率;
3)音讯玩法与音讯底层零碎的耦合过强。

通过评估,咱们认为现阶段离线推送的达到率问题最为要害,对用户体验影响较大。

本文将要分享的是闲鱼 IM 音讯在解决离线推送的达到率方面的技术实际,内容包含问题剖析和技术优化思路等,心愿能带给你启发。

学习交换:

  • 即时通讯 / 推送技术开发交换 5 群:215477170 [举荐]
  • 挪动端 IM 开发入门文章:《新手入门一篇就够:从零开发挪动端 IM》
  • 开源 IM 框架源码:https://github.com/JackJiang2…

(本文已同步公布于:http://www.52im.net/thread-37…)

2、系列文章

本文是系列文章的第 6 篇,总目录如下:

《阿里 IM 技术分享(一):企业级 IM 王者——钉钉在后端架构上的过人之处》
《阿里 IM 技术分享(二):闲鱼 IM 基于 Flutter 的挪动端跨端革新实际》
《阿里 IM 技术分享(三):闲鱼亿级 IM 音讯零碎的架构演进之路》
《阿里 IM 技术分享(四):闲鱼亿级 IM 音讯零碎的牢靠投递优化实际》
《阿里 IM 技术分享(五):闲鱼亿级 IM 音讯零碎的及时性优化实际》
《阿里 IM 技术分享(六):闲鱼亿级 IM 音讯零碎的离线推送达到率优化》(* 本文)

3、通信链路类型的划分

从数据通信链接的技术角度,咱们依据闲鱼客户端是否在线,将整体音讯链路大抵分为强感知链路和弱感知链路。

强感知链路由以下子系统或模块:

1)发送方客户端;
2)idleapi-message(闲鱼的音讯网关);
3)heracles(闲鱼的音讯底层服务);
4)accs(阿里自研的长连贯通道);
5)接管方客户端组成。

整条链路的外围指标在于端到端提早和音讯达到率。

强感知链路中的单方都是在线的,音讯达到客户端就能够保障接管方感知到。强感知链路的次要痛点在音讯的端到端提早。

弱感知链路与强感知链路的次要不同在于:弱感知链路的接管方是离线的,须要依赖离线推送这样的形式送达。

因而弱感知链路的用户感知度不强,其外围指标在于音讯的达到率,而非提早。

所以以后阶段,优化弱感知链路的重点也就是晋升离线音讯的达到率。换句话说,晋升离线音讯达到率问题,也就是优化弱感知链路自身。

4、音讯零碎架构概览

下图一张整个 IM 音讯零碎的架构图,感触下整体链路:

如上图所示,各次要组件和子系统分工如下:

1)HSF 是一个近程服务框架,是 dubbo 的外部版本;
2)tair 是阿里自研的分布式缓存框架,反对 memcached、Redis、LevelDB 等不同存储引擎;
3)agoo 是阿里的离线推送中台,负责整合不同厂商的离线推送通道,向团体用户提供一个对立的离线推送服务;
4)accs 是阿里自研的长连贯通道,为客户端、服务端的实时双向交互提供便当;
5)lindorm 是阿里自研的 NoSQL 产品,与 HBase 有殊途同归之妙;
6)域环是闲鱼音讯优化性能的外围构造,用来存储用户最新的若干条音讯。

强感知链路和弱感知链路在通道抉择上是不同的:

1)强感知链路应用 accs 这个在线通道;
2)弱感知链路应用 agoo 这个离线通道。
5、弱感知链路到底怎么定义

艰深了说,弱感知链路指的就是离线音讯推送零碎。

相比拟于在线音讯和端内推送(也就是下面说的强感知链路),离线推送难以确保被用户感知到。

典型的状况包含:

1)未发送到用户设施:即推送未送达用户设施,这种状况能够从通道的返回剖析;
2)发送到用户设施但没有展现到零碎告诉栏:闲鱼曾遇到通道返回胜利,然而用户未看到推送的案例;
3)展现到告诉栏,并被零碎折叠:不同安卓厂商对推送的折叠策略不同,被折叠后,需用户被动开展能力看到内容,触达成果显著变差;
4)展现到告诉栏,并被用户疏忽:离线推送的点击率相比于在线推送更低。

针对“1)未发送到用户设施”,起因有:

1)离线通道的 token 生效;
2)参数谬误;
3)用户敞开利用告诉;
4)用户已卸载等。

针对“3)展现到告诉栏,并被零碎折叠”,起因有:

1)告诉的点击率;
2)利用在厂商处的权重;
3)推送的数量等。

针对“4)展现到告诉栏,并被用户疏忽”,起因有:

1)用户不违心查看推送;
2)用户看到了推送,然而对内容不感兴趣;
3)用户在忙别的事,得空解决。

总之:以上这些离线音讯推送场景,对于用户来说感知度不高,咱们也便称之为弱感知链路。

6、弱感知链路的逻辑形成

咱们的弱感知链路分为 3 局部,即:

1)零碎;
2)通道;
3)用户。

共蕴含了 Hermes、agoo、厂商、设施、用户、承接页这几个环节。具体如下图所示。

从推送的产生到用户最终进入 APP,共分为如下几个步骤:

步骤 1:Hermes 是闲鱼的用户触达零碎,负责人群治理、内容治理、机会把控,是整个弱感知链路的终点。;
步骤 2:agoo 是阿里外部承接离线推送的中台,是闲鱼离线推送能力的根底;
步骤 3:agoo 实现离线推送依附的是厂商的推送通道(如:苹果的 apns 通道、Google 的 fcm 通道、及国内各厂商的自建通道。;
步骤 4:通过厂商的通道,推送最终呈现在用户的设施上,这是用户能感知到推送的前提条件;
步骤 5:如果用户刚巧看到这条推送,推送的内容也很乏味,在用户的被动点击下会唤起 APP,关上承接页,进而给用户展现个性化的商品。

通过以上 5 个步骤,至此弱感知链路就实现了使命。

7、弱感知链路面临的具体问题

弱感知链路的外围问题在于:

1)推送的音讯是否投递给了用户;
2)已投递到的音讯用户是否有感知。

这对应推送的两个阶段:

1)推送音讯是否已达到设施;
2)用户是否查看推送并点击。

其中:达到设施这个阶段是最根底的,也是本次优化的外围。

咱们能够将每一步的音讯处理量顺次平铺,开展为一张漏斗图,从而直观的查看链路的瓶颈。

漏斗图斜率最大的中央是优化的重点,差别小的中央不须要优化:

通过剖析以上漏斗图,弱感知链路的优化重点在三个方面:

1)agoo 受理率:是指咱们发送推送请到的数量到能够通过 agoo(阿里承接离线推送的中台)转发到厂商通道的数量之间的漏斗;
2)厂商受理率:是指 agoo 中台受理的量到厂商返回胜利的量之间的漏斗;
3)Push 点击率:也就通过以上通道最终已送到到用户终端的音讯,是否最终转化为用户的被动“点击”。

有了优化方向,咱们来看看优化伎俩吧。

8、咱们的技术优化伎俩

追随推送的视角,顺着链路看一下咱们是如何进行优化的。

8.1 agoo 受理率优化
用户的推送,从 Hermes 站点搭乘“班车”,驶向下一站:agoo。

这是推送经验的第一站。到站一看,傻眼了,只有不到一半的推送到站下车了。这是咋回事嘞?

这就要先说说 agoo 了,调用 agoo 有两种形式:

1)指定设施和客户端,agoo 间接将推送投递到相应的设施;
2)指定用户和客户端,agoo 依据外部的转换表,找到用户对应的设施,再进行投递。

咱们的零碎不保留用户的设施信息。因而,是依照用户来调用 agoo 的。

同时:因为没有用户的设施信息,并不知道用户是 iOS 客户端还是 Android 客户端。工程侧不得不向 iOS 和 Android 都发送一遍推送。尽管保障了达到,然而,一半的调用都是有效的。

为理解这个问题:咱们应用了 agoo 的设施信息。将用户转换设施这一阶段提前到了调用 agoo 之前,先明确用户对应的设施,再指定设施调用 agoo,从而防止有效调用。

agoo 调用形式优化后,立即剔除了有效调用,agoo 受理率有了显著晋升。

至此:咱们总算能对 agoo 受理失败的真正起因做一个高大上的剖析了。

依据统计:推送被 agoo 回绝的次要起因是——用户敞开了告诉权限。同时,咱们对 agoo 调用数据的进一步剖析发现——有局部用户找不到对应的设施。优化到此,咱们猛然发现多了两个问题。

那就持续优化呗:

1)告诉体验优化,疏导关上告诉权限;
2)与 agoo 共建设施库,解决设施转换失败的问题。

这两个优化方向又是一片新天地,咱们择日再聊。

8.2 厂商推送通道受理率优化
推送达到 agoo,分机型搭乘厂商“专列”,驶向下一站:用户设施。

这是推送经验的第二站。出站查票,发现居然超员了。

于是乎:咱们每天有大量推送因为超过厂商设定的限额被拦挡。

为什么会这样呢?

实际上:提供推送通道的厂商(没错,各手机厂商的自家推送通道参差不齐),为了保障用户体验,会对每个利用可能推送的音讯总量进行限度。

对于厂商而言,这个限度会依据推送的类型和利用的用户规模设定——推送次要分为产品类的推送和营销类的推送。

厂商推送通道对于不同类型音讯的限度是:

1)对于产品类推送,厂商会保障达到;
2)对于营销类推送,厂商会进行额度限度;
3)未标记的推送,默认作为营销类推送看待。

咱们刚好没有对推送进行标记,因而触发了厂商的推送限度。

这对咱们的用户来说,会带来困扰。闲鱼的交易,很依赖交易家之间的音讯互动。这部分音讯是须要确保达到的。

同样:订单类的音讯、用户的关注,也须要保障推送给用户。

依据支流厂商的接口协议,咱们将推送的音讯分为以下几类,并进行相应标记:

1)即时通讯音讯;
2)订单状态变动;
3)用户关注内容;
4)营销音讯这几类。

同时,在业务上,咱们也进行了推送的治理——将用户关注度不高的音讯,勾销推送,防止打搅。

通过这些优化,因为超过厂商限额而被拦挡的推送实现了清零。

8.3 Push 点击率优化
通过优化 agoo 受理率、厂商受理率,咱们解决了推送达到量的瓶颈。但即便音讯被最终送达,用户到底点击了没有?这才是音讯推送的基本意义所在。

于是,在日常的开发测试过程中,咱们发现了推送的两个体验问题:

1)用户点击 Push 有开屏广告;
2)营销 Push 也有权限校验,更换用户登陆后无奈点击。

对于开屏广告性能,咱们减少了 Push 点击跳过广告的能力。

针对 Push 的权限校验性能,闲鱼依据场景做了细分:

1)波及个人隐私的推送,放弃权限校验不变;
2)营销类的推送,放开权限校验。

以上是点击体验的优化,咱们还须要思考用户的点击志愿。

用户点击量与推送的曝光量、推送素材的乏味水平相干。推送的曝光量又和推送的达到量、推送的达到机会无关。

具体的优化伎俩是:

1)在推送内容上:咱们须要优化的是推送的机会和相应的素材;
2)在推送机会上:算法会依据用户的偏好和个性化行为数据,计算每个用户的个性化推送工夫,在用户闲暇的工夫推送(防止在不适合的工夫打搅用户,同时也能晋升用户看到推送的可能性)。
3)在推送素材上:算法会依据素材的实时点击反馈,对素材做实时赛马。只发用户感兴趣的素材,进步用户点击志愿。

9、理论优化成果

通过以上咱们的剖析和技术优化伎俩,整体弱推送链路链路有了不错的晋升,离线音讯的达到率绝对晋升了两位数。

10、写在最初

本篇次要和大家聊的是只是 IM 音讯零碎链路中的一环——弱感知链路的优化,落地到到具体的业务也就是离线音讯送达率问题。

整体 IM 音讯零碎,还是一个比较复杂的畛域。

咱们在音讯零碎的倒退过程中,面临着如下问题:

1)如何进行音讯的链路追踪;
2)如何保障 IM 音讯的疾速达到(见《闲鱼亿级 IM 音讯零碎的及时性优化实际》);
3)如何将音讯的玩法和底层能力拆散;
4)离线推送中如何通过用户找到对应的设施。

这些问题,咱们在以前的文章中有所分享,当前也会陆续分享更多,敬请期待。

附录:相干材料

[1] Android P 正式版行将到来:后盾利用保活、音讯推送的真正噩梦
[2] 一套高可用、易伸缩、高并发的 IM 群聊、单聊架构方案设计实际
[3] 一套亿级用户的 IM 架构技术干货(上篇):整体架构、服务拆分等
[4] 一套亿级用户的 IM 架构技术干货(下篇):可靠性、有序性、弱网优化等
[5] 从老手到专家:如何设计一套亿级音讯量的分布式 IM 零碎
[6] 企业微信的 IM 架构设计揭秘:音讯模型、万人群、已读回执、音讯撤回等
[7] 融云技术分享:全面揭秘亿级 IM 音讯的牢靠投递机制
[8] 挪动端 IM 中大规模群音讯的推送如何保障效率、实时性?
[9] 古代 IM 零碎中聊天音讯的同步和存储计划探讨
[10] 新手入门一篇就够:从零开发挪动端 IM
[11] 挪动端 IM 开发者必读(一):通俗易懂,了解挪动网络的“弱”和“慢”
[12] 挪动端 IM 开发者必读(二):史上最全挪动弱网络优化办法总结
[13] IM 音讯送达保障机制实现(一):保障在线实时音讯的牢靠投递
[14] IM 音讯送达保障机制实现(二):保障离线音讯的牢靠投递
[15] 零根底 IM 开发入门(一):什么是 IM 零碎?
[16] 零根底 IM 开发入门(二):什么是 IM 零碎的实时性?
[17] 零根底 IM 开发入门(三):什么是 IM 零碎的可靠性?
[18] 零根底 IM 开发入门(四):什么是 IM 零碎的音讯时序一致性?

本文已同步公布于“即时通讯技术圈”公众号。
同步公布链接是:http://www.52im.net/thread-37…

退出移动版