淘宝复杂在哪里?-转
淘宝帝国
双 11无疑是淘宝系(淘宝+天猫)的独舞。
阿里集团 11 月 12 日凌晨确认,11.11购物狂欢节的支付宝总销售额达到 191 亿元,是去年的三倍多,其中仅天猫就达成了 132 亿元,淘宝则完成了 59 亿元。
- 一个让人瞠目的结果:如果将百元大钞摞起来,191亿元可高达1.9万米,相当于世界最高建筑迪拜塔(828米)的 23 倍,用常用点钞机需要耗费 133 天。
- 另一个让人瞠目的结果则是:“光棍节”当日天猫涌入了2.13亿网民。
为了阻击天猫光棍节促销,竞争对手纷纷出击,京东推出了沙漠风暴行动,苏宁推出了“3天 3 夜超级 0 元购”,形成“围攻天猫”之势。天猫最终成为赢家,尽管京东、易购尚未公布结果,但 191 亿元如一座高峰,竞争对手只能仰望。
从技术看淘宝
这次奇迹的背后,是淘宝成千上万顶尖工程师每天努力的结果,那么他们每天都在努力什么?淘宝的复杂在哪里?为什么这么恐怖的访问量,淘宝还是能撑得住?
先说你看到的页面上,最重要的几个:
- 搜索商品
这个功能,如果你有几千条商品,完全可以用select * from tableXX where title like %XX%这样的操作来搞定。但是——当你有10,000,000,000(一百亿)条商品的时候,任何一个数据库都无法存放了,请问你怎么搜索?
这里需要用到分布式的数据存储方案,另外这个搜索也不可能直接从数据库里来取数据,必然要用到搜索引擎(简单来说搜索引擎更快)。好,能搜出商品了,是否大功告成可以啵一个了呢?早着呢,谁家的商品出现在第一页?这里需要用到巨复杂的排序算法。要是再根据你的购买行为做一些个性化的推荐——这够一帮牛叉的算法工程师奋斗终生了。 - 商品详情
就是搜索完毕,看到你感兴趣的,点击查看商品的页面,这个页面有商品的属性、详细描述、评价、卖家信息等等,这个页面的每天展示次数在30亿以上。同样的道理,如果你做一个网站每天有10个人访问,你丝毫感觉不到服务器的压力,但是30亿,要解决的问题就多了去了。
首先,这些请求不能直接压到数据库上,任何单机或分布式的数据库,承受30亿每天的压力,都将崩溃到完全没有幸福感,这种情况下要用到的技术就是大规模的分布式缓存,所有的卖家信息、评价信息、商品描述都是从缓存里面来取到的,甚至更加极致的一点“商品的浏览量”这个信息,每打开页面一次都要刷新,你猜能够从缓存里面来取吗?淘宝做到了,整个商品的详情都在缓存里面。 - 商品图片
一个商品有5个图片,商品描述里面有更多图片,你猜淘宝有多少张图片要存储?100亿以上。这么多图片要是在你的硬盘里面,你怎么去查找其中的一张?要是你的同学想拷贝你的图片,你需要他准备多少块硬盘?你需要配置多少大的带宽?你们的网卡是否能够承受?你需要多长时间拷贝给他?这样的规模,很不幸市面上已经没有任何商业的解决方案,最终必须自己来开发一套存储系统,如果你听说过google的GFS,淘宝跟他类似,叫TFS。顺便说一下,腾讯也有这样的一套,也叫TFS。 - 广告系统
淘宝上有很多广告,什么,你不知道?那说明淘宝的广告做的还不错,居然很多人不认为它是广告,卖家怎么出价去买淘宝的广告位?广告怎么展示?怎么查看广告效果?这又是一套算法精奇的系统。 - BOSS系统
淘宝的工作人员怎么去管理这么庞大的一个系统,例如某时刻突然宣布某位作家的作品全部从淘宝消失,从数据库到搜索引擎到广告系统,里面的相关数据在几分钟内全部消失,这又需要一个牛叉的后台支撑系统。 - 运维体系
支持这么庞大的一个网站,你猜需要多少台服务器?几千台?那是零头。这么多服务器,上面部署什么操作系统,操作系统的内核能否优化?Java虚拟机能否优化?通信模块有没有榨取性能的空间?软件怎么部署上去?出了问题怎么回滚?你装过操作系统吧,优化过吧,被360坑过没,崩溃过没?这里面又有很多门道。
除了上面提到的这些,还有很多很多需要做的技术,比如网站安全等等,当然并不是这些东西有多么高不可攀,任何复杂的庞大的东西都是从小到大做起来的,里面需要牛叉到不行的大犇,也需要充满好奇心的菜鸟。
当用户、数据和系统规模上到一个程度之后,所有曾经可以忽视的问题都会变得必须用从来不可想象的精力和技术去解决。问题规模大到一定级别,任何微小的改进都能带来巨大的回报。但是这样的改进往往不是那么容易做到,所以需要大量顶尖高手来开发。