访问淘宝时发生了什么【转载+整理】

原文地址:http://kb.cnblogs.com/page/132716/

     访问淘宝,不过就是上网,但是你若从技术角度去看待,这其中涉及的技术绝对不简单,也不是一蹴而就的事,背后是十几年,很多人的智慧与劳动。在2011年11月11日,“双十一”这天的淘宝:

  • 总交易金额192亿
  • 订单105,800,000笔,其中无线支付近900万笔
  • 支付宝核心数据库集群处理了41亿个事务
  • 执行285亿次 SQL
  • 生成15TB日志
  • 访问1931亿次内存数据块

     有时会想,若让淘宝去做 12306 会如何?

     过年时,你打算给家人买件毛衣,于是打开 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 量却远小于淘宝网十余倍。原因自不必说。

 

     同一时刻,访问淘宝的人数也很巨大,因此,即便是生成淘宝首页页面的服务器,也不能仅有一台,而是成百上千台服务器。这样,你在一次访问时,生成页面给你看的任务会被分配给其中一台服务器来完成。这个过程要保证公平、公正、平均,这一很复杂的过程是由几个系统配合完成,其中最关键的便是 LVS(Linux Virtual Server)——世界上最流行的负载均衡系统之一,正是由目前在淘宝网供职的章文嵩博士开发的。

 

     经过一系列逻辑运算和数据处理,用于这次给你显示的淘宝首页 HTML 页面便生成成功了。对 Web 前端有点了解的人都知道,下一步浏览器会去加载页面中所使用的 css、js、图片、脚本和资源文件。但可能相对较少的人才会知道的是,浏览器在同一个域名下可并发加载资源,且数量是有限制的,如 IE 6、7 是两个,IE 8 是 6 个,Chrome 各版本都不同,一般是 4-6 个。比如,我访问淘宝网首页需要加载 126 个资源,那么,如此小的并发连接数自然会加载很久。所以,前端开发人员往往会将上述这些资源文件分布在多个域名下,变相地绕过浏览器的这个限制,同时,也为后面的 CDN 工作做准备。

 

     据初步消息,在“双十一(2011年11月11日)”当天的高峰期,淘宝访问流量最高峰达到 871GB/S。这意味着需要 178 万个 4Mb 带宽的家庭宽带才能负担得起,也完全可以拖垮一个中小城市的全部互联网带宽。显然,这些访问流量不可能集中在一起。大家都知道,不同地区、不同网络(电信、联通等)之间互访会非常缓慢,但你很少发现淘宝访问缓慢。这就是 CDN(Content Delivery Network,内容分发网络)的作用。淘宝在全国各地建立了数十或百个 CDN 节点,利用一些技术手段保证你需要的资源(js、css、图片等)访问离你最近的 CDN 节点,这就保证了大流量分散在各地访问的加速节点上。

 

     但问题随之出现,假若一个卖家发布了一个新宝贝,上传了几张新的宝贝图片,那么,淘宝如何保证全国各地的 CDN 节点都会存在这几张图片供用户查看呢?这涉及到大量的内容分发与同步的相关技术。淘宝开发了分布式文件系统(Taobao File System,TFS)来解决这个问题。

 

     现在,你终于成功加载完淘宝首页。接下来,你会在首页搜索框中输入“毛衣”并回车,此时,你又产生了一个 PV。之后,淘宝的主搜索系统便开始为帮你查询。它首先对你输入的内容基于一个分词库进行分词。英文以词为单位,词和词之间靠空格分隔,而中文以字为单位,句子中所有的字连起来才能描述一个意思。例如,英文句子“I am a student”,中文译为“我是一个学生”。要是英文分词,简单地通过空格就知道 student 是一个单词,但中文分词就不那么容易,计算机不能明白“学”和“生”两个字,只有合起来才表示一个词。把中文汉字序列切成有意义的词,就是中文分词(后称切词)。那么,我是一个学生,分词结果是:我 是 一个 学生。

 

     分词后,还需要根据你输入的搜索词分析你的购物意图。用户搜索时通常有如下几类意图:

  • 浏览型:没有明确的购物对象和意图,边看边买,比较随意和感性。例如:“2010年10大香水排行”,“2010年流行毛衣”, “zippo 有多少种类?”;
  • 查询型:有一定的购物意图,体现在对属性的要求上。例如:“适合老人用的手机”,“500元 手表”;
  • 对比型:已经缩小了购物意图,具体到了某几个产品。例如:“诺基亚E71 E63″,“akg k450 px200″;
  • 确定型:已经基本决定,重点考察某个对象。例如:“诺基亚N97″,“IBM T60″。

     通过对你购物意图的分析,主搜索会呈现出完全不同的结果来。

 

     主搜索系统根据上述以及更多的复杂条件列出搜索结果。这一切是由一千多台搜索服务器完成。然后,你开始逐一点击浏览搜索出的宝贝,查看宝贝详情。经常网购的亲们会发现,当你买过了一个宝贝之后,即便是商家多次修改了宝贝详情,你仍然能够通过“已买到的宝贝”查看当时的快照,这是为了防止商家对在商品详情中承诺过的东西赖账不认。那么,对于每年数亿的商品详情进行快照保存和快速调用不是一个简单的事情。这又涉及到数套系统的共同协作,其中较为重要的是 Tair,淘宝自行研发的分布式 KV 存储方案。

 

     然后,无论你是否真正交易,你的这些访问行为都会忠实地被系统记录,用于下次查看,淘宝后续的业务逻辑和数据分析。这些记录中访问日志是最重要的记录之一, 但这些访问是分布在各个地区不同的服务器上,并且由于用户众多,日志记录非常庞大,达到 TB 级别非常正常。那么为了快速及时传输同步这些日志数据,淘宝研发了 TimeTunnel,用于进行实时的数据传输,交给后端系统计算报表等操作。

 

     你的浏览数据、交易数据以及其它很多很多的数据记录均会被保留下来。淘宝存储的历史数据轻而易举的便达到了十数甚至更多个 PB(1PB=1024TB=1048576GB)。如此巨大的数据量经过淘宝系统 1:120 的极限压缩存储在淘宝的数据仓库中。并且通过一个叫做云梯的,由 2000 多台服务器组成的超大规模数据系统不断的进行分析和挖掘。

 

     从这些数据中,淘宝能够分析出小到你是谁,你喜欢什么,你孩子几岁,你是否在谈恋爱,是否喜欢玩魔兽世界以及喜欢什么饮料等,大到各行各业的零售情况、各类商品的兴衰消亡等信息。

 

     说了这么多,其实也只是叙述了淘宝上正在运行的成千上万个系统中的寥寥几个。即便是你仅仅访问一次淘宝的首页,所涉及到的技术和系统规模都是你完全无法想象的,是淘宝 2000 多名顶级工程师们的心血结晶,其中甚至包括长江学者、国家科学技术最高奖得主等众多大牛。同样,百度、腾讯等的业务系统也绝不比淘宝简单。你需要知道的是,你每天使用的互联网产品,看似简单易用,背后却凝聚着难以想象的智慧与劳动。

posted @ 2013-03-05 15:45  船长&CAP  阅读(565)  评论(0编辑  收藏  举报
免费流量统计软件