程立选择先拿交易服务来开刀,首先将最复杂的交易服务重构,使交易服务变成“微服务”,这样就能将它拿出来和其他事务打交道,同时还要保持事务和核心虚拟账户业务的一致性。为了解决这个事务问题,他们使用了WS-Transaction服务规范[4]。
“烟囱”是一个形象的比喻,支付宝的第一代架构就像一个个独立的“烟囱”。没有基础架构可言,做一个业务就竖起一个“烟囱”,“烟囱”之间的关联性不大,每做一个新业务就要将一个烟囱进行手动改造,而支持主要业务的“大烟囱”经历了无数次的改动。
支付宝的第二代架构为第三代架构“云支付”奠定了良好的基础,因为如果使用云计算,系统首先要分布,只有这样才能用很多小型机器、云资源作为支撑。
从二代架构过渡到三代架构,支付宝又花了三年时间,在此期间,支付宝开始自主研发中间件、数据库、大数据平台。正是这个云计算的架构,支撑了近几年淘宝大促的交易,也使后来的“双十一”能够平稳地进行。
这样,支付宝就夯实了分布式事务的基础设施,核心账务可以分布,核心交易也可以分布,所有的业务都可以分开来做。结果是,支付宝的系统可以伸缩了,每一个系统都是分布式的,如果遇到业务峰值,就可以增加资源。幸运的是,当支付宝的二代架构做完后不久,淘宝就开始搞“双十一”大促了。
二代架构在支付宝技术发展过程中是很关键的一步,因为新系统将原来的大系统拆开了,在当时这个项目叫作“交易服务化”。有“交易服务化”作为基础,后来支付宝又做了账务三期。做完账务三期之后,核心账务系统也分布化了。从2007年开始,支付宝陆续用了三年左右的时间对整个系统进行分布化。
应该说,第一代“烟囱型”的系统较好地满足了小团队开发、业务快速试错的需求,但是这个架构不能支持大团队的分布式研发。在“烟囱型”的技术架构下,每当开发新的产品和功能时,只能允许所有人在一个系统里去写代码,与此同时,它的部署也是集中的,核心系统就是一个集群,数据库也只有一个。因此,随着业务量的上升,这样的数据库和集群都会达到极限。
后来,到了2007年初,程立的脑子里渐渐产生了一个想法。与此同时,业界的技术也逐渐成熟,特别是大规模SOA系统[3]中的分布式事务处理标准逐渐明晰,程立就和同事一起,从2007年上半年开始准备将支付宝的系统做分布式的改造,现在看来就是把支付宝的架构改成一个分布式服务和分布式架构。
这时,程立刚从技术团队的主力架构师升至首席架构师,团队主管要求他不必写代码了,而是专注去“画大图”,为团队的未来发展指明方向。可是对程立来说,这是一个完全不同的任务。整整一个季度的时间,他没有画出一张令自己满意的“大图”,KPI考核只得了3.25分,程立甚至一度想辞职。
后来,程立又想到了一个简单的架构,他要求同事按照新架构开发。在团队的支持下,到9月底,开发工作全部完成。2007年“十一”长假,他提前三天回来,把代码重新检查了一遍,又加了很多的监控日志。“十一”过后,新系统顺利发布。
总之,第三代云支付架构能够完成两方面的改造。一方面是在底层使用云计算技术,另一方面是在上层把服务变成云服务,这样建立在其上的业务就可以很快地生长。
从2005年开始,支付宝的技术架构经历了“烟囱型”、“面向服务型”、“云平台型”三个时期。
程立所要画的“大图”,就是支付宝二代的架构。
用程立的话说,如果这个事情做得晚一点,这几年的“双十一”大促就别想挺过来了。不仅如此,云服务的三代架构也为今天蚂蚁金服的发展奠定了坚实的基础,现在的蚂蚁金融云就是建立在这个架构的基础之上的。蚂蚁金服对此并不满足,现在已经开始研发第四代架构,这是一个适应目前数据开放、互联、全球化的架构。
2007年5月,项目正式启动。支付宝的技术团队分为几拨人:一拨人写分布式事务的底层框架,一拨人设计新的核心的交易系统,还有一拨人做分布式事务的框架。两个月后,开发完工,系统运转了起来,一切看上去似乎都很正常。
但当程立从系统的复杂度去审视时,他发现了一个问题,原本非常简单的处理过程,现在却变得异常复杂。比如,仅一个消息处理,分布系统之间的消息就有10~20个,如果这样,系统上去是要“死人”的。
从2006年开始,支付宝的技术团队意识到,“烟囱”架构无法支持支付宝未来业务的发展,如果要继续拓展业务,必须先把架构分布化,建立底层服务架构,让专业模块做专业的事情。当时,分布式系统在互联网界的应用并不罕见,规模较大的互联网公司系统都分布化了,但是对于金融系统而言,分布化是没有先例的。这是因为金融系统要求高稳定性和高安全性,任何改进都要先保证用户账目上的钱分毫不差。在系统数据分离之后,保证系统之间业务处理的一致性就成了核心的问题。
支付宝技术团队想到把业务进行拆分和梳理,从而将系统变成一个边界明晰的云服务平台。比如,系统里有一个支付服务的平台,它的作用是对外提供支付服务,任何一个业务需要用到支付时,直接对接就可以,这样支付的功能马上就可以调用了。类似地,会员服务的系统、运营服务的系统与营销服务的系统纷纷搭建出来,各种服务像“水、电、煤”一样能够即需即用。
2005~2006年,支付宝业务发展得很快,任何一个商业想法,从产生到提供给用户使用的时间都是按天来计算的,如每年“双十一”大促时的支付宝红包,就是程立用四天时间做出来的。
进退之际,他想起了自己在2005年做支付宝三期时的经验:如果系统存在问题,就不要抱任何侥幸心理,要敢于面对问题,查找原因,从头再来。项目团队经过反复思考之后,决定把前面的架构推翻重做。
但二代架构过渡到三代架构的过程并非一帆风顺,在二代架构完成后,虽然支付宝把系统拆开了,但是如何让新业务长在复杂的分布式系统上是一个非常复杂的问题,在业务很多的情况下,系统会变成一张复杂的网。