淘宝升华:脱胎换骨的巨人

淘宝升华:脱胎换骨的巨人(转)

淘宝传奇工程师多隆的程序世界

多隆是淘宝的创始人之一,也是淘宝的第一个程序员,他奠定了诸多淘宝重大软件项目的基础。有人说他是淘宝的“扫地僧”,有人说他是“神”。在淘宝,他做到了既懂C/C++语言,又懂Java和内核;既可以深入技术底层,又能切入到高层业务领域,从前端到后端,只是既光又深。他就是核心系统部专家组的多隆。

技术小儿中流传一句话——“有困难,找多隆”。关于这点,我深有体会,又一次,我们组解决一个Apache服务器无故崩溃的诡异问题,搞了三天还是没找出原因,于是请教多隆,他在三分钟后就告诉了我答案。瞬间的秒杀,让我领教了;高级研究员的威力。

我和多隆在同一个部门,工位相邻。这个近水楼台先得月的条件,让我平时有很多机会观察他,从他的一举一动中思索他如何以非科班出身(生物系生命科学专业)成长为计算机牛人。

多隆说他的知识经验的积累主要归功于在淘宝业务发展的过程中,他遇到了各种各样的问题。这些问题促使他不断学习解决问题的各种技术,他和淘宝一起成长。在我看来,他对技术始终保持着谦卑的心态也很关键。他把自己当成一块海绵一样去吸收新知识——在他的字典里,没有不值得去解决的问题,也没有不值得去学习的技术。而且每学一个知识点,多隆都会写一段代码去验证,一方面是练习,另一方面也让他加深理解,直到真正掌握这个技术。

我的师父黄裳曾经说过“好的架构图充满美感”。一个架构好不好,从审美的角度就能看出来。后来我看了很多系统的架构,发现这个言论基本成立。反观淘宝以前两个版本的架构,如下图所示,你看哪个比较美?


显然,第一个比较好看,第二个显得头重脚轻,这也注定了它不是一个稳定的版本,只存活了不到半年的时间。2004年初,SQL Relay的问题解决不了,数据库必须要用Oracle,那么从哪里动刀呢?只有换开发语言了。换什么语言好?用Java。Java是当时最成熟的网站开发语言,它有比较良好的企业开发框架,被世界上主流的大规模网站普遍采用。另外,有Java开发经验的人才也比较多,后续维护成本会比较低。



脱胎换骨的升级——更换开发语言

到2004年上半年,淘宝网已经运行了一年的时间,这一年积累了大量的用户,也快速开发了很多功能,当时这个网站已经很庞大了,而且新的需求还在源源不断地增加。把一个庞大的网站的开发语言换掉,无异于脱胎换骨,在换的过程中还不能拖慢业务的发展,这无异于边换边跑,对时间和技术能力要求都非常高。做这样的手术,需要请第一流的专家来主刀。现在再考一下。

大家:亲,如果你在这个创业团队中,请什么样的人来做这件事?我们的答案是请Sun公司的人。没错,就是创造Java语言的那家公司,世界上没有比他们更懂Java的了。除此之外,还有一个不为人知的原因,我刚才说到Java被世界上主流的大规模网站普遍采用,其中有一个网站就是eBay,那时eBay的系统刚刚从C++改到而且就是请Sun的工程师给改造成Java架构的,这下你懂了吧?他们不仅更懂Java,而且更懂eBay。Sun公司的这帮工程师的确很强大,在笔者2004年年底来淘宝的时候,他们还在,我有幸与他们共事了几个月。现在摆在他们面前的问题是用什么办法把一个庞大的网站从PHP语言迁移到Java?而且要求在迁移的过程中,不停止服务,原来系统的bugfix和功能改进不受影响。亲,你要是架构师,你怎么做?有人的答案是写一个翻译器,如同把中文翻译成英文一样,自动翻译。我只能说你这个想法太超前了,“too young, too simple, sometimes naive”。当时没有,现在也没有人能做到。他们的大致方案是给业务分模块,一个模块一个模块地渐进式替换。如用户模块,老的member.taobao.com继续维护,不添加新功能,新功能在新的模块上开发,跟老的模块共用一个数据库,开发完毕之后放到不同的应用集群上,另开一个域名member1.taobao.com,同时再替换老的功能,替换一个,就把老的模块上的功能关闭一个,逐渐把用户引导到member1.taobao.com,等所有的功能都替换完之后,关闭member.taobao.com。从设计上来看,这个member1的二级域名应该是一个过渡状态,但我们把member域名的代码下线以后,发现很难把member1切换回member,因为有些地方把链接写死了,于是后来很长时间里我们都是在用member1.taobao.com这样奇怪的域名。一年后,有另外一家互联网公司开始做电子商务了,我们发现他们的域名也叫member1.xx.com、auction1.xx.com,复制得毫无保留,我们只能会心一笑。

说了开发模式,再说说用到的Java MVC框架,当时的struts1.x是用得比较多的框架,但是用过webwork和struts2的人可能知道,struts1.x在多人协作方面有很多致命的弱点,由于没有一个轻量框架作为基础,因此,很难扩展,这样架构师对于基础功能和全局功能的控制就很难做到。而阿里巴巴的18个创始人之中,有个架构师周悦虹,他在Jakarta Turbine的基础上做了很多扩展,打造了一个阿里巴巴自己用的MVC框架WebX (http://www.openwebx.org/docs/Webx3_Guide_Book.html ),这个框架易于扩展,方便组件化开发,它的页面模板支持JSP和Velocity等,持久层支持ibatis和hibernate等,控制层可以用EJB和Spring(Spring是后来才有的)。项目组选择了这个强大的框架。另外,当时Sun在全世界大力推广他们的EJB,虽然淘宝的架构师认为这个东西用不到,但他们还是极力坚持。在经历了很多次的技术讨论、争论甚至争吵之后,这个系统的架构就变成了下图的形式。

MVC框架是阿里的WebX,控制层用了EJB,持久层是ibatis。另外,为了缓解数据库的压力,商品查询和店铺查询放在搜索引擎中。这个架构图是不是好看了一点了?Sun的这帮工程师开发完淘宝的网站之后,用同样的架构又做了一个很牛的网站,叫“支付宝”。(上一篇说过支付宝最初是淘宝上的“安全交易”功能,这个功能后来独立出来,成立了一个网站,也成立了一个公司,就是现在的支付宝。把支付宝从淘宝分出去的人,就是Sun公司的这几个人。)

上面的架构中,引入了搜索引擎iSearch(前文说过,iSearch其实是在LAMP系统运行一段时间之后被多隆引进的,换为Oracle之后只是替换一下数据源)。其实这个搜索引擎的原理很简单,就是把数据库里的数据dump(倾倒)成结构化的文本文件后,放在硬盘上,提供Web应用以约定的参数和语法来查询这些数据。这看起来不难,难的是数以亿计的信息,怎么做到快速更新呢?这好比你做了一个网站,在百度上很快就能搜到,你一定很满意了。但如果你发布一件商品,在淘宝上过1个小时还搜不到,你肯定要郁闷了。另一个难点是如何保证非常高的容量和并发量?再往后面就要考虑断句和语义分析的问题,以及推荐算法等更加智能的问题。这些内容先不详细介绍,因为搜索引擎的技术已经足以写好几本书了。

其实在任何时候,开发语言本身都不是系统的瓶颈,业务带来的压力更多的存在于数据和存储方面。前面也说到,MySQL撑不住之后换为Oracle,Oracle的存储一开始在本机上,后来在NAS上,NAS撑不住了用EMC的SAN存储,再后来,Oracle的RAC撑不住了,数据的存储方面就不得不考虑使用小型机。在2004年夏天,DBA七公、测试工程师郭芙和架构师行癫,踏上了去北京测试小型机的道路。他们带着小型机回来的时候,我们像欢迎领袖一样欢迎他们,因为那是我们最值钱的设备,价格表上的数字吓死人。小型机买回来之后,我们争相合影,然后Oracle就运行在了小型机上,存储方面,从EMC低端CX存储到Sun oem hds高端存储,再到EMC dmx高端存储,一级一级地往上跳。

到2004年底,淘宝网已经有4百多万种商品了,日均4千多万个PV,注册会员达400万个,全网成交额达10亿元。

到现在为止,我们已经用上了IBM的小型机、Oracle的数据EMC的存储,这些东西都是很贵的,那些年可以说是花钱如流水。有人说过“钱能解决的问题,就不是问题”,但随着淘宝网的发展,在不久以后,钱已经解决不了我们的问题了。花钱买豪华的配置,也许能支持1亿个PV的网站,但淘宝网的发展实在是太快了,到了10亿个PV怎么办?到了百亿怎么办?在几年以后,我们不得不创造技术,解决这些只有世界顶尖的网站才会遇到的问题。后来我们在开源软件的基础上进行自主研发,一步一步地把IOE(IBM小型机、Oracle、EMC存储)这几个“神器”都去掉了。这些神器就如同《西游记》中那些神仙的兵器,他们身边的妖怪们拿到这些兵器能把猴子打得落荒而逃。但最牛的神仙是不依赖这些神器的,他们挥一挥衣袖、翻一下手掌就威力无比了。

坚若磐石——围绕性能、容量和成本的进化已经有读者在迫不及待地问怎么去掉了IOE?别急,在去掉IOE之前还有很长的路要走(在后面讲到TDDL的时候,会提到去IOE的一些事情)。行癫等人买回小型机之后,我们用上了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值