春节微信访问突发,存储业务如何平稳度过?

存储业务里面有很多访问突发的业务,其中微信就是一个典型的业务。微信承担了亿万用户的图片、视频和文件的收发,遇到特殊热点事件或者重大节假日,访问次数会突发10倍以上的增长。微信是一个海量的业务,平时机器的负载有限,实际运营中不可能预留10倍的Buffer,那么遇到传统节日春节的时候,我们是怎么平稳度过的呢?

春节就是一场保卫战,前期需要充足的准备,每年的Q4,大概国庆后就开始准备春节的事项了。到除夕夜那天,中间会经历圣诞节和元旦节的考验,这是2次战争前的检验。本文主要讲解微信C2C业务春节突发应对。微信C2C主要包括了单人消息和群消息里面收发图片、视频和文件。

主要从4个层面阐述应对春节的保障工作,分为软件保障、硬件保障、容灾柔性保障、监控保障。

软件保障

微信C2C分布式系统承载了微信业务用户海量的图片、视频、文件的上传和下载,通过智能动态路由调度就近接入,为用户提供了优质的服务。能支撑起如此庞大的业务量,得益于微信C2C强大的分布式系统。

上图为整个微信C2C系统的架构全景图,可以分为接入点和中心点两层,主要模块有以下2个:

接入点front_http

部署于全国以及全世界各地AC和OC点的接入模块,负责一个区域的用户上传下载接入,当front_http模块接收到用户上传时,会先将用户数据写入本区域部署的TDC缓存仓库确保数据落地,TDC以LRU方式淘汰老数据,成功后返回用户成功并异步将数据回传回DC中心点。

中心点zone_http

部署于DC点的中心点的数据备份管理模块,负责来自所管辖front_http回传数据的汇总的管理,同时也负责为其他模块提供数据的查找和拉取服务,zone_http一共有三处,上海点负责国内北方地区,深圳点负责国内南方地区,香港点负责港澳台以及国外所有地区。上海、深圳均可独扛全球的C2C服务。

C2C分布式架构优势如下:

1. 微信C2C传图采用存储转发的模式,使得通信双方耦合更小,业务扩展性更强。

2. 用户根据就近原则,通过尽量短的路径连接到加速系统的前端接入点。图片、视频上传到接入点即完成操作,后续的操作对用户透明。

3.接入点与中心存储点之间建立高速的传输通道,可快速在两点之间传输。

4.接入点本身缓存数据,同一个接入点覆盖的用户间传图和视频,在接入点内部完成传输。

5.不同接入点的用户发送,接收接入点通过快速传输通道,主动推送数据到接收用户的服务点,完成加速下载的目标。

6. 接入点可以根据用户的访问情况随时新增,扩容操作简单。每个接入点上线后负载上限确定,超过的访问动态的调度到备份接点。

硬件保障:

1.容量评估和设备报备(容量系统,全面准确)

每年国庆后会针对微信业务单独做一次春节扩容报备,运维团队联合微信业务团队,对齐春节活动的增长情况,综合评估后给出一个增长比例。运维根据增长比例,结合当前系统的负载情况,通过容量系统直接计算出需要扩容的各个模块的设备量。运维根据计算的设备量情况,去资源管理系统提交下达设备报备单,通过资源审核后就可以下单采购了。

容量系统评估预览:

2. 设备申请和扩容(变更系统,一键扩容)

设备采购完毕,交付验收后,运维就可以去资源系统自助申领设备了,申领后的设备自动分配到对应的模块名称下。运维获取到扩容的机器后,可以到变更管理系统提交一键扩容,完成自动部署业务,省时省力。2016年春节扩容,线上扩容5000+台服务器,涉及50多个业务子模块,100+次上线扩容操作,从申请服务器到扩容到线上切量正常访问,只需3天时间。

容灾柔性保障

1.单机模块演习

微信业务所有的功能子模块具备单机容灾自动剔除功能。为了防止单机剔除失效,我们建立了容灾演习系统,每个月有例行的单机死机剔除演习。系统自动根据业务模块演习情况,每周安排一天演习,演习成功会有反馈,演习失败会自动建立问题单派给运维跟进。

2.单机过载压测

每个季度会对线上每个模块做一次单机性能压测,主要是测试模块程序的性能,便于及时修正过载值,防止单模块因为过载值过大导致该模块不可用引发过载失效故障,或者防止过载值太小引起资源浪费。遇到重大节日,元旦或者春节,还会配合业务客户端做一次全路径的压测。微信后台会机器人程序模拟真实用户互发文件来压测线上所有模块,便于快速找出系统的瓶颈点,节前及时解决掉。

3.容灾切换演习

每个季度,微信业务会例行进行一次容灾切换的演习。主要分2个维度,异地容灾切换和内外网切换演习。

异地切换:由于分布点主要集中在各地的OC节点,平时有异常可自动调度到备份节点。但是中心节点只有3个,各地分担了全网用户的数据落地请求。若其中有一个地区的中心节点数据上传有问题,系统可切换到另外中心点上传。由于前端分布点有cache池,数据下载短时间内不会影响很大,这样就达到了中心节点异地切换的目的。

内外网切换:内外网切换主要是中心节点之间的通讯切换,正常情况下深圳、上海、香港三地的中心节点都是走专线互联拉取数据的。若专线异常,这个时候可重试外网连接,也可人工主动切换到外网,根据专线压力的情况,可以按百分比主动调度访问到外网去。

4.突发柔性演习

微信的访问量很庞大,其中视频的流量春节增长迅速,不是简单的扩容就能解决突发流量的容量问题,我们可以提供有损的服务来保障系统的稳定性。针对微信的业务,主要包括朋友圈视频,消息视频、图片,是重点的流量柔性对象。我们建立了一整套立体的柔性方案。柔性分三层:

第一层粗暴柔性,可以直接按比例拒绝用户的上传和下载访问;

第二层分场景柔性,贴近业务场景。例如分上传、下载、拉列表、图片、视频、文件等做适当限制;

第三层分维度柔性,在业务场景的基础上进一步细化,例如按文件大小、访问速度、访问比例、时间段等展开限制。

三层柔性环环相扣,根据实际的情况使用。系统访问持续增长的情况下,可以根据系统负载,循序渐进加大柔性力度,保证系统负载稳定在一个平衡值。遇到系统突发被打爆,也可以一棍子打压,直接调整拒绝比例,系统负载立马下降恢复后,再逐渐放开,配合业务场景的维度柔性,慢慢控制系统负载在一个稳定值。

针对春节我们会制定出详细的柔性方案,根据当前系统扩容后的负载和可支撑的能力,根据各个子业务预计增长情况和需要支撑的量,分类详细列出各个维度柔性的触发条件和采取的柔性策略,春节当晚严格按照计划执行,确保系统在可控范围内。

监控保障

针对春节的保障,监控视图不可缺少,除了平常正常的监控视图外,春节针对性的主要分三个维度:

1.春节监控视图

主要包括需要监控的流量、访问次数、延时和成功率等情况。会做成PC端,其中重要视图投放到电视监控屏幕,同时手机端也同步展示,方便大家节日期间随时掌握业务状态。

2. 柔性视图

主要包括柔性生效后产生的效果监控,例如拒绝的用户数,限制的视频访问次数、限制的回传文件数等等。

3.秒级监控视图

秒级监控是一个重要的监控,主要适用于突发场景,对时间敏感的业务。例如微信元旦、除夕凌晨效应,就是用户发图太集中,大部分集中在第一分钟的前10s,我们传统监控都是分钟级别,一分钟一个点,系统完全看不到用户的行为,所以需要做到秒级监控,拉长为60个点,用户访问及时信息大屏动态展示,便于我们配合柔性策略及时下发,防止系统冲垮崩溃。

除夕保障

节前通过软件保障、硬件保障、容灾柔性保障、监控保障4个维度的准备后,结合扩容后的系统负载情况,运维团队会综合各个因素,列出除夕当天的预案应对策略。主要分2个维度。

柔性操作类:已经明确需要柔性打压的操作,除夕上午运维发布配置生效,提前完成。

另外可能发生的柔性操作,除夕高峰根据制定的计划方案严格执行。

容灾切换类:春节除夕是业务的高峰期,一旦有任何异常,需要立刻恢复业务。例如分布点异常或者丢包,立刻切走。专线拥塞立刻切外网等。微信系统确保切换高速快捷,系统切换秒级下发配置到内存。

人员安排上,春节除夕夜至少2名运维人员和2名开发人员,值班到凌晨2点。

节后总结

最后一个重要的环节就是每年春节后,运维团队、开发团队、微信业务团队,QA团队会一起针对春节的应对情况展开回顾总结,根据除夕当天的所有问题,找出我们还需要不断完善的地方,推动不断优化改进,确保来年的春节相同的问题不会出现第二次。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏SDNLAB

一个白牌厂商视角:极简交换机NOS演进史

传统的交换机操作系统(简称NOS)对大众是一个相对封闭的领域。随着白牌交换机的高速增长,NOS纷纷开源,NOS的开发者也从只有设备商工程师,扩大到互联网,运营商...

3724
来自专栏CDA数据分析师

我是如何通过Web爬虫找工作的

当时我刚从大学毕业,需要找一份工作。那时我不太喜欢社交,因此我决定以我所知道的最佳方法来找工作,即开发一个应用程序,这篇文章就介绍了我是如何做到的。

883
来自专栏web前端教室

前端工作师都能做什么?

这几年,前端开发确实是火的不行不行的, 工资也动辄十几K,几十K的, 而且前端入门的门槛确实也不高, 无非是三大块:html / css / js, 这三块里...

2037
来自专栏魏艾斯博客www.vpsss.net

搬瓦工 OpenVZ 架构 8 机房套餐升级双倍内存

1223
来自专栏纯洁的微笑

于码农而言什么样的代码才能叫做好代码?

好的代码,就像是一辆配备了优秀音响和杯架的汽车,这辆车在行驶到最高速度的时候,你听不到噪音,也不用担心水会洒出来。在它出现故障的时候,任何一名修理工都可以使用最...

913
来自专栏java一日一条

对码农而言什么样的代码才能叫做好代码?

好的代码,就像是好的笑话——无需解释就能让别人明白。如果你的代码能够做到不解自明,在大多数时候,你根本无需为其配备说明文档。

431
来自专栏互联网数据官iCDO

无埋点实现监测的真相——革新还是噱头?

小编提示:   本文是宋星老师独家为iCDO供稿。对于想要了解无埋点这一监测方法的朋友,是非常深入浅出,详尽清楚的一篇高质量文章。   这篇文章介绍了: 1. ...

5907
来自专栏企鹅号快讯

C语言真的太强大了,C几乎无处不在!

今天存在的许多C项目都是在几十年前开始的。 UNIX操作系统的开发始于1969年,其代码在1972年被重写为C语言。C语言实际上是为了将UNIX内核代码从汇编语...

3627
来自专栏大魏分享(微信公众号:david-share)

红帽助力HPC--我在Dell&RedHat HPC研讨会上的分享

前言:今日,笔者受邀参加“Dell&RedHat HPC研讨会”。会上,分享了红帽在HPC领域的解决方案。由于很多朋友关心这个话题,因此将演讲的内容分享出来,供...

3334
来自专栏九彩拼盘的叨叨叨

想雇助理帮你打理简书,让我写个程序帮你吧~

在简书上写东西,为了让更多合适的人看到,我们不得不做一些和写作无关的事。比如给专题投稿。有人会做的更多,如:给新的粉丝发介绍自己的简信;将粉丝进行分类,当写了新...

674

扫码关注云+社区