目录
深入Web请求过程
1. headers
2. DNS
2.1 gTLD分布
2.2 DNS解析过程
2.3 清除DNS缓存
2.4 DNS和JVM
2.5 几种域名解析方式
2.6 CDN工作机制
2.7 负载均衡
2.8 CDN动态加速
和java的httpclient相同的命令行操作是curl -I 查看请求头信息 -H 添加请求头信息
美国10 欧洲2 日本1
1.检查浏览器是否存在域名解析过的ip
2.检查计算机是否存在域名解析过的ip 在计算机中的hosts文件进行配置
3.向localDNSServer中的服务请求解析
4.3执行失败 需要向root DNS中请求解析
5.返回gTLD域名解析服务器地址(顶级域名服务器)
6.localDNSServer向5中的服务器地址发送请求
7.gTLD服务器查找并返回对应NameServer
8.NameServer查询对应域名和ip的映射关系,正常情况下根据域名获取目标ip记录,连同TTL值返回给localDNSServer服务器
9.NameServer将域名对应ip和TTL返回给localDNSServer,localDNSServer会把信息进行缓存。
10.把缓存结果返回给用户,用户进行缓存
eg:根域名(.) gTLDServer(.com) NameServer (taobao.com) 实际情况NameServer可能不止一个,localDNSServer也可能存在备份来进行缓存
windows:ipconfig/flushdns
linux:/etc/init.d/nscd restart
JVM也会缓存DNS的解析结果,缓存在InetAddress类中完成。
缓存的设置在jre/lib/security/java.security文件中进行配置
如图,缓存策略存在两种,正确解析配置诶-1,永远生效,失败解析配置为10s失效时间。
修改缓存时间配置的四种方式:(用于服务器优化)
1.修改文件中的值
2.启动java时配置参数
在JVM启动的时候增加启动参数来设置。
A. 正确解析:-Dsun.net.inetaddr.ttl=xx
B. 错误解析:-Dsun.net.inetaddr.negative.ttl=xx
3.通过system的setProperty方法来修改
通过java.lang.System类在JVM启动后修改。
System.setProperty("sun.net.inetaddr.ttl", "-1");
System.setProperty("sun.net.inetaddr.negative.ttl", "10");
4.通过InetAddress类来实现修改,这里需要强调一下性能问题。
如果每次都是创建实例,那么每次都是完整的DNS域名解析流程,太消耗时间。所以必须创建DNS的单例。(单例模式的实际使用)
CDN是内容分布网络,通过镜像机制提高Internet中的信息流动速率。CDN的实现可以生动地表示为:CDN = 镜像+ 缓存+整体负载均衡。当然CDN主要用于静态数据。
负载均衡架构分为三种。
链路负载均衡:访问Global DNS Server,Global DNS Server来决定访问哪个webServer,由于DNS在本地和local DNS Server都又缓存,所以这样如果没及时更新DNS信息,后果就是访问不到指定webServer。
集群负载均衡:
①硬件负载均衡 专门的硬件设备来完成转发i那个球,缺点一是比较昂贵,缺点二是在出现访问量陡增无法动态扩容。
②软件负载均衡 优点是廉价,缺点是一次请求多次代理,延时严重。
操作系统负载均衡:
通过操作系统级别的软中断或者硬件中断来达到负载均衡的效果
技术原理:在DNS解析中通过动态的链路探测来寻找回源最好的一条路径,然后通过DNS的调度将所有请求调度到选定的这条路径上进行回源,从而加速用户访问的效率。