如何构建一套高可用的移动消息推送平台?(2)
为了解决以上问题,我们考虑基于第三方消息推送服务构建一套移动消息推送中间件平台,该消息平台采用了低耦合的分层架构设计(如图 2 所示),分为三层:接入层、传输层和应用层.其中接入层是业务方调用的入口,我们采用异步消息队列的方式提供了较高的业务系统发送消息的速度,并且具备了消息缓冲功能,即使高峰期的海量消息推送对整个平台冲击较少,保护了推送系统; 传输层会从接入层接收消息并进行解析,对推送消息进行合法性检查校验,如果消息不合法直接丢弃,同时将合法的消息进行协议转换并发送到对应的第三方推送平台;应用层主要是提供统一的 SDK 供业务使用,封装适配第三方推送平台的 SDK 接口到统一的接口 SDK 中,这样业务 APP 使用方只关注统一封装的 SDK 即可实现业务消息的操作,而不需要考虑各种滤重、校验等通用操作.主要功能包括:
整个系统设计由三部分组成:移动推送平台、客户端 SDK、应用管理界面(第三方推送服务和自建推送服务统称为推送服务). 图 2:系统架构 移动推送平台提供统一的服务,对于应用层屏蔽推送服务接口,且实现推送服务可动态轮替.推送平台将接收到的消息持久化到数据库中,方便进行消息推送失败后的重发,以及后续数据的统计分析. 客户端 SDK 对 App 提供统一的使用接口,屏蔽推送服务 SDK 使用细节,且实现多种推送 SDK 可替换,隐藏 SDK 复杂的接入过程,方便使用. 应用管理系统面向 App 开发人员,实现应用申请,推送服务配置,消息查询与管理,数据统计与分析. 主要流程 消息推送涉及的主要模块是消息推送平台和客户端 SDK,主要流程如下图所示: 图 3:消息推送中间件核心流程 正常情况下,消息推送过程如下:
对于推送过程中可能出现的异常情况,总结如下:
根据消息发送流程,可以得到消息在生命周期中状态的变迁如下图: 图 4:消息状态机 重发机制消息重发主要存在三种场景:系统启动时,查询所有的发送失败或发送成功未收到客户端回执的消息,加载到推送队列重发;系统运行时,后台线程定时查询需要重发的消息,进入推送队列;手动触发时,直接将消息加入推送队列. 由于消息推送中间件服务通常要求高可用,为分布式部署,消息重发必须保证在单一节点执行,且保证只发送一次.需采用分布式锁的方式,保证重发只发一次,主流实现方式有三种:
对于每种锁机制的特点本文不详细介绍,根据实际应用需要任选一种即可. 由于 iOS 平台和 Android 平台的差异,消息重发需要考虑平台差异性. (编辑:ASP站长网) |