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

zyfd zyfd     2022-12-28     637

关键词:

本文来自网易云社区


作者:李弈远

消息推送平台为公司内部和第三方应用提供统一消息推送服务,支持广播、私信、组播、附件等多种消息推送方式,覆盖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

 

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


相关文章:
【推荐】 HBase最佳实践-管好你的操作系统
【推荐】 深入解析SQL Server高可用镜像实现原理






























redis在vivo推送平台的应用与优化实践

...n一、推送平台特点vivo推送平台是vivo公司向开发者提供的消息推送服务,通过在云端与客户端之间建立一条稳定、可靠的长连接,为开发者提供向客户端应用实时推送消息的服务,支持百亿级的通知/消息推送,秒级触达移动用... 查看详情

网易消息推送系统微服务化实践

参考技术A微服务加上如今的服务发现,在基础设施即代码(指使用脚本配置计算基础设施,而不是手动配置计算机的方法)的过程中,我们正在不断的尝试各种实践方案。如何在云基础设施下结合业务场景,通过负载均衡、服... 查看详情

构建高并发高可用的电商平台架构实践

从各个角度总结了电商平台中的架构实践,由于时间仓促,定了个初稿,待补充完善,欢迎大家一起交流。转载请声明出处:http://blog.csdn.net/yangbutao/article/details/12242441作者:杨步涛关注分布式架构、大数据、搜索、开源技术QQ:30... 查看详情

构建高并发高可用的电商平台架构实践

...创文章,未经博主允许不得转载。从各个角度总结了电商平台中的架构实践,由于时间仓促,定了个初稿,待补充完善,欢迎大家一起交流。转载请声明出处:http://blog.csdn.net/yangbutao/article/details/12242441作者:杨步涛关注分布式... 查看详情

java大型互联网-构建高并发和高可用的电商平台架构实践原理

并发,在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。“高可用性”(HighAvailability)通常来描述一... 查看详情

构建高并发高可用的电商平台架构实践(转)

转载自:http://blog.csdn.net/yangbutao/article/details/12242441一、 设计理念  1.      空间换时间1)      多级缓存,静态化客户端页面缓存(httpheader中包含Expires 查看详情

即时通讯开发如何构建一套移动端消息推送系统

消息推送作为移动端APP运营中的一项关键技术,已经被越来越广泛的运用。本文追溯了推送技术的发展历史,剖析了其核心原理,并对推送服务的关键技术进行深入剖析,围绕消息推送时产生的服务不稳定性,... 查看详情

高并发高可用的架构实践-静态架构蓝图

...业务层,基础服务层,数据存储层。水平方向包括对整个平台的配置管理部署和监控。  查看详情

国民应用qq如何实现高可用的订阅推送系统(代码片段)

...2异构存储 2.3多重触发 2.4可控温度 2.5打散执行 2.6引入消息队列 2.7Atleastonce推送 2.8容灾方案3总结01业务背景与诉求1.1业务背景QQ服务了大量的移动互联网用户。作为一个超大流量的平台,其订阅提醒功能无论对于用户还... 查看详情

高可用架构设计与实践

...式事务解决方案,如:支付宝XTS,去哪儿QMQ。1.基于可靠消息的最终一致性解决方案(异步确保型)(适用场景比较广)2.TCC事务补偿性方案(try-confirm-cancel)(也属于两阶段型的,但区别于2PC协议的两阶段提交)3.最大 查看详情

如何实现消息推送功能

消息推送(Push)就是通过服务器把内容主动发送到客户端的过程。运营人员通过自己的产品或第三方工具对用户移动设备进行主动消息推送。完成推送后,消息通知会展示在移动设备的锁定屏幕及通知栏上,用户点击通知即可... 查看详情

消息推送平台乱象和趋势

...以及这个行业的一些趋势判断.文章分两大部分,分别是消息的用户打扰以及消息通道和各推送平台的趋势.消息的用户打扰目前每日全网下发的推送消息大概是120亿条,这些消息主要在Android设备上,平均每个Android用户每天会收... 查看详情

跨园区容灾,升级不停服:高可用负载均衡集群实践

...力。腾讯云基于基础架构的优势,为分期乐、微信红包等平台提供技术支持,可以完美满足如下三点需求:1.高可用能力,容灾 查看详情

唯品会滴滴沪江架构师,关于微服务粒度高可用持续交互的实践分享交流(上)

...滴架构师赵伟、七牛云技术总监肖勤,对微服务粒度、高可用、持续交互展开了交流。第一轮:自由交流沪江黄凯:大家好,我是来自沪江的Java架构师黄凯。第一次接触微服务这个概念是在三年前IBM的一次Devops培训上,其开发... 查看详情

唯品会滴滴沪江架构师,关于微服务粒度高可用持续交互的实践分享交流(上)

...滴架构师赵伟、七牛云技术总监肖勤,对微服务粒度、高可用、持续交互展开了交流。第一轮:自由交流沪江黄凯:大家好,我是来自沪江的Java架构师黄凯。第一次接触微服务这个概念是在三年前IBM的一次Devops培训上,其开发... 查看详情

跨园区容灾,升级不停服——高可用负载均衡集群实践

...力。腾讯云基于基础架构的优势,为分期乐、微信红包等平台提供技术支持,可以完美满足如下三点需求:1.高可用能力,容灾能力强,升级不停服2.可扩展性强,功能丰富,性能超高3.避免重复造轮子,性价比之王近期,针对一... 查看详情

基于go的websocket消息推送的集群实现

...hService:鉴权服务,根据Token验证用户权限。CollectService:消息采集服务,负责收集业务系统消息,存入MongoDB后,发送给消息分发服务。DispatchService:消息分发服务,根据路由规则分发至对应消息推送服务节点上。PushService:消息... 查看详情

rabbitmq最佳实践

...则,基于我们在使用rabbitmq时获得的经验。队列中的许多消息会对RAM的使用造成很大的负担。为了释放RAM,rabbitmq将(页面输出)消息刷新到磁盘。此过程会降低排队速度。当有许多消息需要分页取出时,分页过程通常会花费时... 查看详情