专业 靠谱 的软件外包伙伴

您的位置:首页 > 新闻动态 > 微信红包软件系统架构设计

微信红包软件系统架构设计

2016-02-24 16:36:04

抢枪抢!随着互联的迅速发展,很多人表示:除夕的四大习俗已经从过去的贴春联、贴门神、守岁、领压岁钱,过渡到现在的抢红包!抢红包!抢红包!抢红包!

相对于每年双十一的“买买买”,似乎除夕的“抢枪抢”伴随着清脆的“叮铃”声更能让人肾上腺素飙升,造就了今年除夕夜微信红包收发总量80.8亿个,是羊年除夕10.1亿个的8倍。最高峰发生在00:06:09,每秒钟收发40.9万个红包。

微信红包 是怎么扛住全球用户的!

如此庞大的微信红包收发行为,无疑让微信红包成为了一个现象级的产品。从2014年微信红包的试水;到2015年引入摇一摇红包,峰值1400万次/秒,8.1亿次每分钟;再到今年的微信红包大联欢。微信红包已经成为很多人拜年的一种途径,成为土豪刷存在感的一种方式。

那么让我们来看看,为了确保微信红包在高并发访问的情况下稳定运行,工程师们除了在除夕的彻夜坚守之外,究竟还采取了哪些技术手段扛住全球用户?简单来说,三个词:

可控——对核心支撑的评估梳理

柔性——对系统可靠的质疑态度

应变——对极端情况的充分准备

微信红包 是怎么扛住全球用户的!

数据中心

可以说,对于任何拥有海量系统的企业都会面临敏捷的困境。因为海量系统要保证千万级用户同时在线,亿级摇一摇,但集群百亿级的服务请求和99.95%的可用性,导致了在海量系统上保证敏捷性,无异于在悬崖边上跳舞。

一、可控:对核心支撑的评估梳理

养花的人都知道,修剪枝叶是让植物更好生长的重要一步。在做一款产品时也会面临同样的问题:系统在随着业务需求的快速迭代上线过程中,会渐渐变得荆棘密布,大量的非核心调用、基础模块的重复调用、随意的跨城调用,淹没了核心的关键路径,所以当流量暴增时,会压垮那些准备不足的分岔路。

微信红包 是怎么扛住全球用户的!

微信架构(图片来自网络)

此时便需要“养花人”的调控:突出核心路径、进行容量评估和利用冗余多活。

1、做“减法”

面对布满荆棘的分岔路,很好的办法就是突出核心路径,给错综复杂的路径做减法。

比如异步非核心调用、消灭重复调用、合并相关调用、减少跨城调用还有特殊裁剪静态信息调用。微信红包团队通过在服务框架层增加染色信息,并层层进行上报收集,生成出完整的调用关系图。对着调用关系图,通过尽量做减法,将其中最核心的路径进行标记出来。而优化了核心路径之后,也为下一步的容量评估做好了准备。

微信红包 是怎么扛住全球用户的!

做“减法”(图片来自大讲堂)

2、容量评估

微信红包团队已经在优化核心路径过程中,进行了路径染色,然后按照业务预期,从用户进入每个业务场景的每秒触发次数作为源头,分解到各场景内操作的核心路径,制定了容量核算表,从而评估出为了满足业务预期所需要的容量:单接口QPS;模块整体QPS;模块带宽流量;跨城穿越带宽流量。

这样的扩容工作以具体的容量评估和特定的压力测试为基准,能够给出运维上需要提供的各模块机器数,同城带宽和跨城带宽的需求。

微信红包 是怎么扛住全球用户的!

容量评估

毫无疑问,这样的扩容工作更有计划性,避免了资源的浪费,也避免了评估不充分而边压测边扩容带来的效率低下。

3、冗余多活

可是微信红包做完了核心路径和容量评估,是不是就做到了可控呢?答案是否的。因为墨菲定律告诉我们,任何事都没有表面看起来那么简单。而冗余多活的存在正是提高系统稳定性的不二法宝。

微信红包 是怎么扛住全球用户的!

抢红包

如果有两种或两种以上的方式去做某件事情,而其中一种选择方式将导致灾难,则必定有人会做出这种选择。在除夕跟部门败给墨菲定律,所以还需要针对每个核心资源,尽可能来做到消除单点和单策略,以降低坏事情发生的可能。

除了多点冗余部署的无状态逻辑层(一方面负载均衡,一方面消除单点)以外,微信红包还采用了多套调用方式、多套数据获取和多套访问链路。

二、柔性:对系统可靠的质疑态度

柔性也常被称为柔性可用,目的是在服务请求次数超出预期的情况下,宁可用户体验降级,也要保证核心应用不受损,运用过载保护不能让系统“死”掉。

微信红包 是怎么扛住全球用户的!

体验降级(图片来自大讲堂)

微信红包 是怎么扛住全球用户的!

过载保护(图片来自大讲堂)

在应用设计过程中,结合用户使用场景,根据资源消耗,调整产品策略,设计几个级别不同的用户体验场景,保证尽可能成功返回关键数据,并正常接受请求,先解决用户最最核心的需求。而柔性可用在微信红包中,主要可以分为系统容灾、资源隔离、快速拒绝、支付分组等几大类。

微信红包 是怎么扛住全球用户的!

微信红包

除了体验降级以外,过载保护也是微信红包团队在提升应用柔性可用时的重要手段。系统尽可能提供自己所能的服务,当压力过大时,丢弃无法处理的请求(做好前端的友好提示)而使得系统活下来,避免出现雪崩,主要包括:事前保护的接口限频和事中保护的快速拒绝。

三、应变:对极端情况的充分准备

其实这里的应变和我们日常意义上的应变是一个意思。古人说:谋事在人成事在天;也说:事在人为。而微信红包团队为了确保应用正常运行,可谓“无所不用其极”。

微信红包 是怎么扛住全球用户的!

抢枪抢!

针对前面的冗余多活和柔性可用有两种实施策略:一种是系统自动触发,一种是人工干预(制定《应急预案手册》)。

由于实际情况可能决策比较复杂,自动触发的验证很难覆盖全,所以微信红包团队最终决策还是基于充分的监控,在除夕当晚进行人工干预。

除了以上的应变方法之外,微信红包还通过零钱包将复杂的请求路径巧妙引流,降低了服务器压力。

众所周知,在支付中如果使用零钱,那么请求是在内部系统就可以完成。如果是使用银行卡,那么支付请求必须发送到银行进行扣款。很显然,银行接口的性能对于整个系统来说是一个局部短板。通过合理引导压力,在跨年时刻到来前,只要用户零钱足够,就优先引导用户使用零钱,巧妙的降低了银行卡支付请求量。

如今,除了微信收发红包,腾讯还通过摇一摇红包,QQ红包等方式让“抢红包”在2016年除夕成为“继春晚之后的第二大娱乐节目……”

 

关于:中科研拓

深圳市中科研拓科技有限公司专注提供软件外包、app开发、智能硬件开发、O2O电商平台、手机应用程序、大数据系统、物联网项目等开发外包服务,十年研发经验,上百成功案例,中科院软件外包合作企业。通过IT技术实现创造客户和社会的价值,致力于为用户提供很好的软件解决方案。联系电话400-0316-532,邮箱sales@zhongkerd.com,网址www.zhongkerd.com


  上一篇   [返回首页] [打印] [返回上页]   下一篇