一. 淘宝网的架构演化案例分析
2012年11月30日,淘宝网(包括天猫)的当年交易额突破1万亿,这是一个可以比睨亚马逊和eBay的数字。而就在此前不久的2012年11月11日,淘宝更是创造了全球电子商务的奇迹,当天:
1. 总交易额:191亿人民币
2.零点的第一分钟,1000万独立用户涌入www.tmall.com
3.全天访问用户总数达到2亿1千3百万,占中国网民总数的40%
4.总成交订单数:一亿零五百万
5.高峰期,每分钟成交订单89678笔
淘宝历年交易额如下图所示.
所有这些绚丽的业务数字背后是淘宝多年积淀的电子商务网站架构技术。
淘宝历年交易额
淘宝作为阿里巴巴集团旗下网站,其技术和集团其他公司有着千丝万缕的联系,这里主要分析淘宝架构演化,具体技术不特别区分源自淘宝或阿里巴巴。
二. 淘宝网的业务发展历程
淘宝的技术是在淘宝的业务一起发展起来的,没有飞速发展的淘宝业务,就不会有今天让技术界艳羡的淘宝技术,可以说,是业务驱动着技术不得不往前走。而淘宝的业务也经历了由简单到复杂,由初级到高级的发展历程,通过淘宝首页的变迁,我们可以看出淘宝业务逐步发展的脉络。
2003年,在马云家里,用一个买来的C2C交易软件稍作修改就成了最初的淘宝网,简约也简单。
2004年,淘宝业务由模仿eBay的拍卖交易,开始向一口价交易转型,也就是现在淘宝购物的主要交易模式,这一年,淘宝的架构也经历了一次重大重构,PHP换成了Java,MySQL换成了Oracle。那是,淘宝网首页虽然依旧简单,但是对于电子商务网站最重要的部分———商品类目开始建立并成为最重要的商品导航方式。
此后数年间,淘宝逐步成为网购的代名词,引领中国电子商务的步伐,每年一度的"双十一"促销成为有中国特色的购物狂欢节。
三. 淘宝网技术架构演化
2003年,花3000美金买来的淘宝网站是用PHP开发的,淘宝的工程师做了简单的汉化处理,并对数据库做了读写分离,最早的淘宝网架构如下图;
像我们见过的绝大多数中小网站一样,当年的淘宝网使用典型的Linux+Apache+MySQL+PHP(LAMP)架构。作为一个刚刚起步的小网站,使用开源、免费、简单的技术产品搭建网站是明智之举,可谓一举多得:免费的技术降低网站的成本,成熟的开源技术可以快速响应需求变化;网站发展初期,业务部明确,需求变化多,简单的技术方案可以快速响应需求变化;简单的技术也可以让工程师快速上手,缩短学习周期;退一步,如果业务发展不顺利,及时关闭网站止损,亦可减少沉没成本,促使管理层和投资者快速决策。
图:2003年淘宝网架构
幸而淘宝业务蒸蒸日上,逐步蚕食eBay在中国的市场。随着业务的快速发展,电子商务网站特有的业务复杂性和PHP易开发、难维护的特性产生了难以调和的冲突;不断扩展的业务让工程师承受着沉重的负担;不断增加的用户和商品数又让系统特别是存储系统不堪重负。总之,架构重构势在必行。2004年,淘宝在SUN技术顾问的协助下进行了一次重要的重构,放弃了原来的LAMP架构,转而使用JAVA作为开发平台,使用Oracle做后端数据库。如下图所示:
系统架构试用了当时在企业应用领域崭露头角的MVC框架和ORM框架,分别解决视图与业务逻辑分离的问题和对象与关系数据库解耦的问题,淘宝没有使用当时的风头正劲的Struts和Hibernate,而是选择了自己开发MVC框架Webx,而ORM框架则选择了LBatis。
图:2004年淘宝网架构
当时淘宝还开发了另一个重要产品Antx,这个针对JAVA平台的,扩展自Anx的项目构建工具对于网站项目开发、测试、发布至关重要,一个非常重要的功能就是管理配置项。对于一个JAVA开发的大型Web系统,内部通常会包含数百个jar文件,每个jar文件都是一个独立的模块,这些模块由不同团队开发,实现不同功能,最后组成一个完整的系统。这些模块通常也都有自己的配置文件,比如数据库连接模块需要配置数据库URL、连接池大小等,这些配置参数在开发环境、测试环境、生产环境各不相同。Antx提供了一个灵活管理这些分散配置项的解决方案。
应用服务器使用Weblogic,数据库使用Oracle,这些产品都需要昂贵的授权使用费。而Oracle又需要部署在昂贵的IBM小型机和同样昂贵的EMC存储设备上。淘宝这时候企免费而选择付费产品,和建站初选择免费一样,同样是明智之举:业务快速发展,宝贵的开发资源因该投入到新到新业务开发上,而不是解决这些可以用付费产品搞定的基础技术问题上;成熟的付费产品和售后支持令业务和市场没有后顾之忧,可以全力以赴地拓展市场;对于一个快速发展的网站,特别是电子商务网站而言,严重慢机、重要用户数据丢失可能会极大地打击消费者信心,令网站发展平生波澜,而这些业界领先的产品经过多年的洗练,有较强的可用性保证。
此后三四年间,淘宝在ORACLE、EMC、IBM的护航下,高歌猛进,业务蒸蒸日上,技术也逐渐成长,基于自身需求,逐步摸索适合自己的技术发展之路,如下图所示:
图:2006年淘宝网架构
放弃EJB,引入Spring,用免费的JBoss替代收费的Weblogic,因为Weblogic并非物有所值,EJB对于网站来说也太过于笨重。淘宝后来甚至用轻量级的Jetty替代了JBoss,对淘宝而言,应用服务器只需要一个Servlet容器,越简单越快越好。在适合的场景下使用合适的产品,而不是最好的产品,所谓小脚大鞋,不但跑的不快,还可能会摔跤。
直到这时,淘宝架构和技术依然是泯然于众的中庸水平而已,没有拖业务的后退,使用业界成熟的方案和可靠的技术,没有什么可指责的也没有什么可炫耀的。但也就是在这个时候,淘宝技术开始发力,许多奠定淘宝坚实架构基础的产品和技术从这个时候开始逐步酝酿,走向成熟。目前这些产品多数都已开源。
表: 淘宝主要开源系统
随着淘宝技术的不断发展壮大,淘宝对集群环境下分布式高可用系统的架构设计技术越来越得心应手,Oracle、IBM、EMC也变得不是必须,于是淘宝开始逐渐放弃使用这些昂贵的设备和软件,回归到开源的MySQL及NoSQL系统,正如淘宝2003年建站之初的选择。这也再一次验证了辩证法关于事物发展的否定及螺旋式上升的普遍规律,仿佛回到原点,但一切已经完全不同了。