当前位置: 首页 > 后端技术 > PHP

技术科普贴:你刚在淘宝上买了东西

时间:2023-03-30 01:58:39 PHP

这篇文章比较老,大概是2012年以前发表的,偶尔看看这篇文章,感觉很好。想找原文保存,可是原文已经找不到了。我只知道作者是阿里的员工Carter。网上很多转载的版本排版实在是太丑了,所以自己写了一个仔细排版的版本。你发现快过年了,想给女朋友买件毛衣,你打开www.taobao.com,浏览器先查询DNS服务器,将www.taobao.com转换成IP地址。但是你首先会发现,在不同的地区或者不同的网络(电信、联通、移动),转换后的IP地址很可能是不一样的,这首先涉及到负载均衡的第一步,在通过DNS解析域名的时候,分配你对不同入口的访问,尽量保证你访问的入口是所有入口中最快的(这点和后面的CDN不同)。您已经通过该入口成功访问到了www.taobao.com的实际入口IP地址,此时会产生一个PV(PageView,页面访问量)。每个网站的日总PV是描述一个网站规模的重要指标(淘宝全网平日(非促销期)PV约为1.6~25亿)。同时,作为独立用户,您本次访问淘宝的所有页面都算作一次UV(UniqueVisitor,用户访问)。近期,臭名昭著的12306.cn日PV量峰值在10亿左右,而UV量远不及淘宝的十倍。我相信每个人都知道这是为什么。因为同时访问www.taobao.com的人数太多,即使只有一台服务器生成淘宝首页,也可能有几百台服务器只用来生成www的首页.taobao.com有几千台服务器,那么在你访问的时候生成一个页面给你看的任务就会分配给其中一台服务器来完成。这个过程一定要公平、公平、平均(也就是这几十万台服务器每台服务器所负担的用户数量应该差不多),这个非常复杂的过程是由几个系统完成的,其中最关键的是就是LVS(LinuxVirtualServer,目前世界上最流行的负载均衡系统之一,由目前在淘宝工作的张文松博士开发)。经过一系列复杂的逻辑运算和数据处理,就成功生成了本次给大家看到的淘宝首页的HTML内容。稍微有点Web前端常识的人都应该知道,浏览器会在下一步加载页面中用到的CSS、JS(JavaScript)、图片等样式、脚本和资源文件。但是相对较少的人可能知道,你的浏览器在同一个域名下的并发加载资源数是有限制的,比如IE6和IE7是两个,IE8是六个,chrome的版本也不一样,一般4到6个,我刚看了一下,访问淘宝首页需要加载126个资源,这么少的并发连接数自然加载时间长。因此,前端开发者往往将上述资源文件分发到多个域名下,变相绕过浏览器的这一限制,同时也为后面的CDN工作做准备。据不可靠消息称,2011年“双十一”高峰日,淘宝的访问流量峰值达到了871GB/s。这个数字意味着需要178万个4MB/s的家庭宽带才能负担得起,完全合理。能够拖垮整个中小城市的互联网带宽。显然,这些访问流量不能集中在一起,大家都知道不同地区不同网络(电信、联通等)之间相互访问会很慢,但是你很少发现淘宝访问慢,这就是CDN(ContentDeliveryNetwork,内容分发网络的作用)。淘宝在全国建立了几十个甚至上百个CDN节点,通过一些手段保证你访问的站点(这里主要是指JS、CSS、图片等)是离你最近的CDN节点,从而保证大流量无处不在的去中心化和加速访问。这就产生了一个问题,就是如果一个卖家发布了一个新宝贝,上传了好几张新宝贝图片,淘宝怎么保证这些图片会同时存在于全国的CDN节点供用户使用呢??这涉及到大量与内容分发和同步相关的技术。此外,淘宝还有大量宝贝图片等静态文件,这些文件的总容量达到了数PB(1PB=1024TB=1048576GB)。为了快速访问这些文件,淘宝开发了分布式文件系统TFS(TaoBaoFileSystem)来应对此类问题。嗯,这个时候,你终于载入了淘宝首页,然后习惯性地在首页的搜索框中输入“毛衣”这个词,按下回车键。这时候你又生成了一个PV,然后,淘宝的主搜索系统就开始为你服务了。它首先根据词库对你输入的内容进行分词。众所周知,英语是以词为基础的,单词之间用空格隔开,而汉语是以单词为基础的,一个句子中的所有单词都可以连接起来描述一个意思。例如,英文句子“Iamastudent”用中文表达为“我是一个学生”。计算机通过空格很容易知道student是一个词,但是“学”和“生”这两个词一起代表一个词就不太容易理解了。将汉字序列分割成有意义的词就是中文分词,也有人称之为切词。“我是学生”的分词结果是“我”“是”“一个”“学生”。分词操作之后,还需要根据你输入的搜索词来分析购物意图。用户搜索时,往往有以下几种意图。浏览型:没有明确的购物对象和意图,用户比较随意和感性。查询如:“2010年香水排行榜前10名”、“2010年流行毛衣”、“zippo有多少种?”;查询类型:有一定的购物意向,体现在对属性的要求上。查询如:“适合老年人使用的手机”、“500元手表”;比较型:购物意向被缩小,具体到某几件商品。查询如:“NokiaE71E63”、“akgk450px200”;确定性类型:基本决定已经做出,重点放在某个对象上。查询示例:“NokiaN97”、“IBMT60”通过分析您的购物意向,主搜索会显示完全不同的结果。经过几步之后,主搜索系统根据以上以及更复杂的条件列出了搜索结果,这一切都是由上千台搜索服务器完成的。然后开始点击一个一个浏览搜索到的宝贝,查看宝贝详情页。经常网购的亲们会发现,您购买宝贝后,即使商家多次修改宝贝详情页,您仍然可以通过“已购宝贝”查看当时的快照。这是为了防止商家否认他们在产品详情中承诺的内容。显然,要保存并快速调用每年数十亿甚至数百亿交易的产品细节快照并不是一件简单的事情。这里面也涉及到几个系统的配合,其中最重要的就是Tair(淘宝自研的分布式KV存储方案)。接下来,无论你是否真的进行了交易,你的访问行为都会被系统如实记录下来,用于后续的业务逻辑和数据分析。这些记录中的访问日志记录是最重要的记录之一,但是从上面我们知道,这些访问分布在各个地区的多台不同的服务器上,由于用户数量众多,这些日志记录非常庞大。达到结核级别也是很正常的。然后,为了快速、及时、同步地传输这些日志数据,淘宝开发了TimeTunnel进行实时数据传输,然后交给后台系统进行计算和报表操作。你的浏览数据、交易数据等诸多数据记录都会被保留下来,使得淘宝存储的历史数据动辄达到几十甚至更多PB。如此海量的数据存储在阿里巴巴集团的数据仓库中,部分数据采用了极限存储技术,压缩比高达1:120。之后,这些数据将通过基于Hadoop的3000多台服务器组成的超大规模数据系统云梯,以及阿里巴巴集团自主研发的基于ODPS系统的数据系统进行持续分析和挖掘。从这些数据中,淘宝可以知道你是谁,你喜欢什么,你的孩子多大,你是否在恋爱,喜欢玩魔兽世界的人喜欢喝什么饮料等等。各种商品的下跌等海量信息。说了这么多,其实只是描述了淘宝上运行的几千个系统中的一小部分。即便只访问一次淘宝首页,所涉及的技术和系统规模也是完全难以想象的。它是淘宝网2000多名顶尖工程师的心血结晶,其中包括长江学者和国家最高科技奖获得者。等待许多伟大的人。同样,百度、腾讯等的业务系统也绝不比淘宝简单。你要知道的是,你每天使用的互联网产品,看似简单易用,背后却蕴藏着常人难以想象的智慧和劳动。(本文涉及的技术和数据均来自网络)