APP推送技术目标

目录

推送框架

推送三种方式:

自建和使用第三方推送存在的问题:

解决方法:

推送流程:

重发机制:

消息内容框架

这里讲非IM类,也是为了:

打开率:

到达率

转化率

卸载率

非IM类消息推送:

好处:

坏处:

渠道扩展

高可用、高性能、高稳定性


更多技术交流:https://github.com/singgel

源码地址:https://github.com/singgel/push-service

推送框架

推送三种方式:

轮询方式:流量、耗电量

短信推送方式:Android可以拦截短信的内容,缺点是费用昂贵

长连接方式:目前来说靠心跳包维持,难点在于随着客户端数量和消息并发量上升,对于消息服务器的性能和稳定性有很高的要求

自建和使用第三方推送存在的问题:

    • 应用端与推送端服务强耦合:业务推送一死,整个业务推送不可用
    • 缺乏ACK机制:推送是异步的无法得知是否送达,第三方受其他推送方的影响,可能造成延迟和丢失
    • 服务会被杀死:后台推送service会被各种主动或被动原因kill
    • 缺乏消息的持久化:消息来一条推一条无法追溯历史和状态
    • 缺乏重传机制:推送环节过多,任何环节出问题会造成消息丢失,再无法收到
    • 客户端接入逻辑复杂:没接入一个新的APP都要进行重复工作,代码无法复用
    • 客户端与推送服务的SDK强耦合:但是推送端提供的接口不统一,如果需要替换Client就要重写
    • 缺乏数据监控和统计:每天推送了多少,成功到达了多少,失败了多少

解决方法:

(摘自:https://www.infoq.cn/article/HA-mobile-message-push-platform

分为三层:

接入层:异步方式,提高业务发送速度,具备消息缓冲,保护推送系统

传输层:消息解析----合法性校验----消息转发

应用层:统一SDK

    • 屏蔽推送接口:实现解耦
    • 实现多点接入:同事接入多套推送服务,根据成功率选择最佳的
    • 引入消息持久化机制:方便溯源和统计
    • 引入消息ACK和重传机制:提供消息到达率
    • 实现数据监控和统计机制:提供数据分析统计和报警
    • 提供web管理后台:便于APP设备、推送设置、查看数据报表、提高系统维护工作

推送流程:

1.第三方数据进来:此时消息状态为发送失败,留待重发

2.调用第三方接口:客户端无法收到为发送成功,客户端未收到,需要重发

3.客户端收到,回传ACK:服务端没收到ACK为发送成功,客户端未收到,需要重发

4.消息重发了N次:还是没有收到,告警,手动处理

重发机制:

系统启动时:查询所有发送失败或客户端未收到的消息

系统运行时:后台线程定时查询需要重发的消息

手动触发:直接将消息加入推送队列

由于消息推送中间件服务要求高可用,为分布式部署消息重发必须保证在单一节点执行,且重发一次:

1.zookeeper:通过竞争创建临时节点方式获取锁

2.redis:redlock基于redis实现

3.数据库:MySQL的GET_LOCK函数

APNs这种就不要重发,对于APP在前台长连接的使用重发

APP可以对消息进行去重,对于重复的消息客户端收到则不响应

消息内容框架

(摘自:https://www.jianshu.com/p/194819dfc76e

这里讲非IM类,也是为了:

打开率:

内容:AIDMA模型、强营销类、强关联性、强热点、强话题

时机:早餐(9~10)、午休(12~14)、下班(6~7)、睡前(21~22)

测试:测试中选择出最优文案

个性化:数据分析、自动化或半自动化PUSH

多类PUSH优先级:雪球目前就是每个部分的消息一个劲的都发送,主动的发送消息频次是一周3次左右,在PUSH上减少用户骚扰(个人用户体验感觉贼差)

到达率

技术通道原因

用户主动关闭

转化率

Push消息引导至指定页面

提高打开率之后,检测转化率

卸载率

每一条PUSH都有对应的卸载率= 推送1h后卸载人数 / 达到人数

非IM类消息推送:

新闻资讯类

活动推送类

产品推荐类

系统功能类

好处:

提高用户活跃度和用户粘性

提高用户留存率

提高产品功能和营销活动的用户参与度

坏处:

形成骚扰,卸载率提高

信任度降低

渠道扩展

PUSH、短信、微信组合推送,提高效率

高可用、高性能、高稳定性

消息推送平台通过无状态设计、统一存储、冗余部署方式保证了高可用,对应的状态数据统一存储到 MySQL、Redis 中保证各个无状态实例共享数据。

对于消息的接收处理我们通过纯异步、动态多线程的方式提供了推送平台的高性能。同时对于异步接收的消息我们通过 log append 的方式保证消息先落地然后再进行处理,进一步确保系统在异常过程中我们可以随时恢复消息,保证不丢失。

通过质量保障、全方位多维度监控体系(基础监控、错误日志监控、发送数据波动监控、进程监控等监控指标)保障系统在出现问题时实现秒级报警、及时处理保证了消息推送平台的高稳定性。

推送平台所采用的都是http的rest请求,没有使用厂商提供的SDK,为了减少pom问题出现,以及SDK中的处理细节问题,便于统一把控风险和压力瓶颈,有利于技术栈的统一

苹果:

https://liuyan731.github.io/2017/12/05/How-To-Use-APNs-Pushy/

小米:

https://dev.mi.com/console/doc/detail?pId=40

华为:

https://developer.huawei.com/consumer/cn/service/hms/catalog/huaweipush_agent.html?page=hmssdk_huaweipush_api_reference_agent_s2

OPPO:

https://storepic.oppomobile.com/openplat/resource/201908/23/OPPO%E6%8E%A8%E9%80%81%E5%B9%B3%E5%8F%B0%E6%9C%8D%E5%8A%A1%E7%AB%AFAPI-V1.7.pdf

VIVO:

https://dev.vivo.com.cn/documentCenter/doc/155

魅族:

http://open.res.flyme.cn/fileserver/upload/file/201803/be1f71eac562497f92b42c750196a062.pdf
发布了212 篇原创文章 · 获赞 68 · 访问量 36万+

猜你喜欢

转载自blog.csdn.net/singgel/article/details/99290839
今日推荐