这篇文章已经比较老了,大概发布于2012年之前。偶尔读到这篇文章,感受很不错,想找到原文收藏一下,可是原文已经找不到了,只知道做者是阿里员工卡特。网络中不少转载版本排版实在难看,遂本身写一篇精心排版的版本。
你发现快要过年了,因而想给你的女友买一件毛衣,你打开了www.taobao.com
,这时你的浏览器首先查询DNS服务器,将www.taobao.com
转换成IP地址。不过你首先会发现,在不一样的地区或者不一样的网络(电信、联通、移动)下,转换后的IP地址极可能是不同的,这首先涉及负载均衡的第一步,经过DNS解析域名时,将你的访问分配到不一样的入口,同时尽量保证你所访问的入口是全部入口中可能较快的一个(这和后文的CDN
不同)。前端
你经过这个入口成功地访问了www.taobao.com
实际的入口IP地址,这时产生了一个PV
(Page View
,页面访问量。每日每一个网站的总PV量是形容一个网站规模的重要指标。淘宝网全网在平日(非促销期间)的PV大概是16~25亿个之间)。同时做为一个独立的用户,你此次访问淘宝网的全部页面均算做一个UV(Unique Visitor
,用户访问)。最近臭名昭著的12306.cn
的日PV
量最高峰在10亿个左右,而UV量却远小于淘宝网十余倍,这其中的缘由相信你们都知道。chrome
由于同一时刻访问www.taobao.com
的人数过于巨大,因此,即使是生成淘宝首页页面的服务器,也不可能仅有一台,仅用于生成www.taobao.com
首页的服务器就可能有成百上千台,那么你的一次访问时生成页面给你看的任务便会被分配给其中一台服务器完成。这个过程要保证公正、公平、平均(即这成百上千台服务器每台负担的用户数要差很少),这一很复杂的过程由几个系统配合完成,其中最关键的即是LVS
(Linux Virtual Server,世界上最流行的负载均衡系统之一,是由目前在淘宝网供职的章文嵩博士开发的)。后端
通过一系列复杂的逻辑运算和数据处理,此次用于给你看的淘宝网首页的HTML内容便成功生成了。对Web前端稍微有点常识的人都应该知道,浏览器下一步会加载页面中用到的CSS
、JS (JavaScript)
、图片等样式、脚本和资源文件。可是可能相对较少的人才会知道,你的浏览器在同一个域名下并发加载的资源数量是有限的,例如IE 6和IE 7是两个,IE 8是6个,chrome各版本不大同样,通常是4~6个。我刚刚看了一下,我访问淘宝网首页须要加载126个资源,那么如此小的并发链接数天然会加载好久。因此前端开发人员每每会将上述这些资源文件分布在多个域名下,变相地绕过浏览器的这个限制,同时也为下文的CDN
工做作准备。浏览器
据不可靠消息称,在2011年“双十一”当天高峰,淘宝的访问流量最巅峰达到871GB/s
,这个数字意味着须要178万个4MB/s
的家庭宽带才能负担得起,也彻底有能力拖垮一个中小城市的所有互联网带宽。显然,这些访问流量不可能集中在一块儿,而且你们都知道,不一样地区、不一样网络(电信、联通等)之间互访会很是缓慢,可是你却不多发现淘宝网访问缓慢,这即是CDN
(Content Delivery Network,即内容分发网络的做用)。淘宝在全国各地创建了数十个甚至上百个CDN
节点,利用一些手段保证你访问的(这里主要指JS
、CSS
、图片等)站点是离你最近的CDN
节点,这样便保证了大流量的分散以及在各地访问的加速。服务器
这便出现了一个问题,那就是倘若一个卖家发布了一个新的宝贝,上传了几张新的宝贝图片,那么淘宝网如何保证全国各地的CDN
节点中都会同步存在这几张图片供用户使用呢?这就涉及大量的内容分发与同步的相关技术。另外,淘宝上拥有海量的宝贝图片等静态文件,这些文件的总容量也达到了数PB (1PB=1024TB=1048576GB)
,为了快速存取这些文件,淘宝开发了分布式文件系统TFS
(TaoBao File System)来处理这类问题。网络
好了,这时你终于加载完成淘宝首页,而后习惯性地在首页搜索框中输入“毛衣”二字并按回车键,这时你又产生了一个PV,而后,淘宝网的主搜索系统便开始为你服务,它首先对你输入的内容基于一个分词库进行分词操做。众所周知,英文是以词为单位的,词和词之间靠空格隔开,而中文是以字为单位,句子中全部的字连起来才能描述一个意思。例如,英文句子“I am a student”用中文表示,则为 “我是一个学生”。计算机能够很简单地经过空格知道 student 是一个单词,可是不太容易明白“学”、“生”两个字合起来才表示一个词。把中文的汉字序列切分红有意义的词,就是中文分词,有些人也称为切词。“我是一个学生” 分词的结果是 “我” “是” “一个” “学生”。并发
进行分词操做以后,还须要根据你输入的搜索词进行购物意图分析。用户进行搜索时经常有以下几类意图。负载均衡
经过对你的购物意图的分析,主搜索会呈现出彻底不一样的结果。分布式
以后的数个步骤后,主搜索系统便根据上述以及更多复杂的条件列出了搜索结果,这一切是由一千多台搜索服务器完成的。而后你开始逐一点击浏览搜索出的宝贝,查看宝贝详情页面。常常网购的亲们会发现,当你买过一个宝贝以后,即使是商家屡次修改了宝贝详情页,你仍然可以经过“已买到的宝贝”查看当时的快照。这是为了防止商家对在商品详情中承诺过的东西赖帐不认。显然,对于每一年数十亿甚至上百亿笔交易的商品详情快照进行保存和快速调用不是一件简单的事情。这其中又涉及数套系统的共同协做,其中较为重要的是Tair(淘宝自行研发的分布式KV存储方案)。oop
接下来,不管你是否真的进行了交易,你的这些访问行为都会如实地被系统记录下来,用于后续的业务逻辑和数据分析。这些记录中的访问日志记录即是最重要的记录之一,可是从前面咱们得知,这些访问是分布在各个地区多个不一样的服务器上的,而且因为用户众多,这些日志记录都很是庞大,达到TB级别也很是正常。那么,为了快速、及时、同步地传输这些日志数据,淘宝研发了 TimeTunnel,用于进行实时的数据传输,而后交给后端系统进行计算报表等操做。
你的浏览数据、交易数据以及其余不少数据记录均会被保留下来,使得淘宝存储的历史数据垂手可得地便达到了数十甚至更多个PB。如此巨大的数据量存储在阿里巴巴集团的数据仓库中,而且其中有些数据使用了压缩比高达 1:120
的极限存储技术。以后这些数据会经过一个叫作云梯的基于Hadoop的由3000多台服务器组成的超大规模数据系统,以及一个基于阿里巴巴集团自主研发的ODPS系统的数据系统,不断地进行分析和挖掘。
淘宝从这些数据中可以知道小到你是谁,你喜欢什么,你的孩子几岁了,你是否在谈恋爱,喜欢玩魔兽世界的人喜欢什么样的饮料等,大到各行各业的零售状况、各种商品的兴衰消亡等海量的信息。
说了这么多,其实也只是叙述了淘宝上正在运行的成千上万个系统中的寥寥几个。即使是你仅仅访问一次淘宝的首页,所涉及的技术和系统规模都是你彻底没法想象的,是淘宝2000多名顶级的工程师们的心血结晶,其中甚至包括长江学者、国家科学技术最高奖得主等众多牛人。一样,百度、腾讯等的业务系统也毫不比淘宝简单。你须要知道的是,你天天使用的互联网产品看似简单易用,背后却凝聚着不可思议的智慧与劳动。
(本文所涉及的技术与数据均来源于互联网)