第一章 深入web请求
1 web服务器的模式:
现在模式: B/S
好处:
(1) 客户端使用统一的浏览器(Browser)。由于浏览器具有统一性,它不需要特殊的配置和网络连接,有效地屏蔽了不同服务提供上的提供给用户的使用服务的差异性。另外,使用户使用起来非常简便。且用户行为的可继承性非常强。
(2) 服务端(Server)基于统一的HTTP协议、
基于HTTP协议的服务器:Apache、IIS、Nginx、Tomcat、JBoss
2 互联网架构图
3 HTTP请求的实质——就是建立一个Socket连接的过程
比Socket连接多了一个步骤:就是DNS解析
(1) DNS解析。将域名URL 转换成 IP地址。
(2) Socket连接建立: IP地址+端口号
(3) 发送请求数据.。outputStream.write 将请求发送到目标服务器。
(4) 获取服务器返回数据。通过inputStream.read从服务器接收数据。
(5)断开连接。
4 浏览器的缓存机制:
浏览器缓存是一个比较复杂但是又比较重要的机制,ctrl+F5 强制刷新页面,浏览器直接向目标URL发送请求,而不会使用浏览器缓存的数据。
缓存有两层含义:(1) 浏览器端的缓存 (2) 服务器端的缓存
Ctrl+F5强制刷新的时候,会在请求头中增加两个请求项:
Pragma:no-cache
Cache-Control:no-cache
5 DNS域名解析:
用户输入域名之后,按下回车键盘。
(1) 浏览器会检查缓存中有没有这个域名对应的解析过的IP地址。有则结束,无则下一步。
(2) 如果用户的浏览器缓存中没有,浏览器就会查找操作系统缓存中是否有这个域名对应的DNS解析结果。
在Windows中可以通过:C:\Windows\Systems32\drivers\etc\hosts文件来设置。
(3) 向我们在网络配置中的DNS服务器发送请求。(该DNS是本地区的域名服务器,LDNS)
LDNS一般会缓存域名解析结,大约80%的域名解析到这里就已经完成了,所以LDNS主要承担了域名的解析工作。
(4) 如果LDNS仍然没有命中,就直接连接到Root Server域名服务器请求解析。
(5) 根域名服务器返回给本地域名服务器一个所查询域的主域名服务器(gTLD Server)地址。
gTLD 是国际顶级域名服务器,如.com、.cn、.org
(6) 本地域名服务器(Local DNS Server)再向上一步返回的gTLD服务器发送请求。
(7) 接收请求的gTLD服务器查找并返回此域名对应的Name Server 域名服务器的地址。这个Name Server通常是你注册的域名服务器。
(8) LDNS向Name Server发送请求,NameServer域名服务器会查询存储的域名和IP对应关系,将IP地址 & TTL值返回给DNS Server域名服务器。
(9) Name Server服务器向LDNS返回该域对应的IP和TTL值,Local DNS Server 会缓存这个域名和IP的对应关系,缓存的时间有TTL值控制。
(10) 把解析的结果返回给用户,用户根据TTL值缓存在本地缓存中,域名解析过程结束。
跟踪域名解析:
windows和linux下使用:nslookup命令。
Linux下使用:dig命令。
Nslookup:可以查看解析的域名——IP地址。
Ping:只能查看此刻访问的某一台服务器的IP地址。
清楚域名的缓存:
DNS域名解析会缓存解析的结果:(1) 用户本地的机器。(2)Local DNS Server
这两个缓存都是由TTL值和本地缓存大小控制。
本地缓存的清除方式:
Window下:ipconfig /flushdns
Linux: /etc/init.d/nscd restart 来清楚缓存
在Java应用中JVM也会缓存DNS的解析结果,这个缓存是在InetAdress类中完成的。
缓存时间存在:
%java_home%\jre\lib\security\java.security文件:两个配置项:
Networkaddress.cache.tll: -1(永不失效)
Networkaddress.cache.negative.ttl: 10 (缓存10S)
修改方式:
(1) 直接修改文件。
(2) 在Java的启动参数中增加–Dsun.net.inetaddr.ttl=xxx来修改默认值,
(3) 通过InetAddress类来修改。
6 几种域名解析的方式:
几种域名解析的方式:
域名解析记录主要分为A记录、MX记录、CNAME记录、NS记录和TXT记录。
A记录:A代表Adress,用来指定域名对应的IP地址,可以将多个域名指定到一个IP地址,但是不能将一个域名解析到多个IP地址。
MX记录:表示的是Mail Exchange.。就是可以将某个域名的邮件服务器指向自己的mail server。
CNAME: Canonical Name(别名解析),可以为一个域名设置一个或者多个别名。
NS记录:为某个域名指定DNS解析服务器,也就是这个域名由指定的IP地址的DNS服务器去解析。
7 CDN
CDN工作机制:内容分布网络(ContentDelivery Newwork)。
CND都以缓存网站中的静态数据为主,如CSS、JS、图片和静态页面等数据。
用户从主站服务器请求到动态内容后再从CDN上下载这些静态数据,从而加速网页数据内容的下载速度。CDN架构:
存在一个CDN域名解析器,会根据CTM负载均衡的结果,返回给离这个访问用户最近的CDN节点,然后用户去这个节点读取数据。
8 负载均衡
负载均衡有三种架构:
链路负载均衡、集群负载均衡、操作系统负载均衡。
链路负载均衡:CDN的负载均衡方式,就是将DNS解析成不同的IP,然后用户根据这个IP来访问不同的目标服务器。
集群负载均衡:硬件负载均衡 & 软件负载均衡。
LVS: Linux Virtual Server
LVS:使用四层负载均衡,也就是在网络层利用IP地址进行地址转发。
HAProxy进行七层负载均衡,也就是可以根据访问用户的HTTP请求头来进行负载均衡,如可以根据不同的URL来将请来转发到特性机器或者根据用户的Cookie信息来指定访问的机器。
操作系统负载均衡:就是利用操作系统级别的软中断或者硬件负载中断来达到负载均衡,如可以设置多队列网卡等来实现。