解密淘宝网的开源架构

解密淘宝网的开源架构

作者:曾宪杰。2002年毕业于浙江大学计算机系。先后在中科院下属企业、先锋电子(中国)就职。积累了丰富的Windows平台、企业级系统设计经验。现任淘宝网平台架构部架构师,主要研究方向为大规模集群环境下的消息中间件设计、分布式数据层和分布式系统。

淘宝网,是一个在线商品数量突破一亿,日均成交额超过两亿元人民币,注册用户接近八千万的大型电子商务网站,是亚洲最大的购物网站。那么对于淘宝 网这样大规模的一个网站,我猜想大家一定会非常关心整个网站都采用了什么样的技术、产品和架构,也会很想了解在淘宝网中是否采用了开源的软件或者是完全采 用的商业软件。那么下面我就简单的介绍一下淘宝网中应用的开源软件。

对于规模稍大的网站来说,其IT必然是一个服务器集群来提供网站服务,数据库也必然要和应用服务分开,有单独的数据库服务器。对于像淘宝网这样规模 的网站而言,就是应用也分成很多组。那么下面,我就从应用服务器操作系统、应用服务器软件、Web Server、数据库、开发框架等几个方面来介绍一下淘宝网中开源软件的应用。


操作系统

我们首先就从应用服务器的操作系统说起。一个应用服务器,从软件的角度来说他的最底层首先是操作系统。要先选择操作系统,然后才是操作系统基础上的 应用软件。在淘宝网,我们的应用服务器上采用的是Linux操作系统。Linux操作系统从1991年第一次正式被公布到现在已经走过了十七个年头,在 PC Server上有广泛的应用。硬件上我们选择PC Server而不是小型机,那么Server的操作系统供我们选择的一般也就是Linux,FreeBSD, windows 2000 Server或者Windows Server 2003。如果不准备采用微软的一系列产品构建应用,并且有能力维护Linux或者FreeBSD,再加上成本的考虑,那么还是应该在Linux和 FreeBSD之间进行选择。可以说,现在Linux和FreeBSD这两个系统难分伯仲,很难说哪个一定比另外一个要优秀很多、能够全面的超越对手,应 该是各有所长。那么在选择的时候有一个因素就是企业的技术人员对于哪种系统更加的熟悉,这个熟悉一方面是系统管理方面,另外一方面是对于内核的熟悉,对内 核的熟悉对于性能调优和对操作系统进行定制剪裁会有很大的帮助。而应用全面的优化、提升性能也是从操作系统的优化开始的。

应用服务器

在确定了服务器的硬件、服务器的操作系统之后,下面我们来说说业务系统的构建。淘宝网有很多业务系统应用是基于JEE规范的系统。还有一些是C C++构建的应用或者是Java构建的Standalone的应用。那么我们要选择一款实现了JEE规范的应用服务器。我们的选择是JBoss Applcation Server。JBoss AS是RedHat的一个开源的支持JEE规范的应用服务器。在几年前,如果采用Java技术构建互联网应用或者企业级应用,在开源软件中的选择一般也就 是Apache组织的Tomcat、JBoss的 JBoss AS和Resin。严格意义上讲,Tomcat和Resin并不能算是一个应用服务器,他们是实现了部分J2EE规范的一个容器。而商业软件的选择就是 IBM的WebSphere和BEA的WebLogic。到了现在,除了JBoss AS外,Apache的Geronimo,Sun的Glassfish也都是很优秀的JEE应用服务器。也给现在的开发人员提供了更多的选择。具体对于目 前JEE应用服务器的比较。这边就不在赘述。

在应用服务器前端,我们采用了Web Server做了一次转发,我们选择的Web服务器是大名鼎鼎的Apache。几年前,Apache几乎是Linux系统上开源Web Server的唯一选择。那个时候虽然也有一些其他的开源的Web Server,但是从功能和稳定性上来说都无法和Apache相对。在今天来说,Lighty也会是一个非常好的选择。Lighty是一个非常轻量级、占 用内存资源也比较少的Web Server。虽然功能上没有Apache强大,但是在不少场景下,性能是非常出色、强于Apache的。而微软的IIS,就只能工作在Windows的 系统上了。并且使用IIS的话,基本上也就是选择了ISAPI、ASP或者ASP.NET进行Web应用的开发了。

数据库

说完了我们采用的操作系统、应用服务器、WebServer后,下面就来谈谈我们的数据库。在淘宝网的应用中,采用了两种关系型数据库管理系统。一 个是 Oracle公司的Oracle 10g,另外一个是Sun MySQL的MySQL。Oracle是一款优秀的、广泛采用的商业数据库管理软件。有很强大的功能和安全性,可以处理相对海量的数据。而MySQL是一 款非常优秀的开源数据库管理软件,非常适合用多台PC Server组成多点的存储节点阵列(这里我所指的不是MySQL自身提供的集群功能),每单位的数据存储成本也非常的低廉。用多台PC Server安装MySQL组成一个存储节点阵列,通过MySQL自身的Replication或者应用自身的处理,可以很好的保证容错(允许部分节点失 效),保证应用的健壮性和可靠性。可以这么说,在关系数据库管理系统的选择上,可以考虑应用本身的情况来决定。

一个互联网应用,除了服务器的操作系统,Web Server软件,应用服务器软件,数据库软件外,我们还会涉及到一些其他的系统,比如一些中间件系统、文件存储系统、搜索、分布式框架、缓存系统等等。 在淘宝网,这些系统都是自主开发的,没有采用目前商业的或者开源的产品。有些系统,会存在着一些开源的产品或者商业产品。但是,考虑到淘宝网自己的需求和 大并发量的压力,这些系统都选择了自主开发框架。

前面谈的都是系统级的产品,下面我们说说开发框架的使用。可能有朋友想问,作为一个如此大规模的网站,淘宝网的Web展现层采用的是什么框架,是怎 么实现的呢?曾经也有到淘宝的应聘者问过我这个问题,他问我说是不是用的 struts。我告诉他说不是的。其实淘宝网的Web展现层的框架用的不是struts,不是webwork,不是spring mvc等等。淘宝网的Web展现层的框架用的是集团内部自主开发的一套Web框架。这个框架能够解决一些其他Web框架不能解决的、在淘宝的应用中又会出 现并需要解决的问题。在淘宝的多个应用中,也采用了一些开源的框架,比如Spring、iBatis、jBPM、Hessian、Mina等等。这些开源 软件的采用为我们构建应用系统提供了很大的帮助。

采用开源软件构建系统,我想有两个很大的好处:

一个是降低成本。假设你有1000台应用服务器,如果你每台服务器上采用的不是JBoss AS或者其他开源的软件,而是使用商业的Oracle BEA的Weblogic或者IBM的WebSphere,那么为这1000台机器的应用购买License的费用是非常高的。

另外一个好处(我觉得最大的好处)是你可以看到软件的源码,你可以研究了解软件内部的工作过程、原理。这对于应用设计、开发、查错、优化都是非常有 帮助的。

淘宝网的开源观

对于开源软件的应用,有些人可能担心质量的问题,有些人可能担心软件本身发展更新的问题,等等。对于质量的问题,我想现在很多的开源软件尤其是一些 很著名的开源软件都有很完善的组织,有完善的开发、测试、发布流程。在一个新版本完成前,会有多次的测试版本发布,最后才是正式版。这和商业软件是一样 的。并且因为代码公开,反而更加的容易发现错误,提高质量。至于第二个问题,我想跟第一个问题一样,关键是组织和规划而不在是否开源,并且在很多著名的开 源软件背后,会有厂商在进行支持。软件本身的发展应该是不会成为问题的,不太会出现软件突然停止发展的情况。

在今后的发展中,我们还是会一如既往的关注开源软件的发展,也还会根据需要采用不同的开源软件。在选择一个开源产品的时候,我会考虑以下几点:

1. 这个软件目前的功能和它的RoadMap

2. 软件本身的架构

3. 该软件开发的活跃度

4. 该开源软件是否是遵守该领域内的国际规范的

5. 在同类产品中,要挑选有比较优势的。并且要考虑可能存在的移植代价。这个移植指的是采用了这款开源软件后现有系统的移植,或者是从这个开源软件到其他软件 的移植。

对于企业级系统、互联网应用来说,采用开源软件不仅可以降低成本,更重要的是能够真正了解软件的内部工作机制。还可以在现在的基础上进行增强和定 制,也能够从开源软件中借鉴到很多好的设计和实现。希望国内能有更多的企业在使用开源软件的同时,也能开源自身的一些软件,或者能够成为一些开源软件的贡 献者。而作为淘宝网,我们也会非常积极的参与到开源的活动中,也会努力为开源的发展做出我们应有的贡献。

时间: 2024-10-20 17:10:07

解密淘宝网的开源架构的相关文章

淘宝网采用什么技术架构来实现网站高负载的

2012-11-15 12:30 佚名 转载 字号:T | T 下面就结合淘宝目前的一些底层技术框架以及自己的一些感触来说说如何构建一个可 伸缩,高性能,高可用性的分布式互联网应用. AD: WOT2014:用户标签系统与用户数据化运营培训专场 时间过得很快,来淘宝已经两个月了,在这两个月的时间里,自己也感受颇深.下面就结合淘宝目前的一些底层技术框架以及自己的一些感触来说说如何构建一个可 伸缩,高性能,高可用性的分布式互联网应用. 相关专题:淘宝双11背后高并发技术讨论 一 应用无状态(淘宝se

淘宝双11促销背后高并发处理之淘宝网采用什么技术架构来实现网站高负载

转自:http://china-chill.blog.163.com/blog/static/2049210522012101782432304/ 时间过得很快,来淘宝已经两个月了,在这两个月的时间里,自己也感受颇深.下面就结合淘宝目前的一些底层技术框架以及自己的一些感触来说说如何构建一个可 伸缩,高性能,高可用性的分布式互联网应用. 一 应用无状态(淘宝session框架) 俗 话说,一个系 统的伸缩性的好坏取决于应用的状态如何管理.为什么这么说呢?咱们试想一下,假如我们在session中保存

淘宝网的架构分析(小组)

一个成熟的大型网站(如淘宝.京东等)的系统架构需要考虑诸多复杂的因素,因为像淘宝这种大型网站数据量比一般的网站要大的多,所以在设计架构方面也要复杂的多,既要考虑成本因素也要考虑访问速度安全性等.这里我简单的对淘宝的网站系统架构进行一个简单的分析. 淘宝作为一个大型购物网站,其数据量是很大的,所以不像一般网站,淘宝需要用各种方法来保证服务器的正常运行以及用户购买时的良好体验.主要由以下方式:1.应用.数据.文件分离 2.利用缓存改善网站性能 3.使用CDN和反向代理提高访问速度 4.使用分布式文件

《淘宝技术这十年》读书笔记 (一).淘宝网技术简介及来源

我似乎是2007年初中看<赢在中国>的时候喜欢上马云的,当时对电脑都不是很了解,更别提阿里巴巴和淘宝网了.但当时还是被马云的几句点评深深地吸引,其中我印象最深的一句话就是"短暂的激情是不值钱的,只有长久的激情才是值钱的",以至于我在本科毕业德育答辩时用的题目就是这句话(德育答辩开题我用的题目也是马云的<If not now,when? If not me,who?>其含义是如果不是现在努力,什么时候努力呢?如果不是为了自己奋斗,又是为谁奋斗呢?).的确,想做成任

淘宝网的发展史及其优缺点

淘宝网的发展史: 2003年5月10日,淘宝网诞生于浙江杭州的湖畔花园,截至当年7月4日(淘宝被阿里巴巴收购以前4天),网站拥有会员1.7万,上网商品6.2万件,日平均网页浏览量达到30万,日平均访问人次有2.5万,日新增商品达2000多件. 淘宝的初现: 淘宝的人民网2003年7月7日报,在易趣eBay 1.5亿美元增资易趣股份之后,阿里巴巴最近将有所动作,将在近期收购某C2C网站,记者从阿里巴巴内部了解到,马云这次做为投资人,投资的企业正是淘宝网.现在看来当时马云的决定是多么正确. 淘宝网遭

淘宝数据魔方技术架构解析(转)

淘宝网拥有国内最具商业价值的海量数据.截至当前(2011年8月),每天有超过30亿的店铺.商品浏览记录,10亿在线商品数,上千万的成交.收藏和评价数据.如何从这些数据中挖掘出真正的商业价值,进而帮助淘宝.商家进行企业的数据化运营,帮助消费者进行理性的购物决策,是淘宝数据平台与产品部的使命. 为此,我们进行了一系列数据产品的研发,比如为大家所熟知的量子统计.数据魔方和淘宝指数等.尽管从业务层面来讲,数据产品的研发难度并不高:但在"海量"的限定下,数据产品的计算.存储和检索难度陡然上升.本

淘宝网自主开发数据存储系统

Tair是由淘宝网自主开发的Key/Value结构数据存储系统,在淘宝网有着大规模的应用.您在登录淘宝.查看商品详情页面或者在淘江湖和好友"捣浆糊"的时候,都在直接或间接地和Tair交互. Tair的功能 Tair是一个Key/Value结构数据的解决方案,它默认支持基于内存和文件的两种存储方式,分别和我们通常所说的缓存和持久化存储对应. Tair除了普通Key/Value系统提供的功能,比如get.put.delete以及批量接口外,还有一些附加的实用功能,使得其有更广的适用场景,包

课堂作业03——淘宝网的质量属性

淘宝网的六个主要质量属性场景描述 1.可用性: 多个用户同时登录,需要庞大的数据处理架构来支撑,淘宝公司的 session框架采用的是client cookie实现,主要将状态 保存到了cookie里面,这样就使得应用节点本身不需要保存任何状态信息,这样在系统用户变多的时候,就可以通过增加更多的应用节点来达到水平扩展的目的. 场景描述: 刺激源 用户 刺激 大量用户群同时登录 制品 存储.数据库 环境 系统运行时 响应 使用多值cookie 响应度量 正常登录,无异常 2.可修改性: 与为诊断缺

关于淘宝网的六个质量属性场景(作业2)

淘宝网是亚太地区较大的网络零售.商圈由阿里巴巴集团在2003年创立.淘宝网是中国深受欢迎的网购平台,拥有近5亿的注册用户数,每天有超过6000万的固定访客,同时每天在线商品数已经超过了8亿件,平均每分钟售出4.8万件商品.下面将简单介绍一下以淘宝网为例,描述质量属性的六个常见的属性场景. 1 可用性:可用性与系统故障及其后果相关.当系统不再提供其规范中所说的服务时,就出现了系统故障.系统用户可以观察到此类故障.可用性是指系统正常运行时间的比例,是通过两次故障之间的时间长度或在系统崩溃情况下能够恢