写点什么

1 分 36 秒,100 亿,支付宝技术双 11 答卷:没有不可能(下)

  • 2019-11-26
  • 本文字数:5080 字

    阅读完需:约 17 分钟

1分36秒,100亿,支付宝技术双11答卷:没有不可能(下)

4 关公、灵隐寺和压测

2013 年双 11 的另一个特殊之处是,支付宝的备战室里多出来一幅关老爷的挂画。


挂画是郑洋飞“请”来的,不过“拜关公”作为支付宝技术团队的一项传统,早在他入职之前就由来已久。源头据说要追溯到支付宝建立之初,每到重要的系统更新时,工程师们就会在旺旺群里转发关公表情包,以求更新顺利,“别出 bug”。


隔了一年之后,关公像“升级”了,有同学去西安校招时看到了关公的皮影艺术品,就“请”了一个回来放在备战室。后来,程立买了一尊木质关公像放过来,去年,副 CTO 胡喜又买了一尊关公铜像。


除了拜关公,去寺庙烧香也是例行项目,视目的地不同,还分为“灵隐寺派”和“法喜寺派”两大派别。至于哪边灵验,说法不一,但据观察,每年双 11 过后,程立、胡喜就会亲自率队上山还愿,从支付宝大楼一路步行到上天竺法喜寺,回来的途中,还会沿途捡垃圾做公益。


技术是纯粹的科学。技术人难道真的相信求神拜佛能避免系统故障和 bug 吗?


“心理上,我觉得还是挺有用的。”陈亮说,“主要是表达对于不可预知之物的一种敬畏。虽然我们已经做了多年技术,但技术的道路上还是充满了很多不可预知的东西。”


不可预知,构成了工程师们每年面对双 11 最大的焦虑感来源。


他们用各自的办法缓解双 11 迫近的压力。有人是运动派,用跑步或打球放空大脑,有人是“强迫症”派,一遍又一遍地 check 代码才能安心,还有人是“吃货”派,迎战之前必定要先组团去吃海底捞。


全程参加了过去 11 年全部双 11 的赵尊奎,在被问到“哪年最不好搞”时,秒答曰:“哪年都不好搞。”同样“全勤”的陈亮则表示:“14 年之前,我们对于双 11 零点的信心,如果非要说一个数字的话,60%吧。”


但他很快补充:“不过 2014 年之后,这个数字就变成 95%了。”


陈亮的信心,来自于当年支付宝压测体系的建立。这一次不再是手动调配置测单机了,而是创建出仿真环境让系统去跑,提前找出系统的问题并及时修复,以免在正式战场被打个措手不及。


“压测让双 11 开始从一个不确定的事逐渐变成确定的事,它极大地改变了我们对于双 11 稳定性的保障方式。”有“压测小王子”之称的郑洋飞说。


虽然 2014 年的压测仅覆盖核心系统,但这个体系已经帮了大忙。在双 11 之前的一个月里,它至少让一百多个致命的问题提前暴露出来。“如果其中有一个没有修复,我们 2014 年的双 11 肯定就挂了。”陈亮说。


5 1%?或 10%?

压测这一“压”,既压出很多隐患,也压出了一个大问题:支付宝所用的 Oracle 数据库在压测之中“抖”了起来,性能眼见得触到了天花板。


2014 正是移动互联网大爆发的年份。指数增长的移动支付比例势必带来比往年更汹涌的流量峰值,Oracle 肉眼可见地支撑不住了。


再买服务器?成本吃不消,而且为了应对峰值而增添的机器,平日里没有用武之地,完全是资源的浪费。


还有没有别的办法?有的。阿里自研的分布式数据库 OceanBase,从淘宝被划到支付宝后,已经沉寂了两年,正在焦急地寻找一展身手的舞台。


但是一听说是自研的数据库,业务满脸都是狐疑。跟交易和金额直接相关的数据库,只要错一个数据,后果就不堪设想,别说双 11 这么大的流量,即使平日,要不要用这个没经过验证的产品,也颇要斟酌一番。


先切 1%的流量给 OceanBase 试试吧。这是大家争论了好一阵后得出的方案。


但是 Oracle 在压测中的表现显示,缺口不止 1%,而是 10%。


OceanBase 说,我们来承接这 10%。


10%,听起来不多,但双 11 的 10%,相当于平日里的最高峰值。如果 OceanBase 能平安无事地接住这 10%,就意味着它可以担起支撑支付宝日常运行的重任。


OceanBase 必须证明自己有这样的能力。“我们找了淘宝的同学,协调了很多资源做了一个测试,主要校验淘宝订单的金额和支付宝交易金额是否能吻合。”DBA 团队的工程师师文汇说,当时的方案很谨慎,如果 OceanBase 出现了问题,随时都可以切回来。


测试结果,OceanBase 没有错漏一个数据。程立当即拍了板:10%都切给你们。


这个决定成就了 OceanBase 在双 11 的首秀,“相当于 Oracle 和鲁肃(程立的花名)都帮了我们一把。”师文汇笑着说。


这时距离 2014 年的双 11,时间已经不足两周。可靠性虽然经受住了考验,但 OceanBase 毕竟是个诞生才四年的年轻数据库,小问题层出不穷,比如响应时间长达 10 毫秒,比 Oracle 差了好几个数量级。最后十来天,师文汇和全团队的同学一起,硬是把它优化到了 1 毫秒以下。


“做了这么些年,对它的容量和性能还是比较有信心的。”师文汇说。


他说得轻描淡写,但在这个曾经面临团队解散项目取消的产品身上,他和整个团队一起倾注了多少心血,除了他们自己之外,谁也说不清楚。


OceanBase 最初并不是为双 11 而做的,但在双 11 这个舞台上,它第一次获得了聚光灯下的位置,并且表现卓越,从此,支付宝开启了核心交易系统完全搬迁上 OceanBase 的进程。


到今年,OceanBase 对内 100%承载蚂蚁业务的流量。对外,在被誉为“数据库领域世界杯”的 TPC-C 基准测试中,打破了由美国公司 Oracle(甲骨文)保持了 9 年之久的世界记录,成为首个登顶该榜单的中国数据库产品。


6 我赢了一只 apple watch

2015 年,李俊奎去拜访了上海证券交易所,那里的交易系统部署在 6 台大型计算机上,交易峰值能达到每秒 10 万笔。


他大为惊叹:10 万笔!何等高不可攀的数字!什么时候支付宝也能达到就好了!


回到杭州,他马上与同学们分享了这次见闻,结果同学们告诉他说,今年我们的目标就要超过每秒 10 万笔了。


李俊奎一想,这种一听就不可能的目标,是支付宝的作风,没毛病。


与此同时,郑洋飞则在为这个目标头痛不已。他刚刚跟他的主管打了一个赌,赌的是他作为 2015 年双 11 全链路压测的负责人,能不能保障双 11 的支付不出任何问题。赌注是一只 apple watch。


这一年是 90 后的郑洋飞第一次挑大梁,从双 11 的参与者转换角色成为一个项目的主导者。但这一年也是他和团队都“忍辱负重”的一年,上半年,因为频繁不断的可用率问题,他们做稳定性的团队也在频繁遭受打击,士气不振,不少同学选择了离开,内外的质疑声也接连不断,那几个月,空气里都仿佛写满了“难熬”二字。


“当时团队没几个人了,但是人人都憋着一口气,想着一定要把双 11 这个事情搞好。”郑洋飞说,“就是不想让人觉得支付宝不行。”


局面有如背水一战,如果失败了,想要“翻盘雪耻”就要再等一年。因为双 11 每年只有一次,不仅是一年一度的大考,更是一年一度的舞台。按照系统部资深技术专家杨海悌的说法,“人人都想把自己一年的努力拿到双 11 去验证和展示,不让上还不高兴。”


跟 2014 年的全链路压测比起来,2015 年主要要做几个方面大刀阔斧的改进:一是要从核心系统扩展到全部系统,二是要平台化,也就是打造一个全链路压测的平台工具,三是要跟整个集团的压测打通联动。


“老实说,非常忐忑。”郑洋飞心里没底。


当双 11 零点的洪峰扑面而来时,他已经忘掉了 apple watch 这回事。有一个压测没验证到的数据库定时任务,让曲线看上去不那么平滑。“稳定压倒一切”的宗旨之下,系统只要一抖,整个团队的心也跟着抖了起来。迅速排查的结果是,系统整体没出问题,但压测遗漏的一些细节,让结果不是那么完美。


“曲线不是特别好看。”他不无遗憾地说。


郑洋飞最终赢得了这只 apple watch,但对于他而言,除了奖品之外,这只 apple watch 更有了别样的意义,时刻提醒他即使做了再充分的准备,也没有万无一失。


7 对“丝般顺滑”的追求永无止境

其实每一位支付宝工程师的心中,都有一条的“完美曲线”。


理想之中,它应该是这样的:双 11 零点,洪峰来了,曲线漂亮地攀升,没有骤升骤降,不要用频繁的抖动去折磨大家脆弱的神经。


如果要浓缩成一个词,那就是“丝般顺滑”。


但是,每一次为此而做的技术演进和架构变更进行到一定阶段,“你都会发现一开始可能设想得非常美好,但到了一定的规模之后,挑战就接二连三地来了。”杨海悌感叹道,“量变产生质变,这句话不是虚的。”


双 11 的“量”,早已一骑绝尘地进入前所未有的领域,2016 年双 11 仅用了 6 个多小时,交易额就已超过 2014 年全天。这些年以来,都是自己在不断刷新自己的纪录。


在这样的量之下保障稳定,难度不止提高了一个数量级。


还记得 2012 年底制定的架构革命之“三年计划”吗?它真的持续了三年,这场最初是为了解决数据库连接数和机房限制而进行的架构革命,在三年的演进过程中,又衍生出很多其他的架构,比如异地多活、容灾,弹性的容量调度等,直到 2016 年,才算全部落地。这之中每一步的演进,都是为了让系统具备动态扩容能力,能够顺滑地进行弹性的扩展和伸缩。


“大”是考验,“小”也是考验。


师文汇体会最深刻的瞬间,不是 2014 年 OceanBase 一举成名的时刻,而是 2016 年一次小小的测试。在这个测试里,他发现了一个指标有一点异常——非常不起眼,2 毫秒的偏差。


“2 毫秒而已,如果在别的地方,很可能就会被判断为无关紧要,然后漏过了。”但他的团队中的一位小伙伴,非常认真地去检查了这个问题——万幸如此。后来事实证明如果不解决这个问题,那年的双 11 就会有大麻烦。


“即使资源不足、时间紧张、软件有各种不完善的地方,但我们的小伙伴不会放过任何一个问题。”师文汇感慨。


早些年,流量曾是实现完美曲线最主要的挑战,但是越到后来,随着业务的不断拓展,工程师们越来越清楚地认识到,稳定压倒一切不假,但技术更要着眼于未来。


2017 年,是贺岩加入支付宝的第九年。这一年支付宝实现了离线在线混布,离线任务的大量闲置资源可以被用于在线任务,从而大大提升了资源的利用率。


“在一些小的场景中,这种效率提升能带来的节约可能不那么突出,但在我们这样的体量上,它所带来的就是不可估量的一整个未来。”贺岩说。


有了前人积淀这么多年的基础,面向未来的路,就越走越顺利了起来。


2018 年双 11,支付宝其实保障了两个大促,天猫的大促,和支付宝自己的“码上双 11”等玩法。这一年的故障数比前一年下降了 70-80%,首次实现大促全天平稳。


大队长李铮非常淡定:“说白了,就是我们把各种风险通过系统化或工程化的流程,控制得比较好。峰值出现的过程,也都在我们的预期之内。”


2019,则是双 11 的“云原生”元年。


如果说技术是像叠积木那样一层一层累积起来的,那云原生就是最下面的基础,打好了这层基础,上层的应用就像是站在了巨人的肩膀上,生来就具备了一系列强大的能力。业务无需再过多地担忧技术问题,只需要专注于业务代码即可。


8 点亮全世界

故事讲到这里,不知大家是否还记得,当年因为每秒两万笔的峰值目标而惊呼“不可能”的同学们。


当年,每秒两万笔是他们举全体之力奋斗半年才能冲上的高峰,而去年,每秒两万笔已经成为支付宝再日常不过的状况,随随便便,一秒钟的事。


这样的巨变真实发生了,只是身处当时当地,谁也没有想那么多。几乎每一位工程师都表示:“每年搞完双 11,下一年的目标就出来了,然后我们就为着下一年的目标去进行相应的准备和努力。”


一个目标,又一个目标,在征服一个又一个“不可能”的过程中,曾经以为遥不可及的标高,都一一被甩到身后。当年高不可攀的每秒 10 万笔,今天看来不过小菜一碟。


只有当回头的时候才有所感觉,在某一天忽然发现,原来已经走出了那么远,原来已经攀登到了那么高的地方。


而当年那些惊呼不可能却又拼命将不可能变成现实的年轻人,已经纷纷长大,他们现在有着更多的从容淡定,上限在哪里没人知道,更大的可能是,没有上限。


流量数据的增长也早已不是双 11 技术保障的全部。更多复杂的业务和玩法,在技术的成果之中生长起来,反过来又为技术的发展提供动力。走出双 11,它们还能走入很多的场景:新年红包、五福集卡……


——或者走出支付宝和阿里巴巴。


那些由支付宝的工程师们创下的奇迹,正一一变成产品,服务更多的金融机构。至今已有数十家银行和金融机构用上了 OceanBase,压测平台、云原生等技术也纷纷走向产品化,支付宝通过历年双 11 沉淀下的技术和经验,正在拉动整个中国的互联网金融科技一起飞奔。


——或者走向全世界。


双 11 早已不仅是中国的双 11,而是成为了一场全球的狂欢。与双 11 一起,技术也在走向全世界。


“不过要是说到我们的理想,那就是将来某一年双 11,整个备战室空空荡荡,除了关公像之外,不需要有任何同学留守,智能化的系统能搞定一切问题,而我们只需要捧着茶杯或喝着酒,看着丝般顺滑的曲线。”


对于巩杰所展望的这种未来,现场就有同学笑了。“不可能吧!?”每年双 11 都如同打仗一般,救兵如救火。


但是谁说不可能呢?毕竟,他们是那样一群已经把太多的不可能变为现实的人。


本文转载自公众号蚂蚁金服科技(ID:Ant-Techfin)。


原文链接:


https://mp.weixin.qq.com/s/RYahQaZVJH66YkTkmga6Ng


2019-11-26 14:391787

评论

发布
暂无评论
发现更多内容

通过线路输入功能快速创建吉他谱

懒得勤快

闲鱼消息发展回顾

OpenIM

17. 关于超人工智能来临,霍金的忧虑

数据与智能

人工智能

测试需求分析

刘帅强

图遍历算法

6979阿强

图遍历 GraphScope

Python——绑定与方法调用

在即

9月日更

枚举在 Golang 中的实现

baiyutang

Go 语言 9月日更

雪花算法,什么情况下发生 ID 冲突?

程序员马称

Java lua redis 雪花算法

linux系列之:告诉他,他根本不懂kill

程序那些事

Linux 命令 程序那些事 kill

还重构?就你那代码只能铲了重写!

小傅哥

Java 小傅哥 代码优化 代码重构 开发标准

【预告】网络研讨会|下一代汽车操作系统微内核seL4:seL4基金会主席谈物理系统安全工程实践

鉴释

自动驾驶 操作系统 微内核

镜子-或许我们也和Pod一样生活在虚拟世界

Lance

图计算的应用

6979阿强

【Flutter 专题】46 图解新的状态管理 Provider (一)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 9月日更

手撸二叉树之翻转二叉树

HelloWorld杰少

9月日更

乘着汽车智能化的浪潮,“汽车人”的职业方向选择(二)

SOA开发者

程序员 软件 汽车 职业发展

DBA:介里有你没有用过的“CHUAN”新社区版本Redis6.0

华为云开发者联盟

redis 开源 多线程 Redis 6.0 华为云DCS

玩转anyRTC用户控制台

anyRTC开发者

音视频 WebRTC 语音通话 视频通话 用户后台

Android音频API

轻口味

android 音视频 引航计划 9月日更

我用MRS-ClickHouse构建的用户画像系统,让老板拍手称赞

华为云开发者联盟

数据库 标签 用户画像 MRS ClickHouse 列式存储

在线JSON转sarcastic工具

入门小站

工具

“妈我不想去上课!”“不行你是老师!”

梦想橡皮擦

9月日更

GaussDB(for MySQL)如何快速创建索引?华为云数据库资深架构师为您揭秘

华为云开发者联盟

数据库 算法 索引 GaussDB(for MySQL) MySQL索引

【Vuex 源码学习】第三篇 - Vuex 中 State 状态的实现

Brave

源码 vuex 9月日更

架构实战营模块三作业

michael

#架构实战营

Supervisor 基础配置

耳东@Erdong

Supervisor 9月日更

【LeetCode】寻找峰值Java题解

Albert

算法 LeetCode 9月日更

命令行如何执行jar包里面的方法

FunTester

性能测试 反射 接口测试 测试框架 FunTester

针对各种指标数据如何选择合适的算法?

云智慧AIOps社区

技术 算法 数据 智能运维 指标

一期投资30亿!“中国—东盟星动云算力中心项目”将落地广西巴马

旺链科技

数字经济 产业区块链 一带一路

Sentinel 常用流控算法

Z

sentinel 流控算法 服务监控 服务降级 流控

1分36秒,100亿,支付宝技术双11答卷:没有不可能(下)_文化 & 方法_Geek_cb7643_InfoQ精选文章