`

微信产品经理和架构师们是靠什么扛住了10亿个红包?

阅读更多

转http://mobile.51cto.com/ahot-466539.htm

微信这么大的流量,尤其是瞬间的峰值,对于任何团队和架构师都是一个极大的挑战,我们也在想,微信团队会用什么样的办法扛住了抢红包的流量,正巧今 天腾讯大讲堂的公共账号就分发出了这篇文章,尽管没有从具体的技术细节上介绍,但在宏观策略上还是相当地有学习的价值,分享给大家。

400倍的挑战

今年微信红包方式与去年用户与用户之间互发红包相比,摇红包的方式对业务量来说是一个极大的爆发,光是除夕10:30送出的一波红包就达到了1.2亿个,已经是2014年除夕夜峰值的400倍之巨(2014年峰值每分钟被拆开红包数量仅2.5W个)!

进入抢红包环节,后台数据瞬间飙升

发10亿红包,难在哪里?

微信团队总结下来有三大难点:

快——如何保证用户快速摇到红包?

准——如何保证摇到的红包能成功拆开?

稳——如何保证拆开的红包能分享出去?

大量用户在同一时间摇红包,瞬间产生每秒千万级的请求,这个量级的请求如果不加以疏导处理直接到达后台,必定会导致后端服务过载甚至崩溃。上文中除夕当天后台监控数据曲线便能说明一切——在前台重重的分流减压下,后台服务器负载仍然瞬间飙升十倍以上。

三大应对策略齐上阵

对于以上三个难点,微信后台开发团队主要通过三大应对策略应对:有损服务,柔性可用,大系统小做

有损服务-追求高可用和快速响应。

什么是有损服务?有损服务是通过精心拆分产品流程,选择性牺牲一部分数据一致性和完整性从而保证核心功能绝大多数运行。这是腾讯在PC时代积累下来的一种特色运营策略——在资源一定的前提下,互联网条件千变万化的场景中,量力而为,满足用户的核心需求。

微信红包的核心点是摇,拆,分享红包,整个系统设计时必须尽最大可能保证这三个步骤一气呵成,任何关联系统出现异常的时候马上进行系统降级,防止引起系统雪崩。

系统降级可以分为两个方面,一是把核心功能进行分拆和简化,通过辅助轻量化的服务实现,确保最短关键路径的可行,比方说在接入层置入摇红包逻辑,将每秒千万级请求转化为每秒万级的红包请求,再传到红包服务的后端逻辑,降低雪崩的可能性。

点评:有损服务就是让重要的事情先做,重要的人物先行。这在现实中也很常见,军人买票优先,领导视察封路,让领导车先行,我等小民等待也是这个路子。

同时后端采用异步分拆,接收到用户请求时仅进行合法性验证,验证完成后直接告知成功,后续业务逻辑进入异步队列进行处理,减少了用户的等待时间,也极大降低了峰值雪崩的概率。

耗时最长的入账操作,直接跳过,异步处理

另外一方面是采取过载保护措施:

微信红包的过载保护在客户端已提前预埋了策略,在连接失败或超时情况下会有相应提示,减少用户重复请求次数。接入层面也会进行自我保护,针对频繁发 出请求的客户端限制响应速度,并对系统负载划分出若干等级,达到不同阈值时引导客户端使用不同限速速率;在异常情况出现时,采取减少红包数,异步限流降低 拆/分享红包的速率等措施减轻服务器端压力;与此同时,微信红包还有全程压测流程,对整个业务链接进行自动提前评估,防止过载。

点评:在前端挡住对后端流量的进入,比如出现通信失败时,当前这个用户,对后台已经不会有什么压力了。

这画面你可能没见过,它其实早已在手机待命

在有损服务思想的重重保护下,第一波的摇红包体验活动中,微信红包几乎满分通过考验,其中过载保护的作用相当明显,在客户端、接入层层减压、过滤,最终仅把十万级压力传递到后台。

柔性可用-细化场景把握核心需求。

柔性可用是在有损服务价值观支持下的方法,重点在于实际上会结合用户使用场景,根据资源消耗,调整产品策略,设计几个级别不同的用户体验场景,保证尽可能成功返回关键数据,并正常接受请求,绝不轻易倒下。

柔性服务更具有产品的思维性质,意义在于深刻理解产品每一个场景的核心价值,把握用户在每一个场景中的核心需求,设计不同层次的满足核心诉求的办法,对柔性服务在微信红包中的实践,红包团队也有相应的措施,主要可以分为几大类。

1、系统容灾:面对大规模的请求量,系统容灾必不可少,容灾一般可分为逻辑层容灾和数据层容灾,这次微信后台开发团队在容灾布置中采用30%切换的逻辑层方案,即核心服务都能做到最多1/3服务器出问题的情况下自动容灾切换以保证服务质量,提高预警级别换取系统的可用性。

2、资源隔离:顾名思义就是把资源进行隔离减少服务支路间的影响,从逻辑入手,在资源逻辑中,当A服务同时分派任务给BC服务时,设定单个最大分配上限值,避免任意一个支路出问题影响整个服务链条,这样即使部分服务出现问题也不会影响到整个服务的崩塌。

3、快速拒绝:当服务过载时尽早拒绝请求,由服务调用方换机重试避免单一服务器重试过载,快速拒绝和有损服务中的及早拒绝是一个概念的方法,从过程的源头将问题解决,成本越低,影响越小,前端保护后端的方式来解决问题。

点评:这里面需要指出一点的是,客户端跟Web 系统不同,做这种操作的前提,是提前预计到关键路径,在客户端的版本更新中,将相关的指令和策略埋入,当接受数据获取异常时,在客户端自动就降低请求频 率,比如一次请求失败,用户肯定想二次再刷,但是可能实际上没有向后端请求,而是直接返回,请客户稍安勿躁,如果不提前埋入,到有问题时才处理是来不及 的。

4、支付分组:从支付环节入手,将所有红包分为50个组,放在50个单独的set上互不影响,单组set出问题 最多只影响1/50用户,保证多数人服务不受干扰。分组set化也是柔性可用的一个重要技术手段,这一思维非常类似于现实生活中的集装箱思维——通过标准 化,规模化的箱体设计,应对复杂多样的货物,使每个流通环节既独立又不失灵活。

5、流量预加载:从客户端入手,将语音图片等极消耗流量的资源提前让客户端自动下载预置好,提前将流量洪峰疏导,并在活动当天CDN将准备数百G带宽应对,这块也与过载保护中的快慢分离是相通的,将耗流量的服务提前加载避免高峰期间的冲突。

点评:这是提前准备,从各个路径上,把缓存用到彻底。

大系统小做-保证进程的功能单一

大系统小做应该来说,是一种意识,他的核心思想是将功能复杂较大的系统,化大为小,减少模块耦合,降低关联性,用多个独立的模块来实现整体系统的功能,大系统小做采用的是化繁为简,分而治之,便于开发和迅速实现。

微信红包如此庞大的后台系统,模块也相当之多,而这次的模块微信开发后台团队采用了系统高度模块化的方式,分成一个个高度自制的小系统,形成高内聚 低耦合的格局,每个模块之间不会过分依赖对方,这样的好处是不会因为任何一个模块而影响全部服务,避免牵一发动全身的风险,实现真正的灰度服务。

点评:降低耦合,增加问题处理时的难度和平时的可维护性。

海量服务能力决定成败

从2014的滴滴打车,到2015的微信红包,腾讯用一个个案例,去证明自身在海量服务方面的实力。事实上,真正支撑起微信红包顺畅运营的幕后英 雄,正是腾讯内部一个叫做“海量之道2.0”的技术体系。有损服务,柔性服务,大系统小做三大手段也是脱胎于此体系中。移动互联网大战硝烟味愈浓,BAT 都在为争夺支付入口使出浑身解数,在业务从起步到小跑再到腾飞的过程中,巨头背后的海量服务能力将对其最终成败有着来越发深远的影响。

分享到:
评论

相关推荐

    微信技术总监分享架构设计高清完整PDF版

    ### 微信技术总监分享架构设计的核心知识点 #### 一、微信之道——至简 - **背景介绍**:微信作为一款现象级应用,其成功离不开其背后强大的技术支撑与先进的设计理念。微信技术总监周颢在腾讯大讲堂的演讲中分享...

    微信红包的架构设计简介

    微信红包的成功不仅仅体现在其创新性的产品设计上,更重要的是其背后复杂而高效的架构设计。通过对高并发处理、实时计算、缓存优化等多个方面的深入研究和实践探索,微信团队成功构建了一个既能满足海量用户需求又能...

    iOS版微信抢红包插件(支持后台抢红包).zip

    iOS版微信抢红包插件(支持后台抢红包).zipiOS版微信抢红包插件(支持后台抢红包).zip iOS版微信抢红包插件(支持后台抢红包).zipiOS版微信抢红包插件(支持后台抢红包).zip iOS版微信抢红包插件(支持后台抢...

    微信自动抢红包7.0.3.zip

    微信自动抢红包7.0.3.zip微信自动抢红包7.0.3.zip微信自动抢红包7.0.3.zip 微信自动抢红包7.0.3.zip微信自动抢红包7.0.3.zip微信自动抢红包7.0.3.zip 微信自动抢红包7.0.3.zip微信自动抢红包7.0.3.zip微信自动抢红包...

    微信自动抢红包源码

    微信自动抢红包源码是一种基于...总之,微信自动抢红包源码是一个涉及Android系统编程、事件监听、服务运行、权限管理等多个技术领域的项目,对于提升Android开发技能和理解应用程序的交互机制具有很高的学习价值。

    微信抢红包脚本源码.zip

    微信抢红包脚本源码.zip微信抢红包脚本源码.zip微信抢红包脚本源码.zip 微信抢红包脚本源码.zip微信抢红包脚本源码.zip微信抢红包脚本源码.zip 微信抢红包脚本源码.zip微信抢红包脚本源码.zip微信抢红包脚本源码.zip...

    微信小程序的架构与系统设计的心得.docx

    微信小程序的架构与系统设计的心得.docx微信小程序的架构与系统设计的心得.docx微信小程序的架构与系统设计的心得.docx微信小程序的架构与系统设计的心得.docx微信小程序的架构与系统设计的心得.docx微信小程序的...

    微信小程序红包源代码

    微信小程序红包源代码是开发微信小程序时用于实现红包功能的完整代码库,它涵盖了微信小程序的前端用户界面和后端服务器逻辑。这个源代码适用于那些希望在自己的微信小程序中集成红包发放功能的企业或开发者。 首先...

    模仿微信发红包代码

    在IT行业中,编程是一项至关重要的技能,而模拟微信发红包的功能是许多开发者在社交应用开发时可能会遇到的一个挑战。微信红包功能的实现涉及到随机算法、并发处理以及数据库操作等多个技术领域。下面,我们将深入...

    微信红包源码微信CPA微信抽奖活动推广源码

    微信红包源码和微信抽奖活动推广源码涉及到的技术和知识点主要包括以下几个方面: 1. **微信开放平台接口**:微信红包和抽奖活动的实现离不开微信开放平台提供的API接口。开发者需要注册成为微信开放平台的开发者,...

    微信Android模块化架构重构实践.pdf

    2. 微信架构历史回顾:文档中提到的微信-IALoEA架构的演变,从简单分层架构、多进程架构、到多子工程并行开发架构,可以看出微信在不断的发展过程中,如何根据自身产品特性和业务需求,对架构进行迭代和优化。...

    微信红包程序实现代码

    微信红包程序:给定一个钱数m,发红包人数n,其中10, n将钱数拆成几个指定的吉利数(如1.66,1.68, 16.8,1.78,17.8,1.88,18.8,1.99,5.20,0.66,6.6,6.66,0.08,0.88,8.8,8.88,0.99,9.9,9.99)并发出,要求要发出n个红包...

    H5微信裂变红包源码.zip

    在实际应用中,H5微信裂变红包广泛应用于品牌推广、产品营销、用户增长等多个领域。例如,电商平台在大促期间通过裂变红包吸引用户分享,增加曝光;教育机构利用裂变红包鼓励学员邀请新用户注册,提高用户粘性。裂变...

    微信插件化架构

    1. **模块化设计**:微信插件化架构的核心思想是将一个大型的应用程序分解为多个小型、独立的模块,每个模块都有明确的职责,可以单独开发、测试和部署。这样做有助于降低系统的复杂性,提高代码的可读性和可维护性...

    微信强制分享红包裂变系统源码

    微信强制分享红包裂变系统是一种基于微信平台的营销工具,其核心目的是通过用户间的红包分享来实现快速的用户增长和流量裂变。这种系统通常包括以下几个关键知识点: 1. **红包裂变机制**:红包裂变是通过让用户在...

    .net版微信红包开发Demo

    微信红包作为微信支付的一种独特功能,深受用户喜爱,其背后的开发技术也引起了广大开发者和技术爱好者的关注。本文将深入探讨基于.NET平台的微信红包开发,帮助开发者理解并掌握如何利用.NET技术实现微信红包功能。...

    微信全新裂变红包

    这一功能结合了传统红包的趣味性和社交媒体的传播力,让用户在发送红包时可以将其分享到朋友圈、微信群或者其他社交渠道,从而引发更多的用户参与,形成一种快速扩散的效果,也就是所谓的“裂变”。 在微信红包的...

    weixin, 微信裂变红包&微信红包接口&企业付款.zip

    微信裂变红包、微信红包接口和企业付款是微信支付服务中的关键组成部分,这些功能为企业和个人提供了丰富的互动和营销工具。本文将深入探讨这三个概念及其在实际应用中的技术实现。 一、微信裂变红包 微信裂变红包...

    微信支付 微信红包 JAVA 几行代码搞定

    微信支付、扫码支付和微信红包是微信提供的便捷移动支付功能,对于开发者来说,能够快速集成这些功能至关重要。本文将详细讲解如何使用JAVA实现微信支付、扫码支付和微信红包的接口调用,以及如何进行验签操作,使得...

Global site tag (gtag.js) - Google Analytics