前几天,支付宝的一位朋友告诉我,他们现在经常要拜二爷,我说哎呀呀不敢当有什么事情咱们可以用正常人类的方式沟通,拜来拜去我多难为情,他冷笑一声,发来一张图
抱歉打扰了,原来人家拜的是关二爷
(贡品怎么是格子衫)
…
我觉得奇怪,一个科技公司怎么会有这样的习惯,便追问背后的原因,于是他给我讲了一个支付宝内部「自己人打自己人」的故事,听完觉得即新奇,又热血,给大家也讲讲。
我们都知道支付宝做的产品大都是跟钱相关的,一旦涉及钱,安全和稳定就显得无比重要,尤其随着用户量的增加,任何一个小闪失,乘上用户数,就会变成一个大灾难。
但凡是系统就一定会存在弱点和漏洞,传统的软件工程中我们会用测试的方式来保障质量。传统测试偏向正向思维,出发点是让系统健康、可用。测试工程师轻轻抚摸系统,乖,张嘴,啊~好的,扁桃体正常。
可是在支付宝却有这样的一支团队,他们的工作就是给自己的同事「搞破坏」,换句话说,他们会用挑战和攻击的方式来保障系统的稳定性和质量。最不可思议的是,这支在内部被称为「蓝军」的团队,获得了伤害豁免权。也就是说,他们不需要对业务负责,只对应用架构及防御系统的稳定性和可靠性负责。他们唯一的任务就是用各种手段去破坏与他们相对抗的「红军」所负责的业务系统。
大部分开放式的系统都易攻难守,更何况攻击还是来自朝夕相处的同事,他们最熟悉系统的软肋、风险和漏洞,甚至还知道你的作息时间。
说不定各种逻辑防御机制设计了半天,结果人家趁你起身去上厕所把电源拔了,或者把光纤给弄断——这可不是段子,技术风险本来就包含各种天灾人祸,断网、断电甚至人员误操作,系统都应当能扛得住。
比如前些日子深圳台风,听说很多深圳机房的流量就迅速被调整,以降低系统性风险。今年云栖大会,现场还演练了异常断网情况下多中心的自动切换。总之,就是把过去那些所谓「人力不可抗因素」重新定义了一下,用技术的力量硬是给抗住了,很热血。
还听说蓝军曾在红军工程师结婚的时候发起过突袭,害得一群程序员在婚礼现场掏出电脑应急,这个下手就有点儿太狠了,人家姑娘不得恨死你?
这些针尖对麦芒的对抗促使双方技术能力和框架的不断演进。
蓝军研发了一套字节码级别的故障注入系统 Awatch,可以实时对运行中的业务系统进行任意链路的编织侵入。通俗的说,大概意思就是在正常业务链路的底层下毒,扰乱业务数据和服务请求,基本是霰弹枪似的面状破坏性攻击。
魔高一尺道高一丈,红军就上了一套实时核对平台,可以做到分钟级甚至秒级发现异常,也就是说,蓝军下毒,毒效还没发作,就会被侦测和定位。在此基础之上,红军还加入了人工智能的戏码,让平台一跃成为智能实时核对平台,据说这套防线体系已经覆盖了支付宝 80% 以上的业务。
蓝军一看注入下毒不行,也开始做系统升级,基于 Awatch 探针探测数据流,进行「弱点挖掘」,这套弱点挖掘的体系,能够自动发现故障场景,最高能够在 5 分钟内产生 500 多个故障场景,不断去轰击系统对故障场景兜底的能力。
如此一来蓝军的攻击变得更加高密度,哒哒哒哒哒哒。红军毕竟不能靠堆人力去防御(蓝军没别的活儿就捣乱,红军毕竟还得干业务),于是建设了一整套「故障自愈」的体系,并且跟蓝军一起研发了「无损」攻防体系,自动度量攻防结果,数据可视化。
到这里,故事终于变得和谐了一点。
这个故事中支付宝的「红蓝对抗」演练,已经沉淀出一整套成熟的风险防控体系,能够通过仿真环境,模拟天灾人祸,去考验技术架构的健壮性及技术人员的应急能力,从而全面地提升系统稳定,实现系统的高可靠性和高可用性。