声明:文章和保存之前看到在计算机网络中的文件,有没有办法找到原文地址。在该声明。为了上网project教师致敬。
你找到新的一年。所以,我想给你女朋友买一件毛衣,你打开www.taobao.com
。这时你的浏览器首先查询DNS
server。将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
量却远小于淘宝网十余倍。这当中的原因我相信大家都会知道。
由于同一时刻訪问www.taobao.com
的人数过于巨大,所以即便是生成淘宝首页页面的server,也不可能仅有一台。
仅用于生成www.taobao.com
首页的server就可能有成百上千台,那么你的一次訪问时生成页面给你看的任务便会被分配给当中一台server完毕。
这个过程要保证公正、公平、平均(暨这成百上千台server每台负担的用户数要差点儿相同),这一非常复杂的过程是由几个系统配合完毕,当中最关键的便是LVS
(Linux Virtual Server
),世界上最流行的负载均衡系统之中的一个,正是由眼下在淘宝网供职的章文嵩博士开发的。
经过一系列复杂的逻辑运算和数据处理,用于这次给你看的淘宝网首页的HTML
内容便生成成功了。
对web
前端略微有点常识的童鞋都应该知道,下一步浏览器会去载入页面中用到的css
、js
、图片、脚本和资源文件。
可是可能相对较少的同学才会知道。你的浏览器在同一个域名下并发载入的资源数量是有限制的,比如IE6-7
是两个。IE8
是6个,Chrome
各版本号不大一样,通常是4-6个。我刚刚看了一下,我訪问淘宝网首页须要载入126个资源,那么如此小的并发连接数自然会载入非常久。所曾经端开发者往往会将上述这些资源文件分布在好多个域名下,变相的绕过浏览器的这个限制。同一时候也为下文的CDN
工作做准备。
据不可靠消息,在双十一当天高峰,淘宝的訪问流量最巅峰达到871GB/S
。这个数字意味着须要178万个4Mb
带宽的家庭宽带才干负担的起,也全然有能力拖垮一个中小城市的全部互联网带宽。那么显然,这些訪问流量不可能集中在一起。而且大家都知道,不同地区不同网络(电信、联通等)之间互訪会非常缓慢,可是你却发现非常少发现淘宝网訪问缓慢。这便是CDN
(Content Delivery Network
)。即内容分发网络的作用。淘宝在全国各地建立了数十上百个CDN
节点,利用一些手段保证你訪问的(这里主要指js
、css
、图片等)地方是离你近期的CDN
节点,这样便保证了大流量分散在各地訪问的加速节点上。
这便出现了一个问题,那就是假若一个卖家公布了一个新的宝贝,上传了几张新的宝贝图片。那么淘宝网怎样保证全国各地的CDN
节点中都会同步的存在这几张图片供用户使用呢?这里边就涉及到了大量的内容分发与同步的相关技术。淘宝开发了分布式文件系统TFS
(Taobao File System
)来处理这类问题。
好了。这时你最终载入完了淘宝首页,那么你习惯性的在首页搜索框中输入了’毛衣’二字并敲回车,这时你又产生了一个PV
。然后,淘宝网的主搜索系统便開始为你服务了。
它首先对你输入的内容基于一个分词库进行分词操作。
众所周知,英文是以词为单位的。词和词之间是靠空格隔开,而中文是以字为单位,句子中全部的字连起来才干描写叙述一个意思。比如。英文句子I am a student
。用中文则为:“我是一个学生”。计算机可以非常easy通过空格知道student
是一个单词,可是不能非常容易明白“学”、“生”两个字合起来才表示一个词。
把中文的汉字序列切分成有意义的词,就是中文分词。有些人也称为切词。我是一个学生。分词的结果是:我 是 一个 学生。
进行分词之后,还须要依据你输入的搜索词进行你的购物意图分析。用户进行搜索时经常有例如以下几类意图:(1)浏览型:没有明白的购物对象和意图,边看边买,用户比較任意和感性。Query
比如:”2010年10大香水排行”,”2010年流行毛衣”, “zippo
有多少种类?”;(2)查询型:有一定的购物意图。体如今对属性的要求上。Query
比如:”适合老人用的手机”。”500元 手表”;(3)对照型:已经缩小了购物意图,详细到了某几个产品。Query
比如:”诺基亚E71
E63
″,”akg
k450
px200
″。(4)确定型:已经做了基本决定,重点考察某个对象。Query
比如:”诺基亚N97
″。”IBM
T60
″。通过对你的购物意图的分析,主搜索会呈现出全然不同的结果来。
之后的数个步骤后,主搜索系统便依据上述以及很多其它复杂的条件列出了搜索结果,这一切是由一千多台搜索server完毕。然后你開始逐一点击浏览搜索出的宝贝。你開始查看宝贝详情页面。经常网购的亲们会发现。当你买过了一个宝贝之后。即便是商家多次改动了宝贝详情页,你仍然可以通过‘已买到的宝贝’查看当时的快照。这是为了防止商家对在商品详情中承诺过的东西赖账不认。那么显然。对于每年数十上百亿比交易的商品详情快照进行保存和高速调用不是一个简单的事情。这当中又涉及到数套系统的共同协作,当中较为重要的是Tair
,淘宝自行研发的分布式KV
存储方案。
然后不管你是否真正进行了交易,你的这些訪问行为便忠实的被系统记录下来。用于兴许的业务逻辑和数据分析。这些记录中訪问日志记录便是最重要的记录之中的一个。 可是前边我们得知,这些訪问是分布在各个地区非常多不同的server上的。而且由于用户众多,这些日志记录都非常庞大,达到TB
级别非常正常。那么为了高速及时 传输同步这些日志数据。淘宝研发了TimeTunnel
。用于进行实时的传输数据,交给后端系统进行计算报表等操作。
你的浏览数据、交易数据以及其它非常多非常多的数据记录均会被保留下来。使得淘宝存储的历史数据轻而易举的便达到了十数甚至很多其它个 PB(1PB=1024TB=1048576GB)
。如此巨大的数据量经过淘宝系统1:120的极限压缩存储在淘宝的数据仓库中。
而且通过一个叫做云梯的,由2000多台server组成的超大规模数据系统不断的进行分析和挖掘。
从这些数据中淘宝可以知道小到你是谁。你喜欢什么。你的孩子几岁了,你是否在谈恋爱,喜欢玩魔兽世界的人喜欢什么样的饮料等,大到各行各业的零售情况、各类商品的兴衰消亡等等海量的信息。
说了这么多,事实上也不过叙述了淘宝上正在执行的成千上万个系统中的寥寥几个。
即便是你只訪问一次淘宝的首页,所涉及到的技术和系统规模都是你全然无法想象的。是淘宝2000多名顶级的project师们的心血结晶。当中甚至包含长江学者、国家科学技术最高奖得主等众多大牛。
相同,百度、腾讯等的业务系统也绝不比淘宝简单。你须要知道的是,你每天使用的互联网产品。看似简单易用,背后却凝聚着难以想象的智慧与劳动。