淘宝复杂在哪里?

淘宝系的胜利
服务器君一共花费了456.195 ms进行了5次数据库查询,努力地为您提供了这个页面。
试试阅读模式?希望听取您的建议

淘宝帝国

双 11无疑是淘宝系(淘宝+天猫)的独舞。

阿里集团 11 月 12 日凌晨确认,11.11购物狂欢节的支付宝总销售额达到 191 亿元,是去年的三倍多,其中仅天猫就达成了 132 亿元,淘宝则完成了 59 亿元。

  • 一个让人瞠目的结果:如果将百元大钞摞起来,191亿元可高达1.9万米,相当于世界最高建筑迪拜塔(828米)的 23 倍,用常用点钞机需要耗费 133 天。
  • 另一个让人瞠目的结果则是:“光棍节”当日天猫涌入了2.13亿网民。

为了阻击天猫光棍节促销,竞争对手纷纷出击,京东推出了沙漠风暴行动,苏宁推出了“3天 3 夜超级 0 元购”,形成“围攻天猫”之势。天猫最终成为赢家,尽管京东、易购尚未公布结果,但 191 亿元如一座高峰,竞争对手只能仰望。

从技术看淘宝

这次奇迹的背后,是淘宝成千上万顶尖工程师每天努力的结果,那么他们每天都在努力什么?淘宝的复杂在哪里?为什么这么恐怖的访问量,淘宝还是能撑得住?

先说你看到的页面上,最重要的几个:

  1. 搜索商品
  2. 这个功能,如果你有几千条商品,完全可以用select * from tableXX where title like %XX%这样的操作来搞定。但是——当你有10,000,000,000(一百亿)条商品的时候,任何一个数据库都无法存放了,请问你怎么搜索?

    这里需要用到分布式的数据存储方案,另外这个搜索也不可能直接从数据库里来取数据,必然要用到搜索引擎(简单来说搜索引擎更快)。好,能搜出商品了,是否大功告成可以啵一个了呢?早着呢,谁家的商品出现在第一页?这里需要用到巨复杂的排序算法。要是再根据你的购买行为做一些个性化的推荐——这够一帮牛叉的算法工程师奋斗终生了。

  3. 商品详情
  4. 就是搜索完毕,看到你感兴趣的,点击查看商品的页面,这个页面有商品的属性、详细描述、评价、卖家信息等等,这个页面的每天展示次数在30亿以上。同样的道理,如果你做一个网站每天有10个人访问,你丝毫感觉不到服务器的压力,但是30亿,要解决的问题就多了去了。

    首先,这些请求不能直接压到数据库上,任何单机或分布式的数据库,承受30亿每天的压力,都将崩溃到完全没有幸福感,这种情况下要用到的技术就是大规模的分布式缓存,所有的卖家信息、评价信息、商品描述都是从缓存里面来取到的,甚至更加极致的一点“商品的浏览量”这个信息,每打开页面一次都要刷新,你猜能够从缓存里面来取吗?淘宝做到了,整个商品的详情都在缓存里面。

  5. 商品图片
  6. 一个商品有5个图片,商品描述里面有更多图片,你猜淘宝有多少张图片要存储?100亿以上。这么多图片要是在你的硬盘里面,你怎么去查找其中的一张?要是你的同学想拷贝你的图片,你需要他准备多少块硬盘?你需要配置多少大的带宽?你们的网卡是否能够承受?你需要多长时间拷贝给他?这样的规模,很不幸市面上已经没有任何商业的解决方案,最终必须自己来开发一套存储系统,如果你听说过google的GFS,淘宝跟他类似,叫TFS。顺便说一下,腾讯也有这样的一套,也叫TFS。

  7. 广告系统
  8. 淘宝上有很多广告,什么,你不知道?那说明淘宝的广告做的还不错,居然很多人不认为它是广告,卖家怎么出价去买淘宝的广告位?广告怎么展示?怎么查看广告效果?这又是一套算法精奇的系统。

  9. BOSS系统
  10. 淘宝的工作人员怎么去管理这么庞大的一个系统,例如某时刻突然宣布某位作家的作品全部从淘宝消失,从数据库到搜索引擎到广告系统,里面的相关数据在几分钟内全部消失,这又需要一个牛叉的后台支撑系统。

  11. 运维体系
  12. 支持这么庞大的一个网站,你猜需要多少台服务器?几千台?那是零头。这么多服务器,上面部署什么操作系统,操作系统的内核能否优化?Java虚拟机能否优化?通信模块有没有榨取性能的空间?软件怎么部署上去?出了问题怎么回滚?你装过操作系统吧,优化过吧,被360坑过没,崩溃过没?这里面又有很多门道。

除了上面提到的这些,还有很多很多需要做的技术,比如网站安全等等,当然并不是这些东西有多么高不可攀,任何复杂的庞大的东西都是从小到大做起来的,里面需要牛叉到不行的大犇,也需要充满好奇心的菜鸟。

当用户、数据和系统规模上到一个程度之后,所有曾经可以忽视的问题都会变得必须用从来不可想象的精力和技术去解决。问题规模大到一定级别,任何微小的改进都能带来巨大的回报。但是这样的改进往往不是那么容易做到,所以需要大量顶尖高手来开发。

如果有兴趣可以再读读这个:你在淘宝买件东西背后的复杂技术

本文地址:http://www.nowamagic.net/librarys/veda/detail/2347,欢迎访问原出处。

不打个分吗?

转载随意,但请带上本文地址:

http://www.nowamagic.net/librarys/veda/detail/2347

如果你认为这篇文章值得更多人阅读,欢迎使用下面的分享功能。
小提示:您可以按快捷键 Ctrl + D,或点此 加入收藏

大家都在看

阅读一百本计算机著作吧,少年

很多人觉得自己技术进步很慢,学习效率低,我觉得一个重要原因是看的书少了。多少是多呢?起码得看3、4、5、6米吧。给个具体的数量,那就100本书吧。很多人知识结构不好而且不系统,因为在特定领域有一个足够量的知识量+足够良好的知识结构,系统化以后就足以应对大量未曾遇到过的问题。

奉劝自学者:构建特定领域的知识结构体系的路径中再也没有比学习该专业的专业课程更好的了。如果我的知识结构体系足以囊括面试官的大部分甚至吞并他的知识结构体系的话,读到他言语中的一个词我们就已经知道他要表达什么,我们可以让他坐“上位”毕竟他是面试官,但是在知识结构体系以及心理上我们就居高临下。

所以,阅读一百本计算机著作吧,少年!

《深入理解MySQL核心技术》 Sasba Pacbev (作者), 李芳 (译者), 于红芸 (译者), 邵健 (译者)

《深入理解MySQL核心技术》:从公共可用性的意义上讲,MySQL源代码是开放源代码,但如果对其不了解,则实质上,它对于您来说是封闭的。MysQL开发团队的前成员Sasha Pachev通过《深入理解MySQL核心技术》给出了MySQL 5的全面指南,揭示了这一强大数据库的内部运作。您将直奔MySQL核心技术,了解各种数据结构和各种方便的功能的运作情况,了解如何添加新的存储引擎和配置选项等。 《深入理解MySQL核心技术》从结构概况讲起,在这一部分解释了MysQL的不同组件是如何协同工作的。接着将学习设置有效的可编译代码副本的步骤,然后使用基本架构添加自己的配置变量和存储引擎。

更多计算机宝库...