第一章 深入Web请求过程
目录
B/S架构带来了以下两方面的好处:
- 客户端使用统一的浏览器(Browser)。由于浏览器具有统一性,它不需要特殊的配置和网络连接,有效地屏蔽了不同服务提供商提供给用户使用服务的差异性。浏览器的交互特性使得用户使用它非常简便,且用户行为的可继承性非常强,也就是用户只要学会了上网,不管使用的是哪个应用,一旦学会了,在使用其他互联网服务时同样具有了使用经验,因为它们都基于同样的浏览器操作界面。
- 服务端(Server)基于统一的HTTP。和传统的C/S架构使用自定义的应用层协议不同,B/S架构使用的都是统一的HTTP。使用统一的HTTP也为服务提供商简化了开发模式,使得服务器开发者可以采用相对规范的开发模式,这样可以大大节省开发成本。由于使用统一的HTTP,所以基于HTTP的服务器就有很多。
1.B/S网络架构概述

不管网络架构如何变化,始终有一些固定不变的原则需要遵守。
- 互联网上所有资源都要用一个URL来表示。URL就是统一资源定位符。
- 必须基于HTTP与服务端交互。
- 数据展示必须在浏览器中进行。
2.如何发起一个请求
能否不借助浏览器也能发起请求,这里的“不借助”有两层含义,一是指能不能自己组装一个符合HTTP的数据包,二是处理浏览器还有哪些方式也能简单的发起一个HTTP请求。
如何发起一个HTTP请求和如何建立一个Socket连接区别不大,只不过outputStream.write写的二进制字节数据格式要符合HTTP。浏览器在建立Socket连接之前,必须根据地址栏里输入的URL的域名DNS解析出IP地址,再根据这个IP地址和默认的80端口与远程服务器建立Socket连接,然后浏览器根据这个URL组装成一个get类型的HTTP请求头,通过outputStream.write发送到目标服务器,服务器等待inputStream.read返回数据,最后断开这个连接。一句话,发起一个HTTP请求的过程就是一个建立Socket通信的过程。
3.HTTP解析



3.1浏览器缓存机制
1.Cache-Control/Pragma
这个HTTP head字段用于指定所有缓存机制在整个请求/响应链中必须服从的指令,如果知道该页面是否为缓存,不仅可以控制浏览器,还可以控制和HTTP相关的缓存或代理服务器。

2.Expires

3.Last-Modified/Etag


4.DNS域名解析

DNS解析将会有10个步骤,这个过程大体描述如下。





4.1清楚缓存的域名
我们知道DNS域名解析后会缓存解析结果,其中主要在两个地方缓存结果。一个是Local DNS Server,另外一个是用户的本地机器。这两个缓存都是TTL值和本机缓存大小控制的,但是最大缓存时间是TTL值,基本上Local DNS Server的缓存时间就是TTL控制的,很难人工介入,但是我们的本机缓存可以通过如下方式清除。


4.2几种域名解析方式
域名解析记录主要分为A记录、MX记录、CNAME记录、NS记录和TXT记录。
- A记录,A代表的是Address,用来指定域名对应的IP地址。A记录可以将多个域名解析到一个IP地址,但是不能将一个域名解析到多个IP地址。
- MX记录,表示的是Mail Exchange,就是可以将某个域名下的邮件服务器指向自己的Mail Server,如taobao.com域名的A记录IP地址是115.238.25.xxx,如果将MX记录设置为115.238.25.xxx所在的服务器,即xxx@taobao.com的邮件路由,DNS会将邮件发送到115.238.25.xxx所在的服务器,而正常通过Web请求的话仍然解析到A记录的IP地址。
- CNAME记录,全称是Canonical Name(别名解析)。所谓的别名解析就是可以为一个域名设置一个或者多个别名。如将taobao.com解析到xulingbo.net,将srcfan.com也解析到xulingbo.net。其中xulingbo.net分别是taobao.com和srcfan.com的别名。前面的跟踪域名解析中的“www.taobao.com. 1542 IN CNAME www.gslb.taobao.com”就是CNAME解析。
- NS记录,为某个域指定DNS解析服务器,也就是这个域名有指定的IP地址的DNS服务器去解析,前面的“gslb.taobao.com. 86400 IN NS gslbns2.taobao.com.”就是NS解析。
- TXT记录,为某个主机名或域名设置说明,如可以为xulingbo.net设置TXT记录为“君山的博客|许令波”这样的说明。
5.CDN工作机制
CDN也就是内容分布网络(Content Delivery Network),它是构筑在现有Internet上的一种先进的流量分配网络。其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络“边缘”,使用户可以就近取得所需的内容,提高用户访问网站的响应速度。有别于镜像,它比镜像更智能,可以做这样一个比喻:CDN=镜像(Mirror)+缓存(Cache)+整体负载均衡(GSLB)。因而,CDN可以明显提高Internet中信息流动的效率。
目前CDN都以缓存网站中的静态数据为主,如CSS、JS、图片和静态页面等数据。用户在从主站服务器请求到动态内容后,在从CDN上下载这些静态数据,从而加速网页数据内容的下载速度。
通常来说CDN要达到以下几个目标。
- 可扩展(Scalability)。性能可扩展性:应对新增的大量数据、用户和事务的扩展能力。成本可扩展性:用低廉的运营成本提供动态的服务能力和高质量的内容分发。
- 安全性(Security)。强调提供物理设备、网络、软件、数据和服务过程的安全性,(趋势)减少因为DDos攻击或其他恶意行为造成商业网站的业务中断。
- 可靠性、响应和执行(Reliability、Responsiveness和Performance)。服务可用性指能够处理可能的故障和用户体验下降的问题,通过负载均衡及时提供网络的容错机制。
5.1CDN架构

5.2负载均衡
负载均衡(Load Balance)就是对工作任务进行平衡、分摊到多个操作单元上执行,如图片服务器、应用服务器等,共同完成工作任务。它可以提高服务器响应速度及利用效率,避免软件或者硬件模块出现单点失效,解决网络拥塞问题,实现地理位置无关性,为用户提供较一致的访问质量。
通常有三种负载均衡架构,分别是链路负载均衡、集群负载均衡和操作系统负载均衡。所谓的链路负载均衡就是通过DNS解析成不同的IP,然后用户根据这个IP来访问不同的目标服务器。

负载均衡是由DNS的解析来完成的,用户最终访问哪个Web Server是由DNS Server来控制的,在这里就是由Global DNS Server来动态解析域名服务器。这种DNS解析的优点是用户会直接访问目标服务器,而不需要经过其他代理服务器,通常访问速度会更快。但是也有缺点,由于DNS在用户本地和Local DNS Server都有缓存,一旦某台Web Server挂掉,就很难及时更新用户的域名解析结构。如果用户的域名没有及时更新,那么用户将无法访问这个域名,带来的后果非常严重。
集群负载均衡是另外一种常见的负载均衡方式,它一般分为硬件负载均衡和软件负载均衡。硬件负载均衡一般使用一台专门的硬件设备来转发请求。

它的优点很显然就是性能非常好,缺点就是非常贵,一般公司是用不起的,还有就是当访问量陡然增大超出服务极限时,不能进行动态扩容。

软件负载均衡是使用最普遍的一种负载方式,它的特点是使用成本非常低,直接使用廉价的PC就可以搭建。缺点就是一般一次访问请求要经过多次代理服务器,会增加网络延时。
图1-19中上面两台是LVS,使用4层负载均衡,也就是在网络层利用IP地址进行地址转发。下面的三台使用HAProxy进行七层负载,也就是可以根据访问用户的HTTP请求头来进行负载均衡,如可以根据不同的URL来将请求转发到特定机器或者根据用户的Cookie信息来指定访问的机器。
最后一种是操作系统负载均衡,就是利用操作系统级别的软中断或者硬件中断来达到负载均衡,如可以设置多队列网卡等来实现。
这几种负载均衡不仅在CDN的集群中能使用,而且在Web服务或者分布式数据集群中同样也能使用,但是在这些地方后两种使用得要多一点。
5.3CDN动态加速
CDN的动态加速技术也是当前比较流行的一种优化技术,它的技术原理就是在CDN的DNS解析中通过动态的链路探测来寻找回源最好的一条路径,然后通过DNS的调度将所有请求调度到选定的这条路径上回源,从而加速用户访问的效率。

本文详细解析了Web请求的全过程,包括B/S架构的优势、如何发起HTTP请求、HTTP解析、DNS域名解析、CDN工作机制等内容,帮助读者全面理解Web请求的每一个环节。
2628

被折叠的 条评论
为什么被折叠?



