注册 登录
  • 欢迎访问"运维那点事",推荐使用Google浏览器访问,可以扫码关注本站的"微信公众号"。
  • 如果您觉得本站对你有帮助,那么可以扫码捐助以帮助本站更好地发展。

当你在淘宝买件东西,背后发生了什么?

闲聊 彭东稳 7144次浏览 已收录 0个评论

原文是“在淘宝上买件东西,背后发生了什么?”,一个叫孙放的人写的。下面这一篇是我以他那篇文章为基础重新修改又重新加入了一些技术点,但很多简单的技术点感觉没必要写,反正值得一读的文章。如果你觉得还可以改的更好欢迎复制加工。

入口

今天是3.6号,又是一个剁手的节日“女王节”,尽管我对此是抱着“呵呵”一笑的态度,但它确实又是一个营销的号噱头。当然这不是我们应该关注的重点。下面就来简单讨论一下当你在淘宝买一件物品的大概流程以及背后发生的故事。首先,不管你做什么事情,得找到一个入口。就像你想去淘宝买一件物品一样,首先你得找到淘宝这个网站,一般有两种访问方式。

第一种(普遍型):就是通过搜索引擎搜索淘宝网站,国内常用的搜索引擎就是百度了,世界型搜索引擎Google已经被国家屏蔽了(只能翻墙去国外访问)。就拿百度来说吧,大概都是这么使用的。

当你在淘宝买件东西,背后发生了什么?
第二种(专业型):在浏览器地址输入栏中输入淘宝的网址,如下图。

当你在淘宝买件东西,背后发生了什么?

上面两种一个是点击进入淘宝网站,一个是回车进入淘宝网站,但不管使用哪一种都可以进入到淘宝页面,这个也就是我所谓的入口。当你在点击或者回车的那一瞬间发生了什么呢?你的主机就会通过本地DNS找到服务器端进行域名解析了,也就是把www.taobao.com转换为一个IP地址返回给你。对于淘宝来说,首先你会发现,你在不同的地区或者不同的网络(电信、联通、移动)的情况下,转换后的IP地址很可能不一样的,这首先涉及到负载均衡的第一步,通过DNS解析域名时将你的访问分配到不同的入口,同时尽可能保证你所访问的入口是所有入口中可能较快的一个(这和后文的CDN不一样)。

安全保障

然后你通过这个入口成功的访问了www.taobao.com的实际的入口IP地址。这个时候你会发送一个HTTP数据包,通过TCP/IP网络协议传送到淘宝此IP的服务器上,淘宝目前使用的Web服务器就是在Nginx上做的二次研发并更名为Tengine。Tengine解析HTTP数据包发现你访问的是80端口而不是443端口,然后服务器会做跳转处理转到443端口。淘宝好像从14年开始全站加密访问,为了保证用户数据传输的安全性。此时你的浏览器地址栏也会发生变化,如下图,表示安全访问。

当你在淘宝买件东西,背后发生了什么?
然后通过HTTPS重新去访问淘宝网站,这时对于淘宝主页来说你产生了一个PV,即Page View,页面访问。每日每个网站的总PV量是形容一个网站规模的重要指标。淘宝网全网在平日(非促销期间)的PV大概是16-25亿之间。同时作为一个独立的用户,你这次访问淘宝网的所有页面,均算作一个UV(Unique Visitor用户访问)。最近臭名昭著的12306.cn的日PV量最高峰在10亿左右,而UV量却远小于淘宝网十余倍,这其中的原因我相信大家都会知道。说实话,我挺同情12306的,总是被各种黑。为了防止刷票他们也是费尽心思啊,当然不可否认的是12306在业务逻辑处理方面的是非常非常复杂的。

负载均衡

因为同一时刻访问www.taobao.com的人数过于巨大,所以即便是生成淘宝首页页面的服务器,也不可能仅有一台。仅用于生成www.taobao.com首页的服务器就可能有成百上千台,那么你的一次访问时生成页面给你看的任务便会被分配给其中一台服务器完成。这个过程要保证公正、公平、平均(暨这成百上千台服务器每台负担的用户数要差不多),这一很复杂的过程是由几个系统配合完成,其中最关键的便是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,用中文则为:“我是一个学生”。计算机可以很简单通过空格知道student是一个单词,但是不能很容易明白“学”、“生”两个字合起来才表示一个词。把中文的汉字序列切分成有意义的词,就是中文分词,有些人也称为切词。我是一个学生,分词的结果是:我是 一个 学生。

当你在淘宝买件东西,背后发生了什么?

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

1)浏览型:没有明确的购物对象和意图,边看边买,用户比较随意和感性。Query例如:”2010年10大香水排行”,”2010年流行毛衣”,“zippo有多少种类?”。

2)查询型:有一定的购物意图,体现在对属性的要求上。Query例如:”适合老人用的手机”,”500元手表”。

3)对比型:已经缩小了购物意图,具体到了某几个产品。Query例如:”iphone6s″,”iphone6 plus″。

4)确定型:已经做了基本决定,重点考察某个对象。Query例如:”iphone6s″,”mac″。

淘宝的这套搜索引擎会通过对你的购物意图的分析,主搜索会呈现出完全不同的结果来。更好地增加用户体验。

快照保护

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

数据分析

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

你的浏览数据、交易数据以及其它很多很多的数据记录均会被保留下来。使得淘宝存储的历史数据轻而易举的便达到了十数甚至更多个 PB(1PB=1024TB=1048576GB)。如此巨大的数据量经过淘宝系统1:120的极限压缩存储在淘宝的数据仓库中。并且通过一个叫做云梯的,由2000多台服务器组成的超大规模数据系统不断的进行分析和挖掘。从这些数据中淘宝能够知道小到你是谁,你喜欢什么,你的孩子几岁了,你是否在谈恋爱,喜欢玩魔兽世界的人喜欢什么样的饮料等,大到各行各业的零售情况、各类商品的兴衰消亡等等海量的信息。这个就是当下最热门的“大数据处理”和“深度挖掘”技术。

当你选中一件物品并加入到购物车之后,就会呈现如下页面。

当你在淘宝买件东西,背后发生了什么?

我看了一下,大概目前有这些栏目。掌柜热卖、最近收藏的、最近浏览过的以及猜你喜欢的。可以说这每一个栏目后面都有一个强大的系统在处理。

事务处理

最后就是对购物车的物品进行付款了,在这个最后阶段就涉及到了金钱方面的。大概流程就是你使用支付宝进行付款,然后淘宝收款,当淘宝确认收到商品价钱之后就会立即确认你的此商品已付款并加入到待处理系统中。在这一步骤可以说是非常麻烦的,因为不能出错,比如收了你的钱之后却没有显示你的商品已付款,或是你付款时由于账户余额不足导致付款失败也不能把你的物品显示为付款成功,等等这一系列的事情就需要数据库事务做支撑了。淘宝的DRDS(前身TDDL)分布式数据库事务处理系统,可以说是经过淘宝这些年的技术积累以及使用,以及非常可靠了。上面的步骤都没有问题之后,最后就是进行转交物流中心系统处理了。而你就等着快递员把你的物品送到你的手上。

总结

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


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (1)or分享 (0)
关于作者:

您必须 登录 才能发表评论!