账务三期

如果说支付宝三期对程立有特殊意义,那么“账务三期”则是支付宝所有技术人员共同的记忆。

2007年之后,淘宝业务量呈几何级增长,这对支付宝的系统提出了不断改进的要求。2007年上半年,支付宝计划对系统进行改造,这时公司已经积累了三年多的数据,在诸多待改进的系统中,核心账目系统最为关键。由于记载了用户核心的资金和交易信息,核心账目系统对稳定性要求很高,不能有丝毫差池,甚至连一个比特都不能错,因为错一个比特就是一个亿或者十个亿的差错。

因此,核心账目系统的改造如同一块巨石压在程立的心里,但是为了继续支撑淘宝业务的发展,支付宝的系统迟早要做一个“伤筋动骨”的改造。

这次系统改造有两个主要目标:一是将核心账目系统做一个分布式的改造,二是将记账模式全部改变。支付宝早期的模式是单式记账,收一元就记一元,改造之后要做成一个符合标准的复式记账,简单地说就是收了一元还要知道这一元是从哪里来的。这就相当于重新做了一个账务系统。难度更大的是,在改造期间业务还不能停。

2007年10月,支付宝发布完交易系统以后,所有人没有休息,又都进入核心账目系统的项目中来。当时的计划是花三个月的时间将系统开发完,然后再停机发布。

程立清楚,如果系统发布不成功,导致用户的数据和账目错了,支付宝就将面临灭顶之灾。2008年1月的一天,时任支付宝首席技术官邱昌恒问程立:“新系统可不可以发布。”程立说:“不行,还需要一个星期。”一个星期过去后,邱昌恒再问,程立说:“还不行。”又一个星期过去了,答案依然如此。

邱昌恒急了。为了等新系统,支付宝的很多新业务都暂停了,业务开发的人员想等到新系统发布后再做,但是连续几周的“跳票”,导致很多业务创新不得不暂缓。

后来,邱昌恒拍板:“系统必须发布。”当时,大家对于这个新系统没有十足把握,但箭在弦上,只能硬着头皮上。

老苗的任务是在发布期间将账目系统的资金全部平掉,只有他告诉技术团队可以开放,系统才能发布。他和资金部的葛勇荻开玩笑说:“如果这个项目做不好,我们都从22层楼上跳下去。”“你是资金部,你先跳。但你放心,我马上跟着你跳。”

为了稳妥起见,技术团队申请八个小时的停机时间,他们会利用这段时间,把过去所有的历史数据搬到新的系统里。

2008年1月1日零点,系统停机。

停机以后,老苗和技术部的同事开始把原来系统的数据往新系统里换,将数据换入新系统之后,还要做各种各样的变化,如要让原有数据符合新系统的数据格式,公司为此制订的计划是:停机八个小时,前面四个小时调换数据,后面四个小时进行数据核对。

然而在数据核对过程中,大家发现数据无法配平,而如果数据不平,系统就不能发布。接下来的工作就变成了寻找错误的数据,然而在几十亿条数据记录里面寻找出错误,无异于大海捞针。

八个小时很快就过去了,没有人发现错在哪里。15个小时过去了,问题依然没有解决。直到当天下午三点,技术团队才发现数据转化中存在问题,经过一番努力,修订之后的数据终于可以核平了。

直到这时,所有人才松了口气。大家觉得新系统差不多已经可以发布了。

为了确保万无一失,程立和老苗等人做了一个决定,先将系统发布出去放五分钟,接着马上收回来,这样就可以对数据再进行一次核对。由于系统只放出五分钟,即使出现错误,影响也是有限的。

下午三点,新系统发布。五分钟后,系统准时收回。正当所有人觉得可以高枕无忧时,核算公式检验的结果让所有人都傻眼了——数据依然不对。

离停机发布已经过去了15个小时,比原定的结束时间超过了7个小时。这时,大家劳累交加,所有人的脑子里面都像装了一团糨糊。

空气凝固了。

到底哪里出了问题?

在这千钧一发之际,程立不由自主地感觉到紧张和茫然,在责任感的驱使下,他下意识地向主控的电脑前走去。

“同学,让一让,我来。”程立拍了拍电脑旁的同事,自己坐了下来,眼睛在长长的公式上扫过,他觉得四周安静极了,只有不断起伏的呼吸声。

在程立身边围着一圈项目工程师,他们的座位组成了二十多平方米的“核心作战区”,这个区域虽然没用挡板或者隔断进行阻拦,但是“核心作战区”四周好像有一条无形的高压线,没有人过来打扰。

两个小时又转瞬即逝。

这时已经到了下午五点。

网络上就炸开了锅:支付宝到底怎么了?说好的8个小时,为什么17个小时还没有发布?马云是不是携款跑路了?……一时间,谣言四起。最不靠谱的一个谣言是,支付宝的一个“小二”在搬机器时,头不小心碰到了机器,脑子里的水进入机器里,把电路板搞短路了。

但在这时,“核心作战区”的人对这一切并不知情,他们好像在一个隔绝了一切的密闭环境中工作。为了不让项目团队感受到压力,外面的管理层从不进来问,都在一旁静静地等着。

时任支付宝总裁邵晓锋和支付宝首席技术官邱昌恒此时正在外围,他们知道,在这个时候,不打扰是最大的支持。警察出身的邵晓锋素有硬汉的冷静,但在这时,他只能坐下来,一根接一根地抽闷烟。只有邱昌恒每隔两个小时过来问一下情况。

外面的人紧张,“核心作战区”的技术人员却慢慢平静了下来。因为要专注于解决问题,程立脑子里杂七杂八的想法少了,他开始沉浸在检查公式的过程中。用程立的话说,当他感觉到压力大时,最好的解压方式就是把心中的那个“我”消掉,完全沉浸到这个事情当中去,这时就感受不到压力了。

此刻,程立突然发现,公式里面有两个数值正好差了一倍,把“+”号换成“-”号,数据就平了。当时他也不知道为什么把“+”号变成“-”号,但是这样做以后,一算确实可以调平数据。

在大脑紧张工作了十几个小时之后,已经没有人还有精力去想这一切到底是为什么。

“好,就这样发布吧。”大家在商量之后,做出了决定。

下午五点,新系统发布。

积攒了多时的用户流量像潮水一样涌来,凶猛程度完全超出了新系统的设计容量,系统放出去就“挂”了,“挂”了以后再“起”,再“挂”之后再“起”……虽然局面狼狈了些,但是所有人都清楚,只要数据不出错就是成功。

系统的发布让所有人都松了一口气,人们仿佛已经被掏空了身体,开始慢慢放松下来,但就在这时,意想不到的事情发生了。

突然,尖锐的系统报警声响彻“核心作战区”。

为了确保这个项目不出错,支付宝的技术团队为新系统专门建了一个监控系统,后者可以监测每一笔交易和资金,系统不停地报警,说明核心账目系统出错了,而此刻核心账目系统已经发布多时,几亿甚至几十亿元的资金已经涌入,如果有错误,现在已经不知道错在哪里了,想挽回也只是徒劳。

程立的脸一下子变得煞白。他瘫坐在椅子上,发不出任何指令。一边用残存的一点点力气检查系统是不是真的出错了,一边想“完了,完了,支付宝完了,我完了……”

又过了20分钟,当用户的洪流慢慢泄下,系统稳定之后,程立平静了下来,他又查了一遍数据,最后发现是监控系统本身的问题,账目没有出错。

账目三期发布成功了!

2016年1月,当我和程立谈及此事,他笑言自己的运气不错,现在回过头来看,如果那时系统真的出现问题,或者支付宝没有办法那么快地解决问题,就没有支付宝和现在的蚂蚁金服了。

付出没有白费。2008年1月上线的账务三期系统,直到现在仍在使用,作为支付宝非常关键的核心账目系统,虽然后来经过了一些优化,但是基本的架构没有变。更可贵的是,这个系统是具有扩展性的,很多新业务都可以在其基础上不断拓展。

账务三期是支付宝历史上最有名的项目,这个项目因为曲折艰难,而被很多当时参与的技术人员所铭记。这个项目中培养出来的很多技术骨干,在日后的支付宝技术发展中都起到了关键性的作用。虽然项目的过程非常曲折,但是结果非常好。

《蚂蚁金服》