2.代理快取的工作原理
当代理快取收到客户端的请求时,它首先检查所请求的内容是否已经被快取 。如果没有找到,快取必须以客户端的名义转发请求,并在收到伺服器发出的档案时,将它以一定的形式保存在本地硬碟,并将其传送给客户端 。如果客户端请求的内容已被快取,还存在两种可能:其一,快取的内容已经过时,即快取中保存的内容超过了预先设定的时限,或网站伺服器的网页已经更新,这时快取会要求原伺服器验证快取中的内容,要幺更新内容,要幺返回“未修改”的讯息;其二,快取的内容是新的,即与原网站的内容保持同步,此时称为快取命中,这时快取会立即将已保存的内容送给客户端 。在客户端的请求没有命中时,反而增加了快取存储和转发的处理时间 。在这种情况下,代理快取是否仍有意义呢?实际上,代理快取能够同时与网站伺服器建立多个并发的TCP/IP连线,并行获取网站上的内容 。快取的存在从整体上降低了对网站访问的次数,也就降低了单位时间内伺服器端的排队数目,因而这时并发连线的排队延时要小得多 。优秀的快取甚至能实现对网页内相关连结内容的预取以加快连线的速率 。
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服务的记忆体不够用时,它才会清理没用或者比较旧的数据,也就是懒性清除 。增加快取的方法CPU的快取CPU的快取分二级:L1(一级快取)和L2(二级快取),当处理器要读取数据时,首先要在L1快取中查找,其次才是L2快取,最后才是系统记忆体 。如果有一天你发觉自己的电脑慢了很多,进入到Windows桌面也要几分钟,这时候就要检查一下CPU的一、二级快取有没有打开 。在BIOS设定中的StandardCMOSSetup(标準CMOS设定)有两项是用来打开或关闭快取的:CPUInternalCache设为Enable时开启CPU内部的一级缓冲区,若设定为Disabl则为关闭,这时系统性能将大大降低;ExternalCache选项是控制主机板上二级缓冲区,如果主机板上有二级快取则应设成Enable 。硬碟的快取点击电脑桌面上的“开始”/“运行”,键入“Msconfig”启动“系统配置实用程式”,跟着选中“system.ini”标籤下的“Vcache”项,就可以根据系统的实际情况来调节硬碟的快取了 。在该选项中一般会有三行内容:ChunkSize=1024、MaxFileCache=10240和MinFileCache=10240;其中第一行是缓冲区读写单元值,第二、三行是硬碟的最大和最小缓冲值,等号后的数值都是可以修改的,只要右键单击选中任一行就可以进行修改了 。如果你的记忆体是128MB的话,上面这三行的取值就比较合理了,当然也可以自定 。如果不知道该如何设定合适的缓冲值,请“Windows最佳化大师”帮忙吧,这个软体中有一个“磁碟快取最佳化”项,用滑鼠就可以方便地设定好快取;又或者让“Windows最佳化大师”自动帮你进行最佳化设定 。当硬碟的快取值足够大时,硬碟就不用频繁地读写磁碟,一来可以延长硬碟的寿命,二来也可以提高数据的传输速度 。另外,将硬碟的“档案系统快取”设定为“网路伺服器”,可以加快系统对硬碟的访问速度,因为档案系统快取里存放了硬碟最近被访问过的档案名称和路径,快取越大所能储存的内容也就越多 。如果点击“控制台”/“系统”/“性能”/“档案系统”/“硬碟”,将“此计算机的主要用途”由“台式机”改为“网路伺服器”,可以将原来10K左右的快取增加至近50K左右 。软碟机和光碟机的快取一般来说,软碟机读写数据的速度都比较慢,这是因为碟片的转速不能太高,但是,我们可以提高软碟机的读写快取,让软碟机一次读写更多的数据 。方法是:在桌面上的“开始”/“运行”框中键入“Regedit”运行注册表编辑器,依次进入HKEY-LOCAL-MACHINE\System\CurrentControlSet\Services\Class\FDC\0000,新建一个为ForeFifo的“DWORD值”,将其值设为“0”,这样就对软碟机进行了软提速 。很多人都知道右键单击桌面“我的电脑”图示,选“属性”/“性能”/“档案系统”/“CD-ROM”,将最佳的访问方式设为“四倍速或更高速”,将追加的高速快取大小滑块拖到最大处,可以明显提高光碟机的读盘速度 。除了这种方式,我们还可以在注册表中设定缓冲值,方法是:进入到注册表,在HKEY-LOCAL-MACHINE\System\CurrentControlSet\Control\FileSystem\CDFS下,将CacheSize(快取值的大小)和Prefetch(预读档案大小)两项进行手工调整,只要右键单击要选的项就可以进行修改了 。