『淘宝十年技术路』读后想法

  最近借到了子柳先生的《淘宝技术这十年》,拜读一番,感慨万分。将书中内容加上本身的想法说说,毕竟未经人事见解粗浅,但愿能获得前辈们的指点。

1、淘宝的核心技术(国内乃至国际的Top,这仍是2011年的数据)html

  • 拥有全国最大的分布式Hadoop集群(云梯,2000左右节点,24000核CPU,48000GB内存,40PB存储容量)
  • 全国分布80+CDN节点,可以自动找寻最近的节点提供服务,支持流量超过800Gbps,足以拖垮一个城市的流量
  • 不逊于百度的搜索引擎,对数十亿商品进行搜索,全球最大的电商平台
  • 顶尖的负载均衡系统,顶尖的分布式系统,顶尖的互联网思想,功能多样运行极其稳定
  • 丰富的生态产业以及先进的数据挖掘技术
  • ……不少不少

 

2、淘宝网的诞生前端

马总在2003年4月7日秘密叫来阿里巴巴的十位员工,来到杭州一个隐秘的毛坯房,要求他们在一个月左右的时间内作出一个C2C网站。java

结果固然仍是直接买的快,一个基于LAMP架构的网站,原名是PHPAuction,老美开发的一个拍卖网站。固然必需要作修改才能用。(做为一个曾经用老美开发的前端页面开发本身博客的同窗,确实感受用别人写的比较方便偷懒-_-,不过我确信虚竹、三丰、多隆等前辈是有足够实力开发本身网站的——仍是马总催的紧)nginx

当时财大气粗的eBay正在中国耀武扬威,加上SARS肆虐,可能你们对网购产生了新的认识。而淘宝刻意保持低调,甚至连阿里的员工都不知道这是他们本身公司的产品。web

淘宝的员工积极回答着用户的问题,早起贪黑,锻炼身体的方法就是倒立。算法

淘宝的功能也在不断的完善着,发布、管理、搜索、详情、购买等等,服务器也变成了三台。由于数据量大了,淘宝的搜索很慢(使用LIKE匹配…),多隆前辈把阿里巴巴的搜索引擎iSearch搬了过来。数据库

当时MySQL的默认存储引擎MyISAM会致使读写锁等待时间过长等等大量问题,因此意外仍是不少的。编程

2003年末,淘宝注册用户23万,PV 31万/day,半年成交额3371万。后端

 

3、淘宝的更新缓存

很显然MySQL没法撑得起如此大的访问量,数据库瓶颈出现了。幸亏阿里的DBA队伍足够强大,他们使用Oracle替代了MySQL。

Oracle那时就已经有了强大的并发性访问设计——链接池,从链接池取链接的耗费比单独创建链接少不少。可是PHP当时并无官方提供支持语言链接池特性,因而多隆前辈用Google(不会是Baidu)搜到了一个开源的SQL Relay,因而数据库软件方面的瓶颈暂时解决了。

可是硬件容量不够了,阿里买了NAS(后来由于延迟严重缘由买了EMC的SAN低端存储),加上Oracle高性能RAC,硬件容量也暂时没问题了。

开源的东西当然好,可是大胆使用也是一次尝试的过程,SQL Relay会频繁的致使死锁问题,致使工程师不得不按期进行重启服务,从书中的描述能够看出,淘宝的工程师们真的很是辛苦。

淘宝网不会止步于仅仅为卖家和买家提供一个交易的网站而已,还须要创建一个完善的第三方体系,来保证卖家和买家之间的交易是安全的,因而支付宝诞生了。比较麻烦的是,当时虽有不少银行开放了网银接口,可是甚至不能保证付钱后就会扣款成功,仍是须要工程师们辛苦的一板一眼去对帐……

淘宝为了便于用户的交流,开发了一个IM软件——旺旺,不只给买卖双方使用,阿里内部也使用旺旺交流。

 

4、第一个里程碑

由于SQL Relay的问题实在过于严重,2004年因而淘宝终于作出了跨时代的决策——使用Java重写网站(鼓掌~~~)。

没错,淘宝请了Sun的高级工程师来帮忙作Java架构。那么他们是如何作到修改编程语言而不改变网站使用呢——模块化替换,今天写好了A模块,另开一个新域名,将链接指向该模块,同时别的模块不变,等到所有模块完成的时候,原域名放弃。

使用的框架:淘宝的架构师在Jakarta Turbine的基础上开发了本身的MVC框架——WebX。而Sun公司坚持使用EJB做为控制层(估计当时只有他们才能玩贯EJB),加上使用iBatis做为持久层,一个可扩展且高效的Java EE应用诞生了。BYW,支付宝也是Sun的工程师用一样的架构设计的。

送走Sun的大牛们以后,阿里的数据存储又遇到了瓶颈,因而忍痛买了一台IBM小型机(我猜至少是百万级别的…….),也就有了IOE(IBM + Oracle + EMC)这样的传说。

2004年末,淘宝注册用户400万,PV 4000万/day,全网成交额10个亿。

 

5、再接再砺

Oracle也有处理上限,当数量的级别是“亿”的时候,就不是一个Oracle服务器支撑的起的了。DBA们把数据分到了两个数据库中,经过ID的第一位决定查询哪个数据。好比,‘0’至‘7’放在A数据库,‘8’至‘f’放在B数据库,通用信息放在C数据库。可是如何既查询’3′开头又查询’e'开头的数据呢?一个数据库路由框架DBRoute由架构师行癫编写,统一处理合并问题而对上层透明。

Spring诞生了,早闻Spring框架在Web应用不可或缺,而在淘宝网,Spring也达到了Rod Johnson设计它的目的——替代EJB。

2005年末,淘宝注册用户1390万,PV 8931万/day,商品数目1663万个。

说实话我真的好佩服,这么大的访问量都能如此坚挺,可是,考虑到将来的发展,这样的设施架构只是勉强能够应付如今的要求。因而,CDN技术派上用场了,一开始使用商用的ChinaCache,后来使用章文嵩博士搭建低耗能CDN网络,淘宝网的性能愈来愈好了。

2006年末,淘宝注册用户3000万,PV 15000万/day,商品数目5000万,全网成交额169亿元。

 

6、创造技术

为了考虑交易的公平性,淘宝增长了交易快照功能,将当前交易网页以图片的形式保存下来,淘宝的交易量如此之大,带来了一个问题——碎片图片过多,2010年,淘宝网的后端上保存着286亿张图片。

淘宝在2007年以前,使用NetApp的商用存储系统,可是仍然不够应付迅速增加的趋势。同年Google公布了GFS的设计思想,参照它的思想,淘宝也开发了本身的文件系统——TFS。至于这个文件系统的具体原理书上给的并不详细(应该是我看不懂-_-),不过能够大概能够了解是专门为大量的图片设计的,从每一个用户1张图片到TFS上线后5张再到1GB的图片空间,这些都得益于TFS集群的文件存储系统以及大量的图片服务器。淘宝使用实时生成缩率图,全局负载均衡以及一级和二级缓存来保证图片的访问优化与高效访问。

淘宝的服务器软件使用Tengine,一个被优化过的nginx模块。

淘宝也作过失败的产品,不是由于技术缘由而是市场缘由。首先是“团购”,失败在于人心叵测。再次是“个人淘宝”,使用了风靡全球的AJAX的技术,可是作的过于AJAX了,多是太不容易上手了(马总亲口说的),还有“招财进宝”(被竞争对手认为是破坏了“免费”的承诺而大肆宣扬)。

记录商品的访问量,使用传统的数据库I/O实在过于影响效率,因此淘宝使用了缓冲的技术,先是使用ESI(Edge Side Includes),解决了片断缓冲问题。由于有些大店铺访问量过大,频繁的I/O实在得不偿失,因而多隆前辈写出了TBstore,能够缓存大量的数据,核心思想是使用Hash算法快速寻找。其核心是基于Berkeley DB,一种类内存数据库,致使的问题是内存数据量大了仍是会刷到磁盘中,所以性能并非那么的好。

后来,淘宝分离出了UIC(User Information Center),供全部模块调用。多隆前辈再次为其编写出了TDBM,彻底是基于内存的数据缓存(参考了memcached)。再而后,淘宝将TBstore和TDBM合并,写出了Tair,一个基于Key-Value的分布式缓存数据系统。而后升级了本身的iSearch系统。

2007年末,淘宝注册用户5000万,PV 25000万/day,商品数目1个亿,全网成交额433亿元。

 

7、更多的技术

一个电子商务平台不可缺乏的细节——商品类目的处理。由于商品的类目实在过于庞大,所以如何根据类目划分商品成为了难题。机智的一灯前辈说,这些属性能够当作标签,直接“贴”在商品上(应该是这样的吧)。

2008年,淘宝将支付宝单独分离出来。其中交易的底层业务叫交易中心TC(Trade Center),涉及订单之类的原子操做。交易的上层业务叫作交易管理TM(Trade Manager),不涉及对物流的操做。

因而,应运而生的,第二个堪称里程碑的项目——系统拆分 诞生了。这个正是咱们在阿里圆桌会议上HR所说一位元老级员工作的——“给一架高速飞行的飞机换发动机”这么惊险的重构任务。这些组件分割难度很是之大,以致于那张复杂的逻辑图我实在看不懂……总之,淘宝中间件诞生了。

HSF(高性能服务框架):核心,外号好舒服。请参见做者的博文http://www.blogjava.net/BlueDavy/archive/2008/01/24/177533.html

Notify(消息中间件):淘宝自主开发的消息队列产品。支撑了10亿+的消息通知。

TDDL(分布式数据访问层):优化了DBRoute,在JDBC和DB之间隔了一层,负责数据库的优化工做。

Tbsession:由于Session保存在服务器中,可是用户可能会被动的频繁的切换服务器,淘宝的设计思路是将Session信息保存在Cookie中,最后使用Tair来保存。

阿里的开放平台也至关有历史,有兴趣的能够参观参观http://open.taobao.com/index.htm

 

8、总结

当你处于业界中流时,你能够向老大学习,等当你成为业界老大以后,你就须要不断超越本身,用本身的力量来改变整个行业,乃至整个世界。不管是华为,仍是阿里,当成为业内的Top时,责任反而更加剧大。

一直以为本身想着随大流,可是却又心有不甘。现在有机会能进入全中国最好的互联网网站,一直为本身这些年的付出感到荣幸,同时不断勉励本身,你须要变得更强才能融入这个集体。

任重而道远,纵望阿里淘宝这些年的发展之路,那些默默无闻却敢于探索钻研的人是最可爱的,遇到问题永远不服输,总会有办法去解决的。正如阿里圆桌会议HR所说的“在座的各位都是爱折腾的人”,我认可本身受之有愧,本身的身体一直不能保证毫无顾忌的拼斗,本身虽然天天坚持都去跑步,底子仍是不行,想要成为一名武林中人,更漫长的路须要我坚持的走下去,意志力,我能够有。

坚持学习,钻研学习,实践学习。但愿本身能坚持这三点信条。

至关佩服马总的思想理念和为人处事,也至关佩服那么多实力不凡而又忠心耿耿的部下,他们对得起他们的身价。

我相信淘宝的光辉路程的还有很长,个人学问之路,也必将一直走下去。

 


本文转载自
Gao Zhenxi 的博客

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息