1、TIPS
(1)HTTP协议采用无状态、短连接的通信方式;通常一次请求就完成了一次数据交互。
请求的数据可能在分布式缓存、文件或数据库中;
当数据返回浏览器时,浏览器解析数据发现还有一些静态资源(css、js或图片等)时会发起另外的HTTP请求,这些请求可能会在CDN上;
发起一个HTTP连接本质上就是建立一个Socket连接。
二进制字节数据
在linux中,curl+URL可以简单发起一个HTTP请求,加上-I选项,可以查看这次访问的HTTP协议头的信息。
要理解HTTP协议,最重要的就是要熟悉HTTP协议中的HTTP Header(请求头和响应头),HTTP Header控制着用户的数据的传输、浏览器的渲染行为和服务器的执行逻辑。
浏览器缓存机制:
按ctrl+F5组合键刷新页面,浏览器会直接向目标URL发送请求,而不会使用浏览器缓存的数据(本质是在请求头中多了两个请求项Pragma:no-cache和Cache-Control:no-cache)。即使请求发送到服务端,也有可能访问到的是缓存的数据,如在服务器的前端部署一个缓存服务器,如Varnish代理。为了保证用户能看到最新的数据,必须通过HTTP协议来控制。
Cache-Control/Pragma:这个HTTP Head字段用于指定所有缓存机制在整个请求/响应链中必须服从的命令。不仅可以控制浏览器,还可以控制和HTTP协议相关的缓存或代理服务器。
Expires:后面跟着一个日期和时间,超过这个时间值后,缓存的内容将失效。即浏览器在发出请求之前检查这个页面的这个字段,看该页面是否已经过期了,过期了就重新向服务器发起请求。
Last-Modified/Etag:
Last-Modified表示一个服务器上的资源的最后修改时间,通过这个最后修改时间可以判断当前请求的资源是否是最新的。一般服务端在响应头中返回一个Last-Modified字段,告诉浏览器这个页面的最后修改时间,浏览器再次请求时在请求头中增加一个If-Modified-Since字段,询问当前缓存的页面是否是最新的,若是最新的就返回304,服务器不传输新的数据。
Etag作用是让服务端给每个页面分配一个唯一的编号,然后通过这个编号来区分当前这个页面是否是最新的。
浏览器缓存大小、缓存时间都有限制。
域名被缓存的时间限制可以通过TTL属性来设置。
浏览器会查找操作系统缓存中是否有这个域名对应的IP地址。操作系统也有一个域名解析的过程,在Windows中可以通过c:/windows/system32/drivers/etc/hosts文件来设置,若在这里指定了一个域名对应的IP地址,浏览器会首先使用这个IP地址。在linux中,这个配置文件是/etc/named.conf。
Name Server指你注册的域名服务器,如你在某个域名服务提供商申请的域名,那这个域名解析任务就由这个域名提供商的服务器来完成。
在linux和windows下都可以用nslookup命令来查询域名的解析结果。在linux中,还可以用dig命令查询DNS的解析过程。
DNS域名解析后会缓存解析结果,一个是Local DNS Server,另外一个是用户的本地机器。这两个缓存都是TTL值和本机缓存大小控制的,最大缓存时间是TTL值。
在windows下,ipconfig/flushdns来刷新缓存,在linux下,通过/etc/init.d/nscd restart来清除缓存。
在java应用中,JVM也会缓存DNS的解析结果,这个缓存在InetAddress类中完成。若要用InetAddress类解析域名时,一定要是单例的,不然会有严重性能问题。
CDN工作机制:
目的是通过现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络,使用户可以就近取得所需的内容,提高用户访问网站的响应速度。
CDN=镜像+缓存+整体负载均衡;
目前CDN都以缓存网站中的静态数据为主。
一个用户访问某个静态文件,这个静态文件的域名假如是cdn.taobao.com,首先向local DNS服务器发起请求,最后回到这个域名的注册服务器去解析,此时DNS解析服务器会把它重新CNAME解析到另外一个域名,这个域名最终会指向CDN全局中的DNS负载均衡服务器,再由这个GTM来最终分配是哪个地方的访问用户,返回给离这个访问用户最近的CDN节点。然后用户就直接去这个CDN节点访问这个静态文件了。若这个静态文件不存在,就会回到源站去获取这个文件,然后再返回给用户。
负载均衡:
通常有三种负载均衡架构,分别是链路负载均衡、集群负载均衡和操作系统负载均衡。
链路负载均衡:指通过DNS解析成不同的IP,然后用户根据这个IP来访问不同的目标服务器。
集群负载均衡:分为硬件负载均衡和软件负载均衡。硬件负载均衡一般使用一台专门硬件设备来转发请求。缺点是当访问量增大超出服务极限时,不能进行动态扩容。
软件负载均衡特点是使用成本低,PC就可以搭建。缺点是一次访问请求要经过多次代理服务器,会增加网络延时。
上门两台是LVS,在网络层利用IP地址进行地址转发。下面使用HAProxy,根据访问用户的HTTP请求头来进行负载均衡,如可以根据不同的URL来将请求转发到特定机器或者根据用户的cookie信息来指定访问的机器。
操作系统负载均衡:利用操作系统级别的软中断或硬件中断来达到负载均衡,如可以设置多队列网卡等来实现。
(2)
2、PS
(1)
(2)