乐趣区

关于php:技术普及帖你刚才在淘宝上买了一件东西

这篇文章曾经比拟老了,大略公布于 2012 年以前。偶然读到这篇文章,感觉很不错,想找到原文珍藏一下,然而原文曾经找不到了,只晓得作者是阿里员工卡特。网络中很多转载版本排版切实难看,遂本人写一篇精心排版的版本。


你发现快要过年了,于是想给你的女朋友买一件毛衣,你关上了 www.taobao.com,这时你的浏览器首先查问 DNS 服务器,将www.taobao.com 转换成 IP 地址。不过你首先会发现,在不同的地区或者不同的网络(电信、联通、挪动)下,转换后的 IP 地址很可能是不一样的,这首先波及负载平衡的第一步,通过 DNS 解析域名时,将你的拜访调配到不同的入口,同时尽可能保障你所拜访的入口是所有入口中可能较快的一个(这和后文的 CDN 不一样)。

你通过这个入口胜利地拜访了 www.taobao.com 理论的入口 IP 地址,这时产生了一个 PVPage View,页面访问量。每日每个网站的总 PV 量是形容一个网站规模的重要指标。淘宝网全网在素日(非促销期间)的 PV 大略是 16~25 亿个之间)。同时作为一个独立的用户,你这次拜访淘宝网的所有页面均算作一个 UV(Unique Visitor,用户拜访)。最近臭名远扬的12306.cn 的日 PV 量最高峰在 10 亿个左右,而 UV 量却远小于淘宝网十余倍,这其中的起因置信大家都晓得。

因为同一时刻拜访 www.taobao.com 的人数过于微小,所以,即使是生成淘宝首页页面的服务器,也不可能仅有一台,仅用于生成 www.taobao.com 首页的服务器就可能有成千盈百台,那么你的一次拜访时生成页面给你看的工作便会被调配给其中一台服务器实现。这个过程要保障公正、偏心、均匀(即这成千盈百台服务器每台累赘的用户数要差不多),这一很简单的过程由几个零碎配合实现,其中最要害的便是LVS(Linux Virtual Server,世界上最风行的负载平衡零碎之一,是由目前在淘宝网供职的章文嵩博士开发的)。

通过一系列简单的逻辑运算和数据处理,这次用于给你看的淘宝网首页的 HTML 内容便胜利生成了。对 Web 前端略微有点常识的人都应该晓得,浏览器下一步会加载页面中用到的 CSSJS(JavaScript)、图片等款式、脚本和资源文件。然而可能绝对较少的人才会晓得,你的浏览器在同一个域名下并发加载的资源数量是无限的,例如 IE 6 和 IE 7 是两个,IE 8 是 6 个,chrome 各版本不大一样,个别是 4~6 个。我刚刚看了一下,我拜访淘宝网首页须要加载 126 个资源,那么如此小的并发连接数天然会加载很久。所以前端开发人员往往会将上述这些资源文件散布在多个域名下,变相地绕过浏览器的这个限度,同时也为下文的CDN 工作做筹备。

据不可靠消息称,在 2011 年“双十一”当天顶峰,淘宝的拜访流量最巅峰达到 871GB/s,这个数字意味着须要 178 万个4MB/s 的家庭宽带能力负担得起,也齐全有能力拖垮一个中小城市的全副互联网带宽。显然,这些拜访流量不可能集中在一起,并且大家都晓得,不同地区、不同网络(电信、联通等)之间互访会十分迟缓,然而你却很少发现淘宝网拜访迟缓,这便是 CDN(Content Delivery Network,即内容散发网络的作用)。淘宝在全国各地建设了数十个甚至上百个CDN 节点,利用一些伎俩保障你拜访的(这里次要指 JSCSS、图片等)站点是离你最近的CDN 节点,这样便保障了大流量的扩散以及在各地拜访的减速。

这便呈现了一个问题,那就是假若一个卖家公布了一个新的宝贝,上传了几张新的宝贝图片,那么淘宝网如何保障全国各地的 CDN 节点中都会同步存在这几张图片供用户应用呢?这就波及大量的内容散发与同步的相干技术。另外,淘宝上领有海量的宝贝图片等动态文件,这些文件的总容量也达到了数PB(1PB=1024TB=1048576GB),为了疾速存取这些文件,淘宝开发了分布式文件系统TFS(TaoBao File System)来解决这类问题。

好了,这时你终于加载实现淘宝首页,而后习惯性地在首页搜寻框中输出“毛衣”二字并按回车键,这时你又产生了一个 PV,而后,淘宝网的主搜寻零碎便开始为你服务,它首先对你输出的内容基于一个分词库进行分词操作。家喻户晓,英文是以词为单位的,词和词之间靠空格隔开,而中文是以字为单位,句子中所有的字连起来能力形容一个意思。例如,英文句子“I am a student”用中文示意,则为“ 我是一个学生”。计算机能够很简略地通过空格晓得 student 是一个单词,然而不太容易明确“学”、“生”两个字合起来才示意一个词。把中文的汉字序列切分成有意义的词,就是中文分词,有些人也称为切词。“我是一个学生”分词的后果是“我”“是”“一个”“学生”。

进行分词操作之后,还须要依据你输出的搜索词进行购物用意剖析。用户进行搜寻时经常有如下几类用意。

  • 浏览型:没有明确的购物对象和用意,边看边买,用户比拟随便和理性。Query 例如:“2010 年 10 大香水排行”、“2010 年风行毛衣”、“zippo 有多少品种?”;
  • 查问型:有肯定的购物用意,体现在对属性的要求上。Query 例如:“适宜老人用的手机”、“500 元手表”;
  • 比照型:曾经放大了购物用意,具体到某几个产品。Query 例如:“诺基亚 E71 E63”、“akg k450 px200”;
  • 确定型:曾经做了根本决定,重点考查某个对象。Query 例如:“诺基亚 N97”、“IBM T60”

通过对你的购物用意的剖析,主搜寻会呈现出齐全不同的后果。

之后的数个步骤后,主搜寻零碎便根据上述以及更多简单的条件列出了搜寻后果,这所有是由一千多台搜寻服务器实现的。而后你开始逐个点击浏览搜寻出的宝贝,查看宝贝详情页面。常常网购的亲们会发现,当你买过一个宝贝之后,即使是商家屡次批改了宝贝详情页,你依然可能通过“已买到的宝贝”查看过后的快照。这是为了避免商家对在商品详情中承诺过的货色赖账不认。显然,对于每年数十亿甚至上百亿笔交易的商品详情快照进行保留和疾速调用不是一件简略的事件。这其中又波及数套零碎的独特合作,其中较为重要的是 Tair(淘宝自行研发的分布式 KV 存储计划)。

接下来,无论你是否真的进行了交易,你的这些拜访行为都会如实地被零碎记录下来,用于后续的业务逻辑和数据分析。这些记录中的拜访日志记录便是最重要的记录之一,然而从后面咱们得悉,这些拜访是散布在各个地区多个不同的服务器上的,并且因为用户泛滥,这些日志记录都十分宏大,达到 TB 级别也十分失常。那么,为了疾速、及时、同步地传输这些日志数据,淘宝研发了 TimeTunnel,用于进行实时的数据传输,而后交给后端系统进行计算报表等操作。

你的浏览数据、交易数据以及其余很多数据记录均会被保留下来,使得淘宝存储的历史数据轻而易举地便达到了数十甚至更多个 PB。如此微小的数据量存储在阿里巴巴团体的数据仓库中,并且其中有些数据应用了压缩比高达 1:120 的极限存储技术。之后这些数据会通过一个叫做云梯的基于Hadoop 的由 3000 多台服务器组成的超大规模数据系统,以及一个基于阿里巴巴团体自主研发的 ODPS 零碎的数据系统,一直地进行剖析和开掘。

淘宝从这些数据中可能晓得小到你是谁,你喜爱什么,你的孩子几岁了,你是否在谈恋爱,喜爱玩魔兽世界的人喜爱什么样的饮料等,大到各行各业的批发状况、各类商品的兴衰沦亡等海量的信息。

说了这么多,其实也只是叙述了淘宝上正在运行的成千上万个零碎中的寥寥几个。即使是你仅仅拜访一次淘宝的首页,所波及的技术和零碎规模都是你齐全无奈设想的,是淘宝 2000 多名顶级的工程师们的心血结晶,其中甚至包含长江学者、国家科学技术最高奖得主等泛滥牛人。同样,百度、腾讯等的业务零碎也绝不比淘宝简略。你须要晓得的是,你每天应用的互联网产品看似简略易用,背地却凝聚着难以想象的智慧与劳动。

(本文所波及的技术与数据均来源于互联网)


退出移动版