根据《开篇 | mPaaS 服务端核心组件体系概述》的介绍,我们已经知道 mPaaS 的 MPS 服务主要提供了专业的移动消息推送方案,可以针对不同的场景提供多种推送类型,满足用户的个性化推送需求,并集成了苹果、华为、小米、OPPO、VIVO、FCM 等多个厂商渠道的推送功能。在提供控制台快速推送能力的同时,MPS 也提供了服务端接入方案,方便用户快速集成移动终端推送功能,与用户保持互动,从而有效地提高用户留存率,提升用户体验。

本文将进一步介绍 MPS 服务端的架构设计和核心业务处理流程,首先看一下 MPS 在mPaaS 中的定位:

通过上图可知 MPS 推送服务为 mPaaS 体系内直接与客户端通讯的核心必备基础组件之一,其基础原理为基于 TCP 长连接通道进行“消息通知”相关业务数据传输。

目前蚂蚁体系内所有 App 均已接入了消息推送服务,并通过历代架构演进、对接统一接入网关、统一使用蚂蚁自研 mmtp 传输协议,形成如今可支持多 App,总量用户量超过十亿,每天推送数十亿消息通知的基础服务。

为满足多种异构客户端,以及其他行业 App 标准管控需求,MPS 同样支持 http2 标准协议,并为支持轻量化部署也依然保留了独立接入网关(mcometgw),可在根据实际部署场景以及客户端所继承的网络 SDK 选择对应的接入网关。

注 1:Spanner 是蚂蚁集团基于 Nginx 二次开发而来的一个系统。主要承担 SSL 卸载、HTTP、TCP 接入层负载均衡的功能,是蚂蚁集团的流量入口系统之一。通过规范的配置文件部署和自研 Nginx 模块,Spanner 可以支持 LDC 架构下的流量 Zone 间转发、蓝绿发布、容灾切换等功能;

注 2:mcometgw 为 MPS 团队在接入 Spanner 之前的接入网关,同样也是基于Nginx 二次开发,其协议处理只能与 MPS 服务对接,无法与 MGS,MSS 等其他mPaaS 组件对接。

在接入层,除消息通知自身所需的接入网关外,依然需要 mPaaS 移动网关(MGS)配合服务,其主要作用为:客户端通过 RPC 进行设备注册、用户绑定、以及第三方渠道的关系绑定。另外,目前还独立使用了日志网关 MDAP,其主要目的为:按照既定规范采集和上传客户端行为日志埋点,用于监控分析系统进行相关数据分析与报表制作;考虑到日志的优先级与使用频率考虑,以及与主业务链路进行网络隔离方面设计,目前日志依然采用了短连接(http/https)的方式上传,客户端日志上报后,会通过部署在应用服务上的日志采集工具与消息队列投递至数据仓库或其他数据分析系统进行分析、报表制作以及监控报警(相关流程和处理框架非本文重点,可参考 ELK 等设计)。

在此之上所介绍的为蚂蚁的自建渠道,而为了支持国内各大手机产商的管控需求以及支持蚂蚁国际标准接入,MPS 同时也支持了华为、小米、魅族、OPPO、VIVO、FCM 和苹果的 APNS 等渠道推送,并对后端业务系统保持透明,可让业务系统专注于完成业务功能,无需关注终端机型。

接着,我们将介绍下 MPS 服务端的几个核心业务流程。

1

设备建连、注册、绑定用户流程

由 MPS 的基础原理所需,客户端与服务端之间必须要有一条稳定 TCP 物理连接。(注:TCP 连接维持主要通过心跳机制保障,如何保证快速建联,以及如何保持连接的稳定性后续将专门的网络优化相关文章介绍)

因此,所有故事的开头,都是由建立 TCP 连接开始。随 TCP 连接建立之后客户端网络 SDK 即开始上报一些基础信息,如:客户端产品 ID,版本号,操作系统,操作系统版本,机型等等,其目的是为了后端可以做更多的逻辑判断、支持多维度的推送,MPS 会保存一份连接信息至缓存( 注:可根据实际部署环境适配多种类型缓存:Redis、memcache 或者阿里体系内的 OCS、TAIR、Tbase 等等),此外在接入网关也会保存一份内存数据,为后续全网推送做准备。

对于需要用到第三方推送的终端设备,MPS 客户端 SDK 会根据终端类型注册三方渠道的唯一 ID,随后通过 RPC 一并调用到 MPS 服务端,MPS 则会根据客户端的基础信息生成设备的唯一 ID,并将三方渠道 ID 与 MPS 设备之间的关系持久化至 DB 层( 注:目前主要支持 MySQL 和 OceanBase,为支持亿级用户,持久层必然需要分库、分表 ),至此,原则上 MPS 基于设备维度和基于第三方渠道的消息推送均已可满足。

当然,业务对于消推送的诉求,一般是基于业务结果,需要对指定用户推送通知。因此,MPS 必须支持通过用户 ID 路由推送的能力,因而延伸到客户端,就需要有一个用户与设备关系绑定的过程,正如上图中的用户绑定步骤,待流程完成后,MPS 已具备各种维度推送的基本条件,静待业务调用。

2

业务调用、消息推送过程

目前 MPS 主要支持两种调用模式:

业务系统接口调用;

mPaaS控制台页面调用。

一般业务流程已接口调用触发为主,日常验证和群发、广播等流程则可通过控制台来直接操作。对于客户端消息通知内容,一般客户端需要进行严格管控,因此 MPS 提供了推送模板管理的功能,可在 mPaaS 控制台进行操作,例如:配置可一个“支付宝收款#amount#元。”的模板,模板中只有 amount 变量可替换,其他内容均为固定,接口调用时也只需传输 amount 属性。

如此,管理人员可有效的控制和规范推送消息内容。此外,当推送内容需要变更时,只需维护模板,业务系统完全不做任何变动即可按照新的消息内容推送通知。因此,在 MPS 的服务端流程中便多了一个模板渲染的步骤(同步支持语音播报模板,客户端可根据语音类型消息,进行语言替换后播报声音通知)。

在非常多的业务场景中,当业务发生时用户未必在线,也未必有网络。因此,在 MPS 中所有消息均会被持久化。业务发生时,MPS 会尝试做一次推送(第三方渠道推送或自建的TCP 连接推送)。自建渠道中,会通过查询缓存来判断用户的终端是否有 TCP 连接,如果存在则推送,客户端收到推送消息后,会给服务端回执,服务端即可更新消息状态。如果推送失败,或者回执丢失,用户在下一次建立连接时,会重新接受消息通知,同时客户端会进行逻辑去重。

3

多维度广播消息通知推送

客户端 App 运营往往需要进行大规模的营销活动,MPS 全网消息通知,是提醒用户活动开始的,促使用户打开 App 的有效手段。同时,全网通知在很多时候也需要按照特定的规则进行控制范围(如:操作系统类型,机型,版本等),因此 MPS 也添加了多维度推送的支持。

广播推送主要分:自建渠道和第三方渠道推送两种模式。

自建渠道,在前端触发广播任务时,MPS 封装好推送内容与业务所需规则后,即可由接入网关来遍历内存中的连接列表,并匹配特定维度来推送至客户端(如图中:最左侧流程)。

第三方渠道模式,则需采用循环遍历绑定关系获取三方渠道 ID 来推送,对于亿级用户的 App 而言,快速的遍历所有用户,是对活动最强有力的支持,因此 MPS 依赖了分布式调度任务来确保集群各服务都参与到推送过程中来:分布式任务目前采用 3+1 的方式:

> 第一步:

调度中心日常情况会按照固定的频率(支持 crontab 表达式)来检测是否有待处理的广播任务,为避免重复触发和冗余推送,检测过程是单任务,通过单机检测(如:图中 step1: 随机调度的是 MPS-B 服务器)。

> 第二步:

当 MPS-B 服务器,检测到有待处理广播任务后,开始进行任务分片(分片数=总用户数 % 集群中机器数 % 计划每个任务执行的用户数),并对每个任务分配任务 ID,并将任务模型返回给分布式调度中心。

> 第三步:

分布式调度任务中心,接收到分片任务列表后,将总任务趋于均衡的分配给集群中每台机器(MPS-A....MPS-N)同时携带任务 ID 和任务模型,各服务器领取到各自任务后,开始根据任务模型中的属性各自处理。

> 第四步:

最终将消息通知挨条调用至第三方渠道,后面的工作则交给产商提供的消息中心与客户端处理。

至此,MPS 消息推送最主要的处理流程基本介绍完毕,只要按照这个逻辑与客户端配合把代码堆起来,系统就可应运而生了。其中,在推送路由过程中适当的加入策略模式、三方渠道推送管理中加入工厂模式等设计,也可以让系统做的更好看。更进一步,系统需要支持 LDC(Logical Data Center) 架构,支持多机房,多可用区(Zone)部署,以满足容灾等稳定性需求,在类似这种部署方式下系统内部调用关系,分布式调度任务控制等逻辑也需要进行适当的调整。

通过本节内容,希望给大家通篇介绍 MPS 的基础架构技术,如果有问题欢迎大家微信后台留言,或登录消息推送具体文档页(http://t.cn/EtnB6Gu)了解更多。

消息通知调度服务器,mPaaS 服务端核心组件:消息推送 MPS 架构及流程设计相关推荐

  1. mPaaS 服务端核心组件:消息推送 MPS 架构及流程设计

    0. 前言 根据<开篇 | mPaaS 服务端核心组件体系概述>的介绍,我们已经知道 mPaaS 的 MPS 服务主要提供了专业的移动消息推送方案,可以针对不同的场景提供多种推送类型,满足 ...

  2. 开篇 | 蚂蚁金服 mPaaS 服务端核心组件体系概述

    mPaaS 是源自于支付宝客户端 App 的移动开发平台,为企业提供了移动开发.测试.运营及运维提供云到端的一站式解决方案,mPaaS 能有效降低技术门槛.减少研发成本.提升开发效率,协助企业快速搭建 ...

  3. mPaaS 服务端核心组件:移动分析服务 MAS 架构解析

    承接<开篇 | mPaaS 服务端核心组件体系概述>已经介绍移动分析服务 MAS 的主要功能和数据链路情况,包括"基础分析,自定义分析,性能分析,日志管理". 本章节, ...

  4. 蚂蚁金服 mPaaS 服务端核心组件体系概述:移动 API 网关 MGS

    根据<开篇 | mPaaS 服务端核心组件体系概述>,我们已经初步了解 mPaaS 平台后端各组件的核心架构体系. 而在 mPaaS 服务端众多组件中,移动 API 网关 MGS 是连接移 ...

  5. sse服务器推送性能,SSE 服务端向客户端推送

    传统的ajax都是由客户端主动去请求,服务端才可以返回数据 而sse是建立一个通道,并且在断线后自动重连,由服务端去推送,不需要客户端去主动请求,只需要建立通道 websocket是双向通信 客户端可 ...

  6. 视频直播源码中关于服务端直播开播推送实现

    在视频直播源码中直播app开播时需向客户推送开播消息通知用户,实现方式如下: 1.申请相应的推送服务三方,如下使用极光推送,获取相应的配置资料,并做好相应的配置 2.推送代码如下: /* 极光推送 * ...

  7. java服务端集成信鸽推送

    java服务端集成信鸽推送 最近项目需要集成推送功能,突发奇想的选了信鸽推送(可能是最近一直在用阿里的东西),没想到这坑不是一般的多,而且关于详细的集成案例,度娘上真是没一个能入眼的.算了,别的不多说 ...

  8. java websocket修改为同步_服务端向客户端推送消息技术之websocket的介绍

    websocket的介绍 在讲解WebSocket前,我们先来看看下面这种场景,在HTTP协议下,怎么实现. 需求: 在网站中,要实现简单的聊天,这种情况怎么实现呢?如下图: ​ 当发送私信的时候,如 ...

  9. springboot实现SSE服务端主动向客户端推送数据,java服务端向客户端推送数据,kotlin模拟客户端向服务端推送数据

    SSE服务端推送 服务器向浏览器推送信息,除了 WebSocket,还有一种方法:Server-Sent Events(以下简称 SSE).本文介绍它的用法. 在很多业务场景中,会涉及到服务端向客户端 ...

  10. App推送java服务端_小米推送

    目前主流的推送,jpush,友盟,小米等等,楼主这里用的是小米,当然需要先看小米的api 小米提供的服务端api地址:http://dev.xiaomi.com/doc/?p=533#d5e15 客户 ...

最新文章

  1. Linux那些事儿 之 戏说USB(15)设备
  2. pandas使用to_sql方法将dataframe注册为数据库表进行数据整合和数据清洗并不对比SQL操作和dataframe操作
  3. C#后台导入css和设置前台关键字和描述
  4. Redis 模糊匹配 SearchKeys
  5. 进程间通信——DLL共享节
  6. RHEL6入门系列之十一,内/外部命令、重定向、管道
  7. 如何与深度学习服务器优雅的交互?(长期更新)
  8. Retrofit与RXJava整合
  9. 聚合登录平台网站源码
  10. Flask框架+ajax框架
  11. 软考初级程序员---题目(五)
  12. 微信扫一扫门禁开门小程序开发制作
  13. java流水号_java怎样自动生成流水号
  14. 安装Pytorch-gpu版本(第一次安装 或 已经安装Pytorch-cpu版本后)
  15. win7家庭版升级旗舰版
  16. 手撕栈,栈的实现(C语言)
  17. 教你刷各大android手机应用市场下载排名
  18. 用四阶RungeKutta方程解二阶常微分方程,并计算船舶在规则波中的横摇角(附Matlab代码)
  19. 如何查看linux进程?
  20. 关于JPEG2000软件

热门文章

  1. ubuntu18.04 安装数据库
  2. ubuntu16.04 创建配置并使用虚拟环境
  3. pyside qt for python 在ubuntu下构建依赖
  4. QML Rectangle矩形
  5. JavaScript+HTML 实现贪吃蛇简陋版
  6. MySQL不同字段比较大小_mysql 字段定义 对 大小比较的影响
  7. 苹果手机如何隐藏软件_手机资讯:苹果软件下载演示
  8. qt之tcp通信,制作简易的仿qq功能
  9. Go语言编程(旧读书笔记)
  10. 未开启3389实现远程桌面