深入分析Java Web技术内幕读书笔记
chapter1. 深入Web请求过程
B/S两方面好处:
客户端使用统一的浏览器(Browser)。浏览器统一性,屏蔽了不同服务器提供商提供服务的差异性。并且,浏览器交互特性使浏览器使用方便,且用户行为的可继承性非常强。
服务端(Server)基于统一的HTTP协议。简化服务提供商开发模式,规范服务器开发者上午开发模式。
1.1 B/S网络架构概述
B/S架构前后端都得以简化,都基于统一的应用层协议HTTP来交互数据,HTTP采用无状态的短连接方式,一次请求就能完成数据交互,如今更多的数据传输采用了更安全的HTTPS协议。
浏览器中输入一个URL后的流程:DNS服务器将域名映射到相应的IP地址,根据IP地址找到互联网上相应的服务器,客户端向服务端发起请求,服务器返回给客户端请求的数据资源。服务端可能还有一些其他的业务逻辑,如多台服务器间的负载均衡,或者是返回给客户端资源的存储方式等等。
上图为CDN架构图。
网络架构基本原则:
(1)互联网上所有资源用一个URL(统一资源定位符)表示。
(2)必须基于HTTP协议与服务端交互。(HTTPS现在更为广泛一些)
(3)数据展示必须在浏览器中进行。(必须浏览器?)
1.2 如何发起一个请求
建立HTTP连接的过程基本上就是建立一个socket连接的过程,不过是数据报中的数据格式要符合HTTP协议要求。建立socket连接前,需由DNS服务器解析出相应的IP地址,再根据IP地址和默认的端口号(80)与服务器建立socket连接,然后浏览器组装一个HTTP请求头,通过outputStream.write发送到目标服务器,服务器等待inputStream.read返回数据,最后断开连接。
1.3 HTTP协议解析
B/S网络架构中核心是HTTP协议。
HTTP协议中最重要的是HTTP Header。HTTP Header控制着用户浏览器渲染行为和服务器的执行逻辑。
1.3.2浏览器缓存机制
Ctrl+F5刷新页面一定能够请求没有浏览器缓存的页面,但可能在服务端返回缓存的数据,所以为了保证获取最新的数据,必须通过HTTP来控制。
使用Ctrl+F5发起请求时,会在HTTP请求头中增加一些请求头,以告诉服务端要获取的最新的数据而不是缓存。Pragma和Cache-Control用于指定所有缓存机制在整个请求/响应链中必须服从的指令。
- 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会将xxx@mail.com请求发送在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的调度将所有请求调度到选定的路径上回溯。