阿里巴巴笔试的一道综合题

来源:互联网 发布:手机淘宝怎么联系售后 编辑:程序博客网 时间:2024/04/30 17:49

题目描述:

当你在浏览器输入一个网址,比如http://www.taobao.com,按回车之后发生了什么?请从技术的角度描述,如浏览器、网络(UDP,TCP,HTTP等),以及服务器等各种参数与对象上由此引发的一系列活动。请尽可能的涉及到所有的关键技术点。

这道题目还是蛮有意思的,了解这个对于开发Web程序也是有一定的帮助的,另外问题本身太大了,可以回答的东西太多了,这里给出的答案也是处于不断整理过程中。

答案:答题角度有以下几个DNS域名查找,负载均衡,HTTP协议格式,HTTP下一层的TCP协议,服务器应该返回的各种网络的应答。

1、通过访问的域名找出其IP地址。DNS查找过程如下:

  •  浏览器缓存:浏览器会缓存DNS记录,并存放一段时间。
  •  系统缓存:如果浏览器缓存中没有找到需要的记录,浏览器会做一个系统调用。
  •  路由器缓存:接着前面的查询请求发向路由器,它一般会有自己的DNS缓存。
  •  ISP DNS缓存:接下来要check的就是ISP缓存的DNS服务器,在这一般都能找到相应的缓存记录
  •  递归搜索:你的ISP的DNS服务器从根域名服务器开始进行递归搜索,从.com顶级域名服务器到叶节点服务器。
2、上述这种域名解析的方式似乎只能解析出一个ip,我们知道一般的大型网站都有好几个ip地址,这种问题如何解决?还好,有几种方法可以消除这个瓶颈:
  • 轮叫调度(round-robin DNS):是DNS查找时返回多个IP时的解决方案。举例来说,Facebook.com实际上就对应了四个IP地址。
  • 负载均衡:是以一个特定IP地址进行侦听并将网络请求转发到集群服务器上的硬件设备。一些大型的站点一般都会使用这种昂贵的高性能负载均衡
  • 地理DNS:根据用户所处的地理位置,通过把域名映射到多个不同的IP地址提高可扩展性。这样不同的服务器不能够更新同步状态,但映射静态内容的话非常好。
  • Anycast:是一个IP地址映射多个物理主机的路由技术。美中不足,Anycast与TCP协议适应的不是很好,所以很少应用在那些方案中。大多数DNS服务器使用Anycast来获得高效低延迟的DNS查找。

3、浏览器给Web服务器发送一个Http请求

这里可以回答的更详细一点:比如说http协议的格式,http请求的头,比如说发起一个Get类型请求。

4、服务器给浏览器响应一个301永久重定向响应

为什么要有这一步,原因之一是为了便于搜索引擎优化

5、浏览器跟中重定向地址

这个时候浏览器已经知道了正确的URL地址,于是重新发送一个Get请求,请求头中的URL为重定向之后的。

6、服务器处理请求

  • Web服务器软件:web服务器软件(IIS和Apatch)介绍到Http请求,然后确定执行什么请求处理来处理它。请求处理就是一个能够读懂请求并且能生成HTML来进行相应的程序
  • 请求处理:请求处理阅读请求及它的参数和cookies。它会读取也可能更新一些数据,并讲数据存储在服务器上。然后,需求处理会生成一个HTML响应。
7、服务器发回一个HTML响应

8、浏览器开始渲染这个HTML

9、浏览器发送获取嵌入在HTML中的资源对象请求

一些嵌入在html中的资源,比如说图片,js,css等等

10、浏览器发送异步(AJAX)请求

在web2.0时代,在页面渲染成功之后,浏览器依然可以跟服务器进行交互,方法就是通过这个异步请求AJAX

下面这个答案说的尽管跟这道题目关系不大,但是很有意思。所以还是给出来:

你打开了www.taobao.com,这时你的浏览器首先查询DNS服务器,将www.taobao.com转换成ip地址。不过首先你会发现,你在不同的地区或者不同的网络(电信,联通,移动)的情况下,转换后的ip地址很可能是不一样的,这首先涉及到负载均衡的第一步,通过DNS解析域名时将你的访问分配到不同的入口,同时尽可能保证你所访问的入口是所有入口中可能较快的一个。

你通过这个入口成功的访问了www.taobao.com的实际的入口ip地址。这时你产生了一个PV,即Page View,页面访问。每日每个网站的总PV量是形容一个网站规模的重要指标。淘宝网全网在平日(非促销期间)的PV大概是16-25亿之间。同时作为一个独立的用户,你这次访问淘宝网的所有页面,均算作一个UV(Unique Visitor用户访问)。

因为同一时刻访问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来处理这类问题。