第一章 深入Web请求过程
B/S两方面好处:
- 客户端使用统一的浏览器(Browser)。浏览器统一性,屏蔽了不同服务器提供商提供服务的差异性。并且,浏览器交互特性使浏览器使用方便,且用户行为的可继承性非常强。
- 服务端(Server)基于统一的HTTP协议。简化服务提供商开发模式,规范服务器开发者上午开发模式。
1.1 B/S网站架构概述
HTTP协议采用无状态的短连接的通信方式。通常一次请求就完成一次数据交互,通常也对应一个业务逻辑。
URL请求DNS把域名解析成为IP地址,根据IP地址找到对应的服务器,向服务器发送请求,服务器返回数据资源给访问的用户。负载均衡给服务器分配请求,请求数据存储在分布式缓存、静态文件、数据库里。静态资源会发起额外的HTTP请求,CDN服务器处理这个请求。
互联网应用原则:
- 互联网上所有资源用一个URL(统一资源定位符)表示。
- 必须基于HTTP协议与服务端交互。
- 数据展示必须在浏览器中进行。
1.2 如何发起一个请求
浏览器建立Socket连接之前,必须根据地址栏里的URL的域名DNS解析出IP,根据IP地址和默认80端口与远程服务器建立Socket连接,浏览器根据URL组装一个GET类型的HTTP请求头,通过outputStream.write发送到目标服务器,服务器等待inputStream.read返回数据,最后断开连接。
1.3 HTTP协议解析
B/S网络架构中核心是HTTP协议。
HTTP协议中最重要的是HTTP Header。HTTP Header控制着用户浏览器渲染行为和服务器的执行逻辑。
1.3.2浏览器缓存机制
Ctrl+F5刷新页面一定能够请求没有缓存的页面。
Ctrl+F5刷新页面,浏览器直接向目标URL发送请求,不使用浏览器缓存。
Ctrl+F5刷新页面,HTTP请求头增加一些请求头,Pragma:no-cache
,Cache-Control:no-cache
。
Pragma
和Cache-Control
用于指定所有缓存机制在整个请求/响应链中必须服从的指令。
Expires:Sar,25 Feb 2012 12:22:17 GMT
浏览器请求前检查这个字段,是否过期,过期重新向服务器发起请求。Last-Modified/Etag
。Last-Modified
表示一个服务器上的资源的最后修改时间。浏览器请求头增加一个If-Modified—Since:Sar,25 Feb 2012 12:22:17 GMT
,询问是否最新,是最新的返回304,也不会传新数据。Etag
类似,让服务器给每个页面分配唯一的编号,通过编号区分是否最新,比Last-Modified
灵活,但多台后端服务器不好处理。
1.4 DNS域名解析
- 浏览器检查缓存是否有域名对应的IP。
- 浏览器查找操作系统是否有对应的DNS解析成果。
- 操作系统把域名发给LDNS,本地区的域名服务器。
- LDNS没有,直接到Root Server域名服务器请求解析。LDNS承担了主要的域名解析工作。
- 根域名服务器返回给本地域名服务器一个所查询域的主域名服务器gTLD Server地址。gTLD国际顶级域名服务器,只有13台左右。
- 本地域名服务器(Local DNS Server)向gTLD Server发送请求。
- 接受请求的gTLD Server查找返回此对应域名的Name Server域名服务器地址。你注册的域名服务器,某台服务商申请域名,域名解析交给域名服务器。
- Name Server域名服务器地址查询域名和IP映射关系表,连同TTL值返回给DNS Server域名服务器。
- 返回该域名对应的IP和TTL值,Local DNS Server缓存这个域名和IP对应关系,缓存时间TTL值控制。
- 解析结果给用户,用户根据TTL值缓存到本地系统中,域名解析结束。
1.4.4 几种域名解析方式
A记录、MX记录、CNAME记录、NS记录和TXT记录。
- A记录,Address,用来指定域名对应的IP地址。A记录可以将多个域名解析到一个IP地址,不能将一个域名解析到多个IP地址。
- MX记录,Mail Exchange,将某个域名下邮件服务器指向自己的Mail Server。DNS会将[email protected]请求发送在mail服务器地址,正常WEB请求仍然解析至A记录的IP地址。
- CNAME记录,Canonical Name(别名解析)。为一个域名设置一个或者多个别名。
- NS记录,为某个域名指定DNS解析服务器,这个域名有指定的IP地址的DNS服务器去解析。
- TXT记录,为某个主机名或域名设置说明。
1.5 CDN工作机制
内容分布网络(Content Delivery Network)。CDN=镜像mirror+缓存cache+整体负载均衡GSLB。
CDN一缓存网站中的静态数据为主。加速网页数据内容的下载速度。
目标
- 可扩展(Scalability)。性能可扩展。成本可扩展。
- 安全性(Security)。
- 可靠性、响应和执行(Reliability、Responsiveness和Performance)。
访问静态文件,先向Local DNS服务器发起请求,经过迭代到达域名注册服务器解析,公司DNS把请求重新CNAME解析到另外的一个域名,这个域名指向CDN的DNS负载均衡服务器,由这个GTM分配用户距离最近的CDN节点。如果这个CDN节点请求不存在,会再回原站获取文件,返回给用户。
1.5.2 负载均衡
Load Balance对工作任务进行平衡、分摊到多个操作单元上执行。
链路负载均衡、集群负载均衡、操作系统负载均衡。
- 链路负载均衡,DNS解析成不同的IP。
- 集群负载均衡。
- 硬件负载均衡
- 软件负载均衡
- 操作系统负载均衡:操作系统级别的软中断和硬件中断。
1.5.3 CDN动态加速
在CDN的DNS解析中通过动态的链路探测来寻找回溯最好的一条路径,通过DNS的调度将所有请求调度到选定的路径上回溯。