vivo 推送系统的容灾建设与实践

这篇具有很好参考价值的文章主要介绍了vivo 推送系统的容灾建设与实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作者:vivo 互联网服务器团队 - Yu Quan

本文介绍了推送系统容灾建设和关键技术方案,以及实践过程中的思考与挑战。

一、推送系统介绍

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

推送系统主要由接入网关,逻辑推送节点,长连接组成,长连接负责与用户手机终端建立连接,及时把消息送达到手机终端。

推送系统的特点并发高、消息量大、送达及时性较高

vivo推送系统现状最高推送速度140w/s,单日最大消息量200亿,端到端秒级在线送达率99.9%。同时推送系统具备不可提前预知的突发大流量特点。针对推送系统高并发,高时效,突发流量等特点,如何保证系统可用性呢?本文将从系统架构,存储容灾,流量容灾三个方面进行讲述,推送系统是如何做容灾的。

二、系统架构容灾方案

2.1 长连接层容灾

长连接是推送系统最重要的部分,长连接的稳定性直接决定了推送系统的推送质量和性能,因此,需要对长连接层做好容灾和实时调度能力。

原有推送系统架构是长连接层都部署在华东,所有vivo IDC逻辑节点通过VPC与华东的Broker建立连接,手机端跟华东的broker进行长连接通信。这种部署方式存在以下问题

  • 问题一:华北、华南手机都需要连接华东的Broker,地域跨度大,长连接网络稳定性和时效性相对较差。

  • 问题二:逻辑层跟华东的Broker之间由一条VPC连接,随着业务的发展,推送流量越来越大,带宽会出现瓶颈,有超限丢包的风险。另外当该VPC出现故障时,会造成全网消息无法送达。

注:长连接层节点名为Broker。

原始长连接架构图:

基于以上架构存在问题,进行了优化,将Broker进行三地部署,分别部署在华北,华东,华南。

华北、华东、华南三地用户采用就近接入方式。

优化后的架构,不仅可以保证长连接网络稳定性和时效性。同时具有较强的容灾能力,华东,华南Broker通过云网跟华北Broker连接,华北Broker通过VPC与vivo IDC连接。当华北、华东、华南某个地区Broker集群故障或者公网故障,不会影响到全网设备收发消息。但是这种方式还是存在一个问题,就是某个地区Broker集群故障或者公网故障,会出现该区域部分设备无法收到推送消息的情况。

三地部署后的架构图:

 

针对上述单个地区异常导致该区域部分设备无法收到推送消息的问题,我们设计了一套流量调度系统,可以做到实时流量调度和切换。global scheduler节点负责策略调度和管理。

vivo phone进行注册时,dispatcher会下发多个地区的ip地址,默认情况下,进行就近连接。单多次连接失败后,尝试连接其他ip。当某个地区Broker出现长连接数瓶颈或者VPC出现故障,可以通过global scheduler节点下发策略,让该故障地区的设备重新从dispatcher获取新的ip集的ip,与其他地区Broker建立长连接,逻辑节点下发消息到重连后的Broker。等到该地区恢复后,可以重新再下发策略,进行回调。

流量调度系统图:

2.2 逻辑层容灾

长连接层做好容灾后,逻辑层也需要做相应容灾。之前我们逻辑层都部署在一个机房,不具备机房机容灾能力,当一个机房出现断电风险,会出现服务整体不可用问题,因此我们做"同城双活"部署方案改造。

逻辑层单活架构:

逻辑层分别在vivo IDC1和vivo IDC2进行部署,网关层根据路由规则将流量按照一定比例分别下发到两个IDC,实现逻辑层同城双活。我们发现,数据中心还是只有一个,部署在vivo IDC1,根据成本、收益,以及多数据中心数据同步延迟问题综合考虑,数据中心暂时还是以单数据中心为主。

逻辑层双活架构:

三、 流量容灾方案

做好系统架构的容灾能力后,推送系统的网关层还需要应对突发流量做相应的应对措施,做好流量控制,保证系统稳定性。历史上,我们曾经因为热点和突发新闻事件,并发推送流量巨大,导致服务出现异常,可用性降低问题。

如何应对突发大流量,保证突发流量的情况下,系统可用性不变,同时能兼顾性能和成本。为此,我们分别对比了设计了以下两种方案。

常规的方案是一般是根据历史情况估算冗余部署大量机器,来应对突发流量。单这种方式成本较高,突发流量可能只持续5分钟或更短时间,而系统为了满足5分钟突发流量,需要冗余部署大量机器。一旦流量超过了部署机器可承担的上限,无法及时扩容,可能导致可用性下降,甚至出现雪崩效应。

传统方案下的推送架构:

那如何设计一套既可以控制成本,面对突发大流量弹性扩容,又保证消息不漏并兼顾推送性能的方案呢?

优化方案:在原有架构的基础上,在接入层增加缓冲通道,当流量洪峰到来时,对于系统可处理的上限能力外的流量,打入缓冲队列。通过消息队列形式,增加bypass接入层,限速消费消息队列。在流量洪峰过去后,提升bypass消费速度,处理缓存队列消息。bypass接入层通过docker部署,支持动态扩缩容,默认最小化集群,当消息队列积压很多,并且下游有能力处理时,提升消费速度,bypass根据CPU负载动态扩容,快速消费消息队列。处理完毕后动态缩容。

消息队列:选用吞吐量较大的KAFKA中间件,并且与离线计算KAFKA集群共用,能充分利用资源。

bypass接入层:采用docker部署,支持根据CPU负载和时间动态扩缩容。默认最小集群部署。对于已知的流量高峰时段,可以提前扩容服务,保证流量快速处理。未知时段流量高峰,可以bypass接入层,根据CPU负载情况进行动态扩缩容。

增加缓存队列后的推送架构:

进行上述改造后,还存在一个问题,就是如何进行接入层全局控速。我们采用的方式是收集下游推送节点的推送流量情况,比如:流量达到系统可承受上限的80%时下发限速指令,调整接入层推送速度。让消息先积压在消息队列,等到下游流量降低之后,下发解除限速指令,让bypass接入层加速消费消息队列,进行推送。

增加控速后的推送架构:

优化后方案与传统方案对比:

四、存储容灾方案

做好并发流量控制后,能很好的预发突发热点问题。推送系统内部,由于使用Redis集群缓存消息,出现过因为Redis集群故障导致消息无法及时送达问题。因此,我们考虑对Redis集群做相关容灾方案设计,实现系统在Redis集群故障期间,也能及时推送消息并保证消息不丢失。

推送消息体缓存在Redis集群中,推送时从Redis中获取消息体,如果Redis集群宕机,或者内存故障,会导致离线消息体丢失。

原有消息流程:

 

方案一:引入另一个对等Redis集群,采用推送双写方式,双写两个Redis集群。该方案需要冗余部署规模对等的备Redis集群。推送系统需要双写Redis操作。

 

方案二:原有Redis集群,采用RDB+AOF方式同步到另一个备Redis集群。该方案不再需要推送系统双写Redis改造,直接利用将原有Redis集群数据同步到另一个备Redis集群。也需要冗余部署规模对等的备Redis集群。可能存在部分数据同步延迟导致推送失败问题。

方案三:应用另一个分布式存储系统,磁盘KV,兼容Redis协议,同时具有持久化能力。可以保证消息体不丢失。但是为了节省成本,不再直接使用Redis集群对等资源。而是根据推送特点,推送分为单推、群推。单推是一对一推送,一个用户一条消息体。群推是一对多推送,一个消息体对应多个用户。群推往往是任务级别推送。因此我们使用一个相对小一些的磁盘KV集群,主要用于冗余存储,群推消息体,即任务级别的消息。对于单推,还是只保存到Redis中,不进行冗余存储。

如果Redis集群故障,对于单推消息,推送系统可以携带消息体往下游推送,确保消息可以继续下发。对于群推消息,因为消息体冗余存储在磁盘KV中,当Redis集群故障后,可以降级到读取磁盘KV。

方案三还存在一个问题,就是磁盘KV的写入性能和Redis集群不是一个数量级,特别是时延,磁盘KV在平均在5ms左右。而Redis集群却在0.5ms。如果在推送系统对群推消息体进行双写。这个时延是不能接受的。因此只能采用异步写入磁盘KV的方式。这里将备份群推消息体,先写入消息中间件KAFKA,由bypass节点消费KAKFA进行异步写入磁盘KV。这样在使用的灾备磁盘KV资源较少的前提下,保证推送系统的高并发能力,同时可以保证群推消息体不丢失,Redis异常时,单推消息携带消息体推送,群推消息体读取磁盘KV。

存储容灾方案对比:

五、总结

本文从系统架构容灾、流量容灾、存储容灾三个方面讲述了推送系统容灾建设过程。系统容灾需要根据业务发展,成本收益,实现难度等多方面考虑。

当前我们长连接层已具备三地部署,逻辑层具备同城双活,数据中心为单数据中心。后续我们会持续研究和规划双数据中心,两地三中心部署架构方式来逐步加强推送系统容灾能力。文章来源地址https://www.toymoban.com/news/detail-427866.html

到了这里,关于vivo 推送系统的容灾建设与实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于Hologres+Flink的曹操出行实时数仓建设作者:林震|曹操出行实时计算负责人

    作者:林震|曹操出行实时计算负责人 曹操出行 创立于2015年5月21日,是吉利控股集团布局“新能源汽车共享生态”的战略性投资业务,以“科技重塑绿色共享出行”为使命,将全球领先的互联网、车联网、自动驾驶技术以及新能源科技,创新应用于共享出行领域,以“用心

    2024年01月24日
    浏览(50)
  • vivo 自研鲁班分布式 ID 服务实践

    作者:vivo IT 平台团队- An Peng 本文介绍了什么是分布式ID,分布式ID的业务场景以及9种分布式ID的实现方式,同时基于vivo内部IT的业务场景,介绍了自研鲁班分布式ID服务的实践。 随着系统的业务场景复杂化、架构方案的优化演进,我们在克服问题的过程中,也总会延伸出新的

    2024年02月11日
    浏览(43)
  • 新书发布!《数字化时代研发效能跃升方法与实践》作者序丨IDCF

    作者团队: 姚冬、王立杰、徐磊、许舟平 为什么会有本书 只是因为在人群之中,多看了你一眼。这一切,都要从IDCF的发端讲起  缘起IDCF 时间如白马过隙,我们成立IDCF一晃已有四年,而距离上一本书《敏捷无敌之DevOps时代》的出版也两年有余。 IDCF缘起于2019年5月的一次聚

    2024年02月16日
    浏览(49)
  • 异地容灾系统和数据仓库系统设计和体系结构

    ( 1)生产系统数据同步到异地容灾系统 生产系统与异地容灾系统之间是通过百兆网连接的;生产系统的数据库是 Oracle 9i RAC,总的数据量大约为 3 TB,涉及五千多张表。对这些表进行分析归 类,发现容灾系统真正需要实时同步的表大约只有五百张,数据量约为 1 TB,只 要能

    2024年02月09日
    浏览(44)
  • 数据仓库建设实践——如何通过数据仓库建设提升效率并确保数据质量

    作者:禅与计算机程序设计艺术 随着互联网经济的快速发展,全球消费者对汽车的需求越来越旺盛。在全球范围内,公共汽车运营商(PSA)正在竞争激烈,包括美国的Tesla、上海的东风、中国的福特等。全球公共汽车市场规模每年呈现爆炸性增长态势。其中,美国曾经的领先地

    2024年02月11日
    浏览(80)
  • 怎样设计一个具有良好容灾性的系统架构?

    当你的系统出现故障时,容灾性设计可以让你的系统保持高效运转,避免数据丢失和业务中断。那么,怎样设计一个具有良好容灾性的系统架构呢?让我来教你几招,不过在开始之前,先来了解一下今天的小广告:如果你需要可靠的服务器托管服务,推荐Lcayun(莱卡云)服务

    2024年01月25日
    浏览(44)
  • 某银行主机安全运营体系建设实践

    随着商业银行业务的发展,主机规模持续增长,给安全团队运营工作带来极大挑战,传统的运营手段已经无法适应业务规模的快速发展,主要体现在主机资产数量多、类型复杂,安全团队难以对全量资产进行及时有效的梳理、管理;对主机的安全能力要求不同,且主机安全能

    2024年01月19日
    浏览(39)
  • 银行网络安全实战对抗体系建设实践

    党的十八大以来,将网络安全提升到前所未有的新高度,银行牢牢把握国家网络安全战略目标,已加强自身建设,建立了较为完善的安全防护体系。同时随着国际网络安全攻防对抗升级,银行转变思路、主动作为,从被动防守向主动防御、动态防御转型,聚焦传统攻防演练的

    2024年01月21日
    浏览(54)
  • 医院核心数据库一体化建设实践

    “以数据为核心资源的数字化时代,正在成为引领和推动新一轮科技革命的核心力量,将会深刻影响卫生健康行业。” 这是四月份发布的《公立医院运营管理信息化功能指引》中对数据重要性的描述。数据库作为数据的载体,支撑着整个业务系统,发挥着非常重要的作用,被

    2023年04月24日
    浏览(57)
  • 作业帮基于 DeltaLake 的数据湖建设实践

    内容框架: 业务背景 问题痛点 解决方案 基于 DeltaLake 的离线数仓 未来规划 致谢 作业帮是一家以科技为载体的在线教育公司。目前旗下拥有工具类产品作业帮、作业帮口算,K12直播课产品作业帮直播课,素质教育产品小鹿编程、小鹿写字、小鹿美术等,以及喵喵机等智能学

    2023年04月12日
    浏览(22)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包