网络缓存

 
什么影响Internet访问速率
访问网站的过程是通过建立在TCP/IP协议之上的HTTP协议来完成的。从客户端发出一个HTTP请求开始,用户所经历的等待时间主要决定于DNS和网站的响应时间。网站域名首先必须被DNS服务器解析为IP地址,HTTP的延时则由在客户端和服务器间的若干个往返时间所决定。
往返时间是指客户端等待每次请求的响应时间,平均往返时间取决于三个方面:
  1. 1. 网站服务器的延时
网站服务器造成的延时在往返时间中占主要比例。当某个服务器收到多个并发HTTP请求时,会产生排队延时。由于响应一个HTTP请求,往往需要多次访问本地硬盘,所以即使是一台负载并不大的服务器,也可能产生几十或几百微秒的延时。
  1. 2. 由路由器网关、代理服务器防火墙引入的延时
通常在客户端和服务器之间的路径上会存在多个网络设备,如路由器、网关、代理和防火墙等。它们对经过的IP包都要做存储/转发的操作,于是会引入排队延时和处理延时。在网络拥塞时,这些设备甚至会丢包,此时会寄希望于客户端和服务器通过端到端的协议来恢复通信。
  1. 3. 不同通信链路上的数据传输速率
广域网中,从一个网络设备到另一个网络设备间的数据传输速率是决定往返时间的一个重要因素。但基本带宽的作用并不是像人们想象的那么重要,一项测试表明,当网站采用T3速率接入Internet时,也仅有2%的网页或对象能以64kbps的速率提供给客户端,这显然表明,带宽在网络性能上不是最关键的因素。
今天Internet在向世界的每一个角落延伸,用户向一个服务器发出的 请求可能会经过8000公里到1.6万公里的距离,光速带来的延时和网络设备的延时是网络如此缓慢的最根本原因。
网络缓存解决根本问题
既然影响网络速率的原因是由距离和光速引起,那么加速Web访问的唯一途径就是缩短客户端与网站之间的距离。通过将用户频繁访问的页面和对象存放在离用户更近的地方,才能减少光速引入的延时,同时由于减少了路由中的环节,也相应地减少了路由器、防火墙和代理等引入的延时。
传统的解决办法是建立镜像服务器来达到缩短距离的目的。但这个办法存在很大的不足,对于某个站点而言,不可能在离每个用户群较近的地方都建立镜像站点,若对大多数网站都用这样的办法就更不经济,同时管理和维护镜像站点是一项非常困难的工作。
网络缓存是一种降低Internet流量和提高终端用户响应时间的新兴网络技术。它的观念来自于计算机和网络的其他领域,如目前流行的Intel架构的CPU中就存在缓存,用于提高内存存取的速率;各种操作系统在进行磁盘存取时也会利用缓存来提高速率;分布式文件系统通常也通过缓存来提高客户机和服务器之间的速率。
  1. 1.缓存的类型
网络缓存可以在客户端,也可以在网络上,由此我们将缓存分为两类:浏览器缓存代理缓存
几乎目前所有的浏览器都有一个内置的缓存,它们通常利用客户端本地的内存硬盘来完成缓存工作,同时允许用户对缓存的内容大小作控制。浏览器缓存是网络缓存的一个极端的情况,因为缓存设在客户机本地。通常一个客户端只有一个用户或几个共享计算机用户,浏览器缓存要求的硬盘空间通常在5MB到50MB的范围内。但是浏览器缓存在用户之间难以共享,不同客户端的缓存无法实现交流,因而缓存的内容与效果相当有限。
代理缓存则是一种独立的应用层网络服务,它更像E-mail、Web、DNS等服务。许多用户不仅可以共享缓存,而且可以同时访问缓存中的内容。企业级代理缓存一般需要配置高端的处理器和存储系统,采用专用的软件,要求的硬盘空间在5MB到50GB左右,内存为64MB到512MB。
代理处于客户端与网站服务器之间,在某些情况下,这种连接是不允许的,如网站在防火墙内,这时客户端必须与代理建立TCP连接,然后由代理建立与网站服务器的TCP连接。代理在服务器和客户端之间起到了数据接力的作用。代理发出的HTTP请求与一般的HTTP请求有细小的不同,主要在于它包含了完整的URL,而不只是URL的路径。
  1. 2.代理缓存的工作原理
代理缓存收到客户端的请求时,它首先检查所请求的内容是否已经被缓存。如果没有找到,缓存必须以客户端的名义转发请求,并在收到服务器发出的文件时,将它以一定的形式保存在本地硬盘,并将其发送给客户端。
如果客户端请求的内容已被缓存,还存在两种可能:其一,缓存的内容已经过时,即缓存中保存的内容超过了预先设定的时限,或网站服务器的网页已经更新,这时缓存会要求原服务器验证缓存中的内容,要么更新内容,要么返回“未修改”的消息;其二,缓存的内容是新的,即与原网站的内容保持同步,此时称为缓存命中,这时缓存会立即将已保存的内容送给客户端。
在客户端的请求没有命中时,反而增加了缓存存储和转发的处理时间。在这种情况下,代理缓存是否仍有意义呢?实际上,代理缓存能够同时与网站服务器建立多个并发的TCP/IP连接,并行获取网站上的内容。缓存的存在从整体上降低了对网站访问的次数,也就降低了单位时间内服务器端的排队数目,因而这时并发连接的排队延时要小得多。优秀的缓存甚至能实现对网页内相关链接内容的预取以加快连接的速率
  1. 3.代理缓存的策略
当原服务器的文件修改或被删除后,缓存又如何知道它保存的拷贝已经作废呢?HTTP协议为缓存服务提供了基本的支持,它使缓存能向原服务器查询,某个文件是否更改,如果缓存的拷贝过时则进行有条件下载。仅当原服务器文件超过指定的日期时,才会发出新的文件。
但是这些询问操作对网络服务器造成的负载几乎和获取该文件差不多,因此不可能在客户端向缓存发起请求时都执行这样的操作。HTTP协议使得服务器可以有选择地为每个文档指定生存时间,即清楚地指出某个文件的有效生命周期,生存时间很短即意味着“不要对其缓存”。拷贝的保留时间可以是固定的,也可以是通过这个文件的大小、来源、生存时间或内容计算出来的。

编辑本段分布缓存

分布式缓存系统是为了解决数据库服务器和web服务器之间的瓶颈。如果一个网站的流量很大,这个瓶颈将会非常明显,每次数据库查询耗费的时间将会非常可观。对于更新速度不是很快的网站,我们可以用静态化来避免过多的数据库查询。对于更新速度以秒计的网站,静态化也不会太理想,可以用缓存系统来构建。如果只是单台服务器用作缓存,问题不会太复杂,如果有多台服务器用作缓存,就要考虑缓存服务器负载均衡
使用Memcached分布式缓存服务来达到保存用户的会话数据,而达到各个功能模块都能够跨省份、跨服务器共享本次会话中的私有数据的目的。每个省份使用一台服务器来做为Memcached服务器来存储用话的会话中的数据,当然也可以多台服务器,但必须确保每个省份的做Memcached服务器数量必须一致,这样才能够保证Memcached客户端操作的是同一份数据,保证数据的一致性。
会话数据的添加、删除、修改
Memcached客户端,添加、删除和、修改会话信息数据时,不仅要添加、删除、修改本省的Memcached服务器数据,而且同时要对其它省份的Memcahed服务器做同样的操作,这样用户访问其它省份的服务器的功能模块进也能读取到相同的会话数据。Memcached客户端服务器的列表使用局域网的内网IP(如:192.168.1.179)操作本省的Memcahed服务器,使用公网的IP((如:202.183.62.210))操作其它省份的Memcahe服务器。
会话数据的读取
系统所有模块读取会话数据的Memcached客户端服务器列表都设为本省Memcached服务器地址的内网IP来向Memcahed服务器中读取会话数据。
同一会话的确认
使用Cookie来保持客户与服务端的联系。每一次会话开始就生成一个GUID作为SessionID,保存在客户端的Cookie中,作用域是顶级域名,这样二级、三级域名就可以共享到这个Cookie,系统中就使用这个SessionID来确认它是否是同一个会话。
会话数据的唯一ID
会话数据存储在Memcached服务器上的唯一键Key也就是会话数据数据的唯一ID定义为:SessionID_Name, SessionID就是保存在客户端Cookie中的SessionID,Name就是会话数据的名称,同一次会话中各个会话数据的Name必须是唯一的,否则新的会话数据将覆盖旧的会话数据。
会话的失效时间
会话的失效通过控制Cookie的有效时间来实现,会话的时间设为SessionID或Cookie中的有效时间,且每一次访问SessionID时都要重新设置一下Cookie的有效时间,这样就达到的会话的有效时间就是两次间访问Cookie中SessionID值的的最长时间,如果两次访问的间隔时间超过用效时间,保存在SessionID的Cookie将会失效,并生成新的SessionID存放在Cookie中, SessionID改变啦,会话就结束啦。Memcached服务器中会话数据的失效,每一次向Memcache服务器中添加会话数据时,都把有效时间设为一天也就是24小时,让Memcached服务使用它内部的机制去清除,不必在程序中特别做会话数据的删除操作。数据在Memcache服务器中有有效时间只是逻辑上的,就算是过了24 小时,如果分配给Memcached服务的内存还够用的话,数据还是保存在内存当中的,只是Memcache客户端读取不到而已。只有到了分配给Memcached服务的内存不够用时,它才会清理没用或者比较旧的数据,也就是懒性清除。
原文地址:https://www.cnblogs.com/cq-home/p/3248012.html