标签:http 从服务器 避免 查询 端口号 设备 轻松 利用 mem
摘录自操作系统,这一段的内容很有启发,稍微加上自己的理解,写一篇博客记录一下。
缓存成功解决了速度不匹配设备之间的数据传输,并且在一般情况下,是整个系统的瓶颈;缓存的出现,有效减少了低速IO设备的访问频率,从而大幅度提升了速度。比如在处理高并发的场景,常规的mysql根本不够,上万的请求数据库就已经崩了;但往往高并发场景是读多写少,所以可以利用缓存,完全可以在数据库和缓存里都写一份,读的时候大量走缓存就行了。数据库redis 轻轻松松单机几万的并发,就是用了从缓存中存储数据、读写数据的。
(1)浏览器内部都有dns客户端,首先查询本地dns缓存中是否有该域名的ip,如果有就直接去访问该ip。如果没有,该dns客户端首先查找自己主机所设置的dns服务器,然后去该dns服务器去查询是否有该域名的ip。
(2)如果该dns服务器本地缓存中有该域名的A记录(域名与ip地址的对应记录),则直接返回给浏览器中的dns客户端。若没有该域名的A记录,就通过递归的方式向上询问其他dns服务器,直到遇到A记录,此时这条递归路线上的所有被询问过的dns服务器,都会将此域名对应的A记录缓存到自己的cache中,以备下次有相同域名查询时直接返回。这一点很像路由算法里的LS算法,查询的路由器的信息返回后都会被记录。
(3)浏览器中的dns客户端得到此域名的ip地址后,也将此域名和ip放在自己的缓存中,以备下次用户再键入同一域名时,避免再查一次ip。
(4)浏览器开始通过网络用http协议访问该ip地址的80端口
(5)一般情况下该ip对应的设备不是最终的Web服务器,因为很少有人会把Web服务器直接暴露在公网,假设该ip对应的设备是台网关(一般是硬件路由设备),该网关检查本地缓存中是否有相关Web服务器的缓存,若有则直接将该http请求分配给缓存中的Web服务器。否则从服务器列表中重新分配一台Web服务器,将该http请求转发给该Web服务器处理。随后将该Web服务器的IP地址(内网地址)和端口号缓存起来,以备下次该用户的请求到来时,依然给Web服务器。有的网关可以识别用户cookie信息,从而可以将该请求再次落到 上一个请求的Web服务器上。
(6)Web服务器拿到请求后,如果是静态请求,先检查自己的缓存中是否有该页面的记录,若没有则直接从硬盘中取出页面,将其返回后存入本地静态缓存中。如果为动态请求,则先交给自己的cgi去处理。
(7)cgi拿到请求后,先检查自己的换粗系统,如memcache,如果缓存中没有,则与数据库建立链接,向数据库发出请求
(8)数据库也是先检查自己的缓存,若没有结果集,则从表中检索到数据后返回,并将结果集缓存起来
(9)cgi拿到数据后,返回给web服务器,并将数据缓存到memcache中
(10)web服务器拿到数据后,将数据返回给网关。由于是动态数据,不需要缓存。
(11)网关拿到数据后,直接返回给浏览器
(12)如果浏览器发现数据信息中含有静态数据,则将静态数据缓存到用户的internet临时目录中。
静态数据如图片等信息,动态数据一般如ajax的数据或者js返回的json数据等数据。
标签:http 从服务器 避免 查询 端口号 设备 轻松 利用 mem
原文地址:https://www.cnblogs.com/yunlambert/p/10187393.html