消息推送平台高可用实践(上)

本文来自网易云社区

作者:李弈远

消息推送平台为公司内部和第三方应用提供统一消息推送服务,支持广播、私信、组播、附件等多种消息推送方式,覆盖IOS、Android、PC、Web等多种终端,并根据应用特定需求制定各种解决方案。
平台支持水平扩展,支持C5000K高并发下的实时消息推送,通过动态负载均衡、隔离部署、LXC虚拟化和监控报警等多种机制确保系统 的高可用,通过高可用消息队列、自动重连和ACK等机制实现消息可靠性(QoS1),并提供SDK方便产品和应用接入。
本文将在介绍消息推送服务相关功能/非功能特性的基础上,就系统为实现高可用进行的架构设计及部署方案进行探讨。

一、系统特性

1.1 功能特性

  • 提供服务端SDK和各类终端SDK简化产品接入
  • 对接入的产品服务端和终端进行安全认证
  • 支持跨产品消息推送
  • 支持广播、私信、组播、附件推送等多种消息推送方式
  • 根据自定义条件筛选终端用户进行推送
  • 支持IOS、Android、Web、PC、智能设备等多种终端
  • 针对典型应用场景的各种解决方案
  • 对接入的各产品进行统一配置管理
  • 对推送效果进行统计
  • 系统运行时监控及异常报警

    1.2 非功能特性

  • 消息可靠性满足QoS1
  • 各种消息推送方式互不阻塞
  • 具备快速水平扩展能力
  • 系统高可用,无单点故障
  • 异常隔离不扩散
  • 消息推送路径跟踪及快速故障诊断
  • 服务质量实时监测
  • 易运维
  • 支持C5000K高并发
  • 终端流量电量损耗低于同类产品
  • 高性能

    二、架构设计

    2.1 系统架构图

  • 2.2 架构说明

    消息推送平台主要包括如下子系统:

  • Push Server:负责接收产品服务端发送的消息,并转发给高可用消息队列。连接建立过程中,采用连接池、超时检测、自动重连、单连接多channel等多种机制确保消息发送稳定性和性能
  • 高可用消息处理中心:基于RabbitMQ实现高可用消息队列服务,负责根据消息接收终端和消息发送模式对消息进行路由,基于负载均衡支持水平扩展,基于持久化、confirm/ack、HA、流控等机制实现高可用,基于二级路由策略隔离不同类型消息避免阻塞
  • 调度服务:负责从消息队列中获取消息进行解析,根据消息类型获取接收者信息,并投递给其所在的接入点
  • 消息存储:基于Redis为终端连接、终端上报数据、消息内容、离线消息等提供存储访问服务,采用基于Sharding的Master-Slave方案实现高可用
  • 接入点:负责管理和维护用户终端长连接,并将消息最终投递给用户终端。基于负载均衡支持水平扩展,采用LXC多结点部署、客户端重连、进程假死检测、重连退避等机制实现服务隔离和高可用
  • 终端SDK:提供给各类终端,如Android、IOS、PC、Web等,提供API简化其接入流程和复杂度,负责接收接入点下推的消息,并通知对应的APP进行处理。基于长连接、心跳退避、自动重连、ack、链路复用等机制确保消息的可靠接收,并减少了流量和电量等消耗
  • 过滤服务:负责存储终端上报的数据,并根据过滤条件筛选目标用户列表,过滤条件支持逻辑组合和黑名单功能
  • 权限认证服务:基于OAuth签名认证机制对产品服务端发送消息和用户终端接收消息进行安全认证,避免消息被篡改及冒名发送/接收等
  • 统计服务:对广播、附件等推送模式的推送效果,如实际接收用户数目、发送时间等进行统计,以评估系统运行状况,同时提供给产品方进行参考
  • 监控报警服务:负责从服务器资源、应用层、服务质量等多个层面对系统的运行情况进行运行时监控和异常报警,实现对系统故障的及时诊断和恢复,以确保服务的7*24小时正常运行
  • 管理服务:对接入推送服务的产品进行配置管理,如分配密钥对,设置产品接入终端类型,管理产品间消息互通权限,设置产品群组信息获取接口等

    三、部署方案

    推送平台子系统的实现涉及多种编程语言和模型,由此部署方式也各不相同,以下将就几个主要子系统的部署方式进行说明。

    3.1 Push Server

    Push Server基于Tomcat搭建http接口服务,其部署方式为典型的web服务部署方案,即LVS+Nginx+Tomcat实现负载均衡和高可用,其中Tomcat部署在云主机上,便于快速水平扩展和垂直扩展。

    3.2 高可用消息处理中心

    高可用消息队列基于RabbitMQ搭建。RabbitMQ提供了集群服务,但并不支持负载均衡。虽然连接到RabbitMQ集群的任意节点都可以访问集群中的任意消息队列,但一个消息队列只存储在一个物理节点上,其它节点只存储该队列的元数据,这使得当队列里只有一个队列时,系统性能受限于单个节点的网络带宽和主机性能,且存在单点故障。
    高可用消息队列服务在兼容AMQP协议的基础上开发了分布式代理层MQProxy实现负载均衡,客户端的消息生产和消费请求先通过LVS或HAProxy分流到MQProxy节点,再由MQProxy分流到后端多个RabbitMQ结点。整个集群采用无状态设计,MQProxy及后端的RabbitMQ结点都可以水平扩展。
    推送平台对消息可靠性极高,为此消息生产和消费采取了confirm+ack模式,队列部署采取持久化+HA模式,目前配置为单副本,为节省服务器资源,副本采取两两互为备份方式。

    3.3 接入点

    接入点采用非阻塞事件驱动编程语言nodejs处理高并发长连接。由于nodejs采用单进程模式运行,因此在多核服务器上需要部署多个进程才能充分利用服务器资源。为了实现进程间隔离,并减少性能损耗,系统采用LXC半虚拟化方式对进程进行部署,前端则利用LVS-DR模式实现负载均衡。

  • 下篇将从监控等层面详细介绍推送平台系统是如何进行服务质量保障的。

网易云大礼包:https://www.163yun.com/gift

本文来自网易云社区,经作者李弈远授权发布。

相关文章:
【推荐】 数据挖掘统计分析软件推荐
【推荐】 限时购校验小工具&dubbo异步调用实现限

原文地址:https://www.cnblogs.com/163yun/p/9578185.html

时间: 2024-08-08 01:27:30

消息推送平台高可用实践(上)的相关文章

消息推送平台乱象和趋势

最近笔者关注了一下推送这个领域,来给大家说说目前的推送的现状,我的一些想法以及这个行业的一些趋势判断.文章分两大部分,分别是消息的用户打扰以及消息通道和各推送平台的趋势. 消息的用户打扰 目前每日全网下发的推送消息大概是120亿条,这些消息主要在Android设备上,平均每个Android用户每天会收到30条以上的消息, 为什么呢,主要是因为Android手机生态的原因,关闭消息太难. 所以Android设备的用户每天生活在消息的轰炸之中,从业内的一些数据来看,现在Android的一条推送,从展

互联网共享经济系统平台高可用实践案例之一

高可用 High availability is a characteristic of a system, which aims to ensure an agreed level of operational performance, usually uptime, for a higher than normal period.   --wikipedia ------------------------------------------------------------------

设计一个百万级的消息推送系统

原文链接:https://crossoverjie.top/2018/09/25/netty/million-sms-push/ 前言 首先迟到的祝大家中秋快乐. 最近一周多没有更新了.其实我一直想憋一个大招,分享一些大家感兴趣的干货. 鉴于最近我个人的工作内容,于是利用这三天小长假憋了一个出来(其实是玩了两天??). 先简单说下本次的主题,由于我最近做的是物联网相关的开发工作,其中就不免会遇到和设备的交互. 最主要的工作就是要有一个系统来支持设备的接入.向设备推送消息:同时还得满足大量设备接入

如何使用Netty技术设计一个百万级的消息推送系统 原 荐

先简单说下本次的主题,由于我最近做的是物联网相关的开发工作,其中就不免会遇到和设备的交互. 最主要的工作就是要有一个系统来支持设备的接入.向设备推送消息:同时还得满足大量设备接入的需求. 所以本次分享的内容不但可以满足物联网领域同时还支持以下场景: 基于 WEB 的聊天系统(点对点.群聊). WEB 应用中需求服务端推送的场景. 基于 SDK 的消息推送平台. 技术选型要满足大量的连接数.同时支持双全工通信,并且性能也得有保障. 在 Java 技术栈中进行选型首先自然是排除掉了传统 IO. 那就

一篇文章教你如何设计一个百万级的消息推送系统

前言 先简单说下本次的主题,由于我最近做的是物联网相关的开发工作,其中就不免会遇到和设备的交互. 最主要的工作就是要有一个系统来支持设备的接入.向设备推送消息:同时还得满足大量设备接入的需求. 所以本次分享的内容不但可以满足物联网领域同时还支持以下场景: 基于 WEB 的聊天系统(点对点.群聊). WEB 应用中需求服务端推送的场景. 基于 SDK 的消息推送平台. 技术选型 要满足大量的连接数.同时支持双全工通信,并且性能也得有保障. 在 Java 技术栈中进行选型首先自然是排除掉了传统 IO

魔推MPUSH开发者程凯征:好的消息推送技术是磨出来的

开发一款程序员喜欢用的SDK不容易.也许有些开发者还不知道能够使用方便易用的消息推送平台接口服务.但是像百度.网龙.去哪儿等APP应用都是在使用消息平台接口的服务.魔推MPUSH开发者程凯征以一位标准研发人员的视角,将研发和产品设计之间的关系用"与.或.非"来阐述他对消息推送技术是如何诞生的. 目前,魔推MPUSH已经向应用开发者开放,支持包括安卓.IOS.JAVA.PHP的主流系统.从原理上来说,为应用开发者提供的SDK包嵌入到应用程序当中,就可以实现信息的推送功能.目前,广泛的做法

Android消息推送:手把手教你集成小米推送

前言 在Android开发中,消息推送功能的使用非常常见. 为了降低开发成本,使用第三方推送是现今较为流行的解决方案. 今天,我将手把手教大家如何在你的应用里集成小米推送 该文档基于小米推送官方Demo,并给出简易推送Demo 看该文档前,请先阅读我写的另外两篇文章: 史上最全解析Android消息推送解决方案 Android推送:第三方消息推送平台详细解析 目录 1. 官方Demo解析 首先,我们先对小米官方的推送Demo进行解析. 请先到官网下载官方Demo和SDK说明文档 1.1 Demo

iOS 细说消息推送

经常有同学问我们,iOS上推送究竟怎么做啊,为什么我的设备总收不到推送呢,这里跟大家集中讨论一下iOS上推送的实现细节. APNS的推送机制 与Android上我们自己实现的推送服务不一样,Apple对设备的控制非常严格,消息推送的流程必须要经过APNs: 这里 Provider 是指某个应用的Developer,当然如果开发者使用AVOS Cloud的服务,把发送消息的请求委托给我们,那么这里的Provider就是AVOS Cloud的推送服务程序了.上图可以分为三步: 第一步:AVOS Cl

细说 iOS 消息推送

APNS的推送机制 与Android上我们自己实现的推送服务不一样,Apple对设备的控制很严格.消息推送的流程必需要经过APNs: 这里 Provider 是指某个应用的Developer,当然假设开发人员使用AVOS Cloud的服务,把发送消息的请求托付给我们,那么这里的Provider就是AVOS Cloud的推送服务程序了. 上图能够分为三步: 第一步:AVOS Cloud推送服务程序把要发送的消息.目的设备的唯一标识打包,发给APNs. 第二步:APNs在自身的已注冊Push服务的应