浏览器缓存:
按浏览器页面刷新一定是重新发送请求。因为按f5刷新时,浏览器直接向目标url发送请求。
但是假如我们在应用服务器的前端部署了一个缓存服务器,那么也有可能拿到的还是缓存信息。
所以,请求头需要增加两个请求项Pragma:no-cache和Cache-Control:no-cache,这两个参数在整个请求响应链中起作用,
当然会对缓存服务器或代理服务器起作用,no-cache表示所有内容都不会被缓存,在请求头和响应头中设置。
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
----------------------------------------------------------------------------------------------
DNS域名解析:
(1)域名解析意思是根据域名解析成正确的ip。用户第一次访问某个域名时,域名解析服务器返回解析的ip到客户浏览器,
浏览器会缓存这个域名和ip的对应关系,但是缓存有限制,比如浏览器缓存的大小和时间,缓存时间太短或太长都不好,
太短的话,可能会导致每次都需要解析,太长的话,假如ip变更,客户将访问不到变更之后正确的ip。
而这个时间限制缓存参数可以通过TTL属性来设置。
(2)假如浏览器缓存中不存在域名ip对应关系,那么浏览器会查看用户操作系统中是否存在解析缓存,Windows系统中,
Windows/system32/drivers/etc/hosts中记录的就是域名和ip的对应关系,打开文档后就能看到是如何设置的,
早期的黑客常通过修改此文件来劫持域名,使用户访问正常域名却连接到了黑客指定的ip上。而在win7中此文件被设计成了只读,
在linux下的这个配置文件是/etc/named.conf。
(3)以上两种方法仍然没有解决域名解析的话,就需要真正请求域名服务器来解析了。window中(网上邻居-->internet协议)可以看到
下方一个配置DNS的地方,这个dns配置的是Local DNS Server,比如你在学校上网,那么这个ldns就在学校里,假如在小区里,那么
这个服务器就联通或电信的SPA,服务器也在城市的某个角落里,不会很远。这个LDNS服务器性能已经很好了,他们当然也会缓存解析结果,
缓存时间通常受域名的失效时间来控制,通常情况下,80%的域名解析都能在这里完成。LDNS承担了主要的解析任务。
(4)如果LDNS仍然无法解析,那么就得需要Root DNS Server了,根域名服务器不会立刻返回解析结果,它返回给LDNS的是一个
gTLD主域名服务器地址,gTLD是国际顶级域名服务器,比如.com,.cn,.org等,全球只有13台。
(5)LDNS继续向gTLD服务器发送请求,现在,gTLD仍然不会返回结果,它会返回给LDNS一个name server域名服务器地址,
这个地址就是网站注册域名的服务器地址,假如网站是在某个域名服务提供商那里申请的域名,那么这个域名解析任务就在
这个域名提供商的服务器上来完成,域名解析就在这个服务器上进行,这个服务器会查询域名和ip的映射关系表,
然后把ip和TTL值返回给LDNS,LDNS服务器再缓存起来。然后LDNS把ip和TTL值返回给用户,用户系统也会相应地缓存。
基本流程是如此,实际上要更复杂。
在linux和window上可以通过nslookup命令来查看域名的解析结果。
而linux上还可以通过 dig 域名 的命令来查看dns的解析过程。
清空dns缓存:
dns缓存在本地和LDNS上,其主要受TTL和系统缓存大小来控制,LDNS上的缓存很难人工控制,我们可以更改本地dns缓存,比如清空缓存,windows清空dns缓存命令:
ipconfig/flushdns ,linux命令:/etc/init.d/nscd restart 。也可以重启主机。
在java应用中,jvm也会缓存DNS的解析结果,java解析域名通过InetAddress类来完成,使用时注意用单例模式,否则会有严重性能问题,如果每次都创建InetAdress实例,
每次都要进行完整的域名解析,会非常耗时。
----------------------------------------------------------------
CDN工作机制
CDN是为了提高对用户的响应时间,目前通常把静态资源如图片、js、css、静态页面放在cdn上,用户访问,从主服务器上获得动态内容后再从cdn上下载静态资源,
淘宝90%的资源要从CDN上获取。假如某个静态页面url是:cdn.taobao.com,那么在域名解析的第5步,淘宝公司的域名解析会把这个域名指向CDN全局中的
负载均衡系统GTM,GTM会根据用户在哪里来返回离这个用户最近的CDN节点,用户拿到这个CDN节点之后,再去这个CDN节点获取这个静态文件,如果文件不存在,就会
再去主机找资源。
负载均衡
负载均衡就是通过分配之后让多个服务器来完成同一个任务,比如DNS的解析过程。这样提高效率,避免网络阻塞。为用户提供一致的访问质量。
通常分为三种架构:链路负载均衡,集群负载均衡,操作系统负载均衡,DNS的解析就是链路负载均衡。