0%

《淘宝技术这十年》读书笔记

微博上有人说“好的架构是进化来的,不是设计来的”。的 确如此,其实还可以再加上一句“好的功能也是进化来的,不是 设计来的”。

现在摆在他们面前的问题是用什么办法把一个庞大的网站从PHP语言迁移到Java?而且要求在迁移的过程中,不停止服务,原来系统的bugfix 和功能改进不受影响。亲,你要是架构师,你怎么做?有人的答案是写一个翻译器,如同把中文翻译成英文一样,自动翻译。我只能说你这个想法太超前了,“too young, too simple, sometimesnaive”。当时没有,现在也没有人能做到。他们的大致方案是 给业务分模块,一个模块一个模块地渐进式替换。如用户模块, 老的member.taobao.com继续维护,不添加新功能,新功能在新 的模块上开发,跟老的模块共用一个数据库,开发完毕之后放到 不同的应用集群上,另开一个域名member1.taobao.com,同时再 替换老的功能,替换一个,就把老的模块上的功能关闭一个,逐 渐把用户引导到member1.taobao.com,等所有的功能都替换完之 后,关闭member.taobao.com上。从设计上来看,这个member1的二级域名应该是一个过渡状态,但我们把member域名的代码下线以后,发现很难把member1切换回member,因为有些地方把 链接写死了,于是后来很长时间里我们都是在用member1.taobao. com这样奇怪的域名。

其实在任何时候,开发语言本身都不是系统的瓶颈,业务带来的压力更多的存在于数据和存储方面。前面也说到,MySQL撑 不住之后换为Oracle,Oracle的存储一开始在本机上,后来在NAS 上,NAS撑不住了用EMC的SAN存储,再后来,Oracle的RAC撑 不住了,数据的存储方面就不得不考虑使用小型机。

说到商品详情,这个字段比较恐 怖,有人统计过,淘宝商品详情打印出来平均有5米长,在系统里其实放在哪里都不招人待见。笔者清楚地记得,我来淘宝之后担任项目经理做的第一个项目就是把商品详情从商品表中移出来。它最早与商品的价格、运费等信息放在一个表中,拖慢了整张表的查询速度,而很多时候查询商品信息是不需要查看详情的。于 是在2005年的时候,我把商品详情放在数据库的另外一张表中, 再往后,这个大字段被从数据库中请了出来,先是放入了缓存系 统,到现在是放进了文件系统TFS中。

在某个规模以下采用现有的商业解决方案,达 到某种规模之后,商业的解决方案无法满足,只有自己创造解 决方案了。