难得的好文:如何构建一套高可用的 APP 消息推送平台

  • 时间:
  • 浏览:1
  • 来源:uu快3游戏_uu快3计划_苹果版

目前移动推送技术实现最好的措施 主要有以下并与否:

Android 平台不发生该大问题。

消息重发主要发生并与否场景:系统启动时,查询所有的发送失败或发送成功未收到客户端回执的消息,加载到推送队列重发;系统运行时,后台系统线程池池定时查询时要重发的消息,进入推送队列;手动触发时,直接将消息加入推送队列。

Android 平台(C2DM)

图 2:系统架构

客户端 SDK 与服务端的通信过程使用 appKey 和 appSecret 进行权限控制。appKey 是服务端为每个 app 分配的唯一标识,appSecret 是服务端为每个 app 分配的秘钥。

传输层会从接入层接收消息并进行解析,对推送消息进行合法性检查校验,因为 消息不合法直接丢弃,一并将合法的消息进行协议转换并发送到对应的第三方推送平台;应用层主可是提供统一的 SDK 供业务使用,封装适配第三方推送平台的 SDK 接口到统一的接口 SDK 中,原本业务 APP 使用方只关注统一封装的 SDK 即可实现业务消息的操作,而不时要考虑各种滤重、校验等通用操作。主要功能包括:

轮询最好的措施 (PULL)

1、应用申请

应用管理系统面向 App 开发人员,实现应用申请,推送服务配置,消息查询与管理,数据统计与分析。

客户端 SDK 对 App 提供统一的使用接口,屏蔽推送服务 SDK 使用细节,且实现多种推送 SDK 可替换,隐藏 SDK 简化的接入过程,方便使用。

移动推送的并与否最好的措施

 

移动 Push 推送基于 TCP 长连接实现, 客户端主动和服务器建立 TCP 长连接就让, 客户端定期向服务器发送心跳包用于保持连接, 有消息的就让, 服务器直接通过就让 因为 建立好的 TCP 连接通知客户端。尽管长连接也会造成一定的开销,对于轮询和 SMS 方案的硬伤来说,目前因为 是最优的最好的措施 ,就让通过良好的设计,要能将损耗降至最低。不过,随着客户端数量和消息并发量的上升,对于消息服务器的性能和稳定性要求提出了非常大的考验。就让,就难度而言,此最好的措施 代价最高。

因为 消息重发因为 会造成客户端收到重复消息,时要在客户端进行消息去重。服务端为每二根绳子 消息分配了俩个 多 唯一 id,重发时唯一 id 不变。客户端时要保存收到的每二根绳子 消息,在接收到新消息时首先根据唯一 id 判断是是不因为 收到了这条消息,如收到则不响应。客户端保存消息要能采用 sqlite 数据库。

推送基础

客户端 SDK 在请求服务端 HTTP 接口时,会将 appKey+appSecret 做一次签名,将签名值作为签名 sign 参数,与就让 请求参数(业务参数 +appKey)一并传到服务端;服务端拿到请求参数后,也先用 appKey+appSecret 做一次签名,比较和客户端传来的 sign 参数是与否一致,从而完成权限验证过程。为了要能实现灵活控制推送是与否,可实现黑名单管理的功能。发生黑名单内的 app 客户端不再进行消息的推送。黑名单控制的粒度到账号级别,要要能根据实际业务时要进行分组管理。

很显然,PULL 方案优点是简单就让实时性较差,大伙儿儿要要能通过提高查询频率来提高实时性,但这又会造电量、流量的消耗匮乏,反之 PUSH 方案基于 TCP 长连接最好的措施 实现,消息实时性好,就让因为 要保持 APP 客户端和服务端的长连接心跳,也会带来额外的电量和流量消耗。就让在整体架构设计 中时要折中平衡,目前主流的推送实现最好的措施 都有基于 PUSH 的方案。

客户端和服务器定期的建立连接,通过消息队列等最好的措施 来查询是与与否新的消息,时要控制连接和查询的频率,频率必须过慢或过快,过慢会因为 每项消息更新不及时,过快会消耗更多的资源(流量、电量等),对用户体验有较大伤害。

基于 TCP 长连接的最好的措施 是主流的推送最好的措施 ,基于该推送最好的措施 逐步发展出系统级、应用级一系列的推送外理方案。

为了外理以上大问题,大伙儿儿考虑基于第三方消息推送服务构建一套移动消息推送里边件平台,该消息平台采用了低耦合的分层架构设计 (如图 2 所示),分为三层:接入层、传输层和应用层。其中接入层是业务方调用的入口,大伙儿儿采用异步消息队列的最好的措施 提供了较高的业务系统发送消息的下行速率 ,就让具备了消息缓冲功能,即使高峰期的海量消息推送对整个平台冲击较少,保护了推送系统;

安全和控制

除了 Google 官方提供的方案,中国众多的手机厂商在其定制的系统中也内置了推送功能,如小米、华为等。

2. 自建推送服务

应用级方案

消息后台管理系统提供应用申请、应用服务配置、推送服务配置、消息查询与管理等功能。

主要流程

推送外理方案

 本文来自云栖社区媒体相互合作伙伴“Java技术栈”,了解相关信息要能关注“Java技术栈”。

客户端 SDK 是基于推送服务的 SDK 封装实现,对外提供统一的使用接口。SDK 的使用者不再关注具体使用了有哪些第三方推送、推送服务的接入细节。实现与推送服务的充分解耦,降低开发和使用成本。

图 4:消息情况表机

写在最后

鉴于 Android 平台 C2DM 推送的不可用性,国内涌现出几瓶的第三方推送服务提供商,采用第三方推送服务的系统流程如下图:

查看应用所发出的消息,包括消息所属应用、所属账号、消息的情况表、最终发送成功的第三方渠道、消息的来源、发送者 ip 等信息

为应用取舍要使用的移动端通用服务,可供取舍的有推送、反馈、版本发布。

 

正常情况表下,消息推送过程如下:

本文介绍了并与否基于第三方或自建推送服务、但又不强依赖特定推送服务的通用移动消息推送里边件平台,要能实现安全、稳定、可靠的消息推送功能,并提供完善的数据统计,在实际应用中,要能结合邮件、短信、网站消息、用户留言等打造成更加通用的企业消息平台。

 

流程如下:当推送服务的 SDK 在接收到推送过来的消息后,将发送广播,就让 广播的用 intent-filter 标识,当应用中的 Receiver 代码注册了就让 intent-filter,就要能接收到广播,并进行后续外理。

对于消息的接收外理大伙儿儿通过纯异步、动态多系统线程池池的最好的措施 提供了推送平台的高性能。一并对于异步接收的消息大伙儿儿通过 log append 的最好的措施 保证消息先落地就让再进行外理,进一步确保系统在异常过程中大伙儿儿要能随时恢复消息,保证不丢失。

系统级方案

1. 第三方推送服务

短信推送最好的措施 (SMS PUSH)

为应用配置推送服务,可供取舍个推、极光等;以及推送时使用的优先级顺序。

 

Android平台

通过分析 message 表中的各消息的情况表,可统计各应用消息的发送成功率和到达率,以及哪个第三方推送的更优,方便取舍。一并,提供每日、每周、每月推送消息量的统计,并提供统计图表。

就让,考虑当 APP 在后台时,针对 iOS 平台的消息不再进行重发;必须当 APP 进入前台,才重新进行重发。APP 的活动情况表通过第三方推送服务的 api 要能获取到。

5、数据统计

 

图 5:后台管理示意图

4、消息查询与管理

目前应用最为广泛的第三方推送服务提供商包括个推、极光、友盟、小米、华为、BAT 等,绝大每项 APP 都有优先考虑采用第三方推送服务。

消息推送作为移动 APP 运营中的一项关键技术,因为 被沒有广泛的运用。本文追溯了推送技术的发展历史,剖析了其核心原理,并对推送服务的关键技术进行深入剖析,围绕消息推送时产生的服务不稳定性,消息丢失、延迟,接入简化性,统计缺失等大问题,提供了一整套平台级的高可用消息推送外理方案。实践中,借有益于该平台,不仅能提能显著提高消息到达率,还能提高研发下行速率 ,并道出了移动开发基础设施的平台化架构思路。

SDK 提供启动和停止的最好的措施 ;一并定义俩个 多 protocol,含高 SDK 提供的接口。SDK 在收到消息或跳出错误时因为 回调 protocol 中的接口。

无论是第三方推送服务,还是自建推送服务,在实际的使用过程中,发现都发生以下大问题:

2、应用服务配置

原文发布时间为:2018-10-18

ios平台

 

 

 

2. Redis:Redlock 是 Redis 作者的提出了并与否分布式锁的算法,基于 Redis 实现,该算法实现了并与否更安全、可靠的分布式锁管理。3. 数据库:如使用 MySQL 的 GET_LOCK 函数

对于每项锁机制的特点本文不完整篇 介绍,根据实际应用时要任选并与否即可。

SDK设计

移动推送平台提供统一的服务,对于应用层屏蔽推送服务接口,且实现推送服务可动态轮替。推送平台将接收到的消息持久化到数据库中,方便进行消息推送失败后的重发,以及后续数据的统计分析。

iOS 平台(APNs)

消息推送平台通过无情况表设计、统一存储、冗余部署最好的措施 保证了高可用,对应的情况表数据统一存储到 MySQL、Redis 中保证各个无情况表实例共享数据。

图 3:消息推送里边件核心流程

iOS 在系统层面与苹果 APNs(Apple Push Notification service)服务器建立连接,应用通过观察者模式向 ioS 系统注册关注的消息,系统收到 APNs Server 消息后转发到相应的应用系统线程池池,整个过程很清晰,就让所有 APP 都共用同俩个 多 系统级的连接,减少了系统开销,实在 APNs 能无障碍的访问,但实际使用过程中,发现延时和丢消息的情况表偶有发生。

3、推送服务配置

发生大问题

重发机制

在就让 业务场景中,时要对消息进行过滤,分析,做出相应的外理甚至预警,借有益于消息推送平台,都能方便的实现。

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

连接最好的措施 (PUSH)

移动互联网蓬勃发展的今天,大每项手机 APP 都提供了消息推送功能,如新闻客户端的热点新闻推荐,IM 工具的聊天消息提醒,电商产品促销信息,企业应用的通知和审批流程等等。推送对于提高产品活跃度、提高功能模块使用率、提升用户粘性、提升用户留存率起到了重要作用,作为 APP 运营中俩个 多 关键的免费渠道,对消息推送的合理运用能有效有益于目标的实现。

在 Android 中使用 Receiver 组件来接收收到的消息。俩个 多 基本的配置如下所示:

因为 iOS 平台和 Android 平台的差异,消息重发时要考虑平台差异性。

  ●  在调用第三方推送服务接口成功后、第三方推送服务在架构设计 至客户端的过程中,因为 因为 并与否因为 ,造成客户端无法收到消息;此时消息的情况表为发送成功客户端未收到,对于就让 情况表,时要重发。  ●  客户端在收到推送的消息后、向服务端发送 ACK 回执时,因为 因为 网络环境的大问题,造成服务端沒有收到客户端发送的回执,此时消息的情况表为发送成功客户端未收到,对于就让 情况表,时要重发。  ●  消息在重发 N 次(N 次可配置)、仍然沒有进入发送成功客户端已收到的情况表,沒有将不再进行自动重发;管理界面将提供手动重发消息的操作入口,如有时要,要能手动再进行重发。监控平台对于一直 重复不成功的消息会报警通知操作人员,原本操作人员要能及时通过手动最好的措施 外理。

根据消息发送流程,要能得到消息在生命周期中情况表的变迁如下图:

本文作者:李晓清、董泽光

第一,移动推送服务器对 App 客户端海量长连接的维护管理。第二,App 客户端怎样才能保证 Push Service 常驻,对于 Android 大伙儿儿要能通过发现 push service 不发生要能定时拉起的最好的措施 。第三,通信协议的制定,大伙儿儿要能采用开源的 XMPP 最好的措施 实现,要要能自定义协议,不管哪种最好的措施 大伙儿儿都有保证消息传送的到达率的准确性。第四,在移动互联网网络环境下,一直 跳出弱网环境,有点硬是 2G、3G 等网络不稳定的情况表下,因为 保证消息在弱网环境下不重、不丢也是俩个 多 挑战。

推送最早诞生于 Email 中,用于提醒新的消息,而移动互联网时代则更多的运用在了移动客户端系统线程池池。要获取服务器的数据,通常有并与否最好的措施 :第并与否是客户端 PULL(拉)最好的措施 ,即每隔一段时间去服务器获取是与与否数据;第二种是服务端 PUSH(推)最好的措施 ,服务器在有数据的就让主动发给客户端。

  ●  验证不通过,返回错误信息;验证通就让,为此条消息分配俩个 多 唯一 id(uuid),将消息内容持久化到数据库中,此时消息的情况表为待发送。  ●  消息进入推送队列中,将就让推送接口请求的响应返回给业务方。  ●  推送队列的消费者从队列中取出待发送的消息,标记该条消息的情况表为发送中,就让调用第三方推送服务接口进行发送。  ●  因为 调用成功,沒有标记该消息的情况表为发送成功客户端未收到。  ●  客户端 SDK 在收到推送后,回调服务端接口,发送收到推送的回执;服务端收到客户端回执后,标记消息情况表为发送成功客户端已收到。

对于推送过程中因为 跳出的异常情况表,总结如下:

填写应用名、应用描述等信息后,生成该应用唯一的 appKey 和 appSecret。

第三方服务在开发成本和消息到达率上表现都有错,但所有信息会经过第三方服务器,对于信息敏感类 APP 而言,有必要考虑自建一套消息推送服务,能最大化保证安全,但对于自建推送服务,因为 从零开使英语 来做时要外理几个难点:

  ●  实现多点接入,可一并接入多套推送服务,根据历史推送成功率动态取舍最优推送路径,当二根绳子 路径失效可取舍备用路径进行推送,保证消息推送万无一失。  ●  引入消息持久化机制,方便追溯和统计。  ●  引入消息的 ACK 机制和重传机制,提高消息的到达率。  ●  实现数据监控和统计机制,提供相关数据的统计分析,和报警预警功能。  ●  提供 web 管理后台,便于进行 APP 设置、推送设置、查看数据报表,提高系统维护的工作下行速率 。

整个系统设计由三每项组成:移动推送平台、客户端 SDK、应用管理界面(第三方推送服务和自建推送服务统称为推送服务)。

图 1:消息推送流程

消息推送涉及的主要模块是消息推送平台和客户端 SDK,主要流程如下图所示:

Android 的 C2DM(Android Cloud to Device Messaging)采取与 iOS 类似的机制,都有由系统层面来支持消息推送,就让因为 Google 的服务在国内必须稳定的访问,此方案对于中国用户来说基本是无法使用的。

因为 消息推送里边件服务通常要求高可用,为分布式部署,消息重发时要保证在单一节点执行,且保证只发送一次。需采用分布式锁的最好的措施 ,保证重发只发一次,主流实现最好的措施 有并与否:

  ●  匮乏 ACK 机制。推送的过程是异步的,从应用服务端发送到推送服务时,要能得知发送是与否成功,就让从第三方推送服务架构设计 到 APP 时,无法得知客户端是与否接收到。iOS 平台中,从推送服务发送到苹果 APNs 服务时,同样无法取舍 APNs 是与否收到。一并,第三方推送服务通常使用共享的推送通道,受就让 推送方的影响,因为 造成消息的延迟和丢失。  ●  服务会被杀死。尤其在 Android 平台上,后台推送 service 会被各种主动因为 被动因为 kill 掉,因为 消息丢失。  ●  匮乏消息的持久化。对于推送服务而言,消息推送是来二根绳子 推二根绳子 ,无法追溯历史消息和消息情况表。  ●  匮乏重传机制。整个推送过程涉及多个环节,当其中某个环节跳出大问题,造成客户端接收必须推送的消息时,就因为 消息丢失,再无法接收到。  ●  客户端接入逻辑简化。每接入俩个 多 新的 APP,都有进行重复的接入工作,接入逻辑完整篇 一致,代码无法复用,时要在不同项目中拷贝。  ●  客户端与推送服务的 SDK 强耦合。客户端使用推送服务的接口,而各推送服务提供的接口不统一,因为 时要替换推送服务,沒有接入每项代码需完整篇 重写。  ●  匮乏数据监控和统计。每个应用每天推送了几个消息,成功到达 app 几个,失败几个,目前均沒有统计。

外理之道

因为 推送的接入涉及 AppDelegate 的生命周期最好的措施 ,为外理 SDK 使用者关注有有哪些繁琐的细节,SDK 使用 Aspects 的最好的措施 ,将推送时相应的外理函数 hook 到 AppDelegate 的生命周期最好的措施 上。

通过短信发送推送消息,并在客户端植入短信拦截模块(主要针对 Android 平台),要能实现对短信进行拦截并提取其中的内容转发给 App 应用外理,就让 方案借有益于运营商的短消息,要能保证最好的实时性和到达率,但此方案对于成本要求较高,开发者时要为每二根绳子 SMS 支付费用。

使用第三方推送时,因为 iOS 应用在前台运行,沒有将通过第三方推送维护的长连接,以透传的最好的措施 直接架构设计 到 APP,称为应用内消息;而当 APP 在后台时,则第三方推送将消息推送到 APNs,由 APNs 推送到 APP,称为 APNs 通知。当通过 APNs 推送时,手机在收到消息后将在顶部的通知栏跳出相关推送内容,就让 行为是系统级别的,APP 无法控制。因为 会跳出就让 大问题:当 APP 在后台因为 手机锁屏的情况表下,因为 服务端重发了消息,手机的通知栏将跳出多条通知。

因为 iOS 和 Android 平台的差异性,在客户端 SDK 的封装上发生差异,下面分别介绍俩个 多 平台的 SDK 封装最好的措施 。

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