淘宝升华:脱胎换骨的巨人(转)
淘宝传奇工程师多隆的程序世界
多隆是淘宝的创始人之一,也是淘宝的第一个程序员,他奠定了诸多淘宝重大软件项目的基础。有人说他是淘宝的“扫地僧”,有人说他是“神”。在淘宝,他做到了既懂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的一些事情)。行癫等人买回小型机之后,我们用上了。

淘宝升华:脱胎换骨的巨人相关推荐

  1. 淘宝技术发展(Java时代:脱胎换骨)

    2019独角兽企业重金招聘Python工程师标准>>> 我的师父黄裳@岳旭强曾经说过,"好的架构图充满美感",一个架构好不好,从审美的角度就能看得出来.后来我看了 ...

  2. 《淘宝技术这十年》读书笔记 (二).Java时代的脱胎换骨和坚若磐石

    马云说过"一个好的东西往往是是说不清楚的",姑且不论这句话的对与错.但我真的很佩服<淘宝技术这十年>这本书的作者子柳,能够通过淘宝的一些故事,按照时间顺序和IT发展的各 ...

  3. 【升华网络】为你介绍淘宝

    [升华网络]为你介绍淘宝淘宝成为中国大陆两年内无可争议的市场领导者.其市场份额在2003年至2005年间从8%激增至59%,eBay中国由79%猛跌至36%.eBay在2006年关闭了其中国网站.20 ...

  4. 淘宝之初:湖畔花园小区里诞生的巨人

    2003年4月7日,马云在杭州成立了一个神秘的组织.他叫来十位员工,要他们签了一份协议,这份协议要求他们立刻离开阿里巴巴集 团,去做一个神秘的项目.这个项目要求绝对保密,老马戏称"连说梦话被 ...

  5. 淘宝前端工程师:国内前端行业十日谈(六)

    第六日:码农的宿命 [青春饭] "码农"是IT从 业者一个自嘲的称号,也有从事没有发展前景的软件开发职位,靠写代码为生的意思.但我认为码农是一个爱称,编码的农民,和农民一样有着执着 ...

  6. 作为数据库核心成员,如何让淘宝不卡顿?

    简介:TDDL(Tabao Distributed Data Layer)是淘宝开源的一个用于访问数据库的中间件,集成了分库分表,主备,读写分离,权重调配,动态数据库配置等功能.本文以2007年TDD ...

  7. 淘宝网的技术发展史(三)——分布式时代

    本文是<淘宝网的技术发展史>系列连载文的第三篇.在系统发展的过程中,架构师的眼光至关重要,作为程序员,把功能实现即可:但作为架构师,要考虑系统的扩展性.复用性,这种敏锐的感觉,有人说是一种 ...

  8. 互联网晚报 | 1月25日 星期二 | 知乎首次举办上星晚会;微信视频号上线首个付费直播间;淘宝天猫“春节不打烊”活动正式上线...

    今日看点 ✦ 淘宝天猫"春节不打烊"活动正式上线,20万商家春节照常发货 ✦ 微信视频号上线首个付费直播间,免费观看3分钟后需付费 ✦ 知乎首次举办上星晚会,2022知乎答案奇遇夜 ...

  9. 淘宝技术发展(分布式时代:服务化)

    在系统发展的过程中,架构师的眼光至关重要,作为程序员,把功能实现即可,但作为架构师,要考虑系统的扩展性.重用性,这种敏锐的感觉,有人说是一种代码洁癖.淘宝早期有几个架构师具备了这种感觉.一指开发的We ...

最新文章

  1. 小明分享|nRF52840 蓝牙模块连接测试
  2. 已知可生成0~4的rand5(),实现生成0~6的rand7()
  3. java 前置通知_spring aop中的前置通知
  4. 第6/24周 聚集索引
  5. 大数据文本分析的应用场景有哪些?
  6. 设计php框架_PHP微型框架设计
  7. bisect algorithm(python 的标准库函数 bisect model)
  8. c语言编译音乐简谱,单片机音乐曲谱_单片机c语言音乐简谱代码
  9. 最新版Mysql安装步骤
  10. 计算机休眠下睡眠的不同点是什么,电脑休眠和睡眠的区别是什么
  11. 小节标题不跟着章节变化,教你彻底解决
  12. 数字统计-c语言-求特殊自然数
  13. php如何把线条变粗,科学网—AutoCAD线条加粗秘诀(转载收藏) - 顿玉环的博文...
  14. 苹果手机微信端打开网页长按保存图片可以唤醒但是点击保存、发好友无效
  15. js html 编辑器添加图片不显示,彻底解决ewebeditor网站后台不能上传图片的方法
  16. Android日常开发收集的Tips
  17. mtk平台的gpio控制
  18. 双十一有哪些必入的数码好物?值得入手的数码好物推荐
  19. 信息技术快速上手教程
  20. 在线教育有什么优势?

热门文章

  1. dotNet Core初学之创建第一个dotNetCore项目
  2. 基于matlab的蓝色车牌识别(车牌定位)
  3. pytorch问题:found at least two devices, cuda:0 and cuda:1!
  4. 挪威的森林--秋天的气息
  5. c语言双截龙_双截龙招式表
  6. Django CBV视图
  7. vr安全教育消防安全循序渐进地开展火灾知识、技能及实训教学
  8. android要学什么,android入门要学什么 应该做哪些学习准备
  9. 那些高阅读量文章的标题都是怎么取的?14种模板直接套用
  10. 黄宏生为什么一定要把他的车叫做“创维”?