Web相关Cache介绍
简介
Cache,中文意思是缓存,是用来将频繁访问的数据,存储于用户本地或者是访问速度很快的存储介质上,以便于提高访问速度及响应时间,我们的电脑的CPU中也有调整缓存,不过我今天这里说的是WEB方面的CACHE,如何合理的使用WEB相关的CACHE,提交用户访问网站的速度及响应时间。以下分别客户端cache、代理服务器、CDN及镜像站点、中心CACHE服务器、JVMCACHE、数据库CACHE简单的介绍了每种CACHE,参考了很多的文章,在些对原作者表示感谢,本文无求育人,只求自育。
客户端CACHE
客户端CACHE,包括浏览器本身的缓存、FLASH存储等,用于存储一些临时的文件或者变化不太或无变化的数据:如浏览器自动将用户浏览的网页存储在用户的硬盘上,下次再浏览相同的网站的时候,系统会自动从硬盘中调出该网页,既节省了时间也减少了网络的交换;还有就是相同的数据需要以不同的形式在客户端展现,如新版工作平台中的应用,页面加载的时候已经加载完了全部应用,但用户看到的并且不是全部应用,用户在做频道切换或者是通过查看全部应用面板查看全部应用的时候,就不需要到后台再次获取数据了,直接从浏览器本身的缓存中获取进行渲染即可,这样也增加了用户的访问速度。
目前国内的网络访问速度还不是很好,合理的得用客户端的CACHE功能,减少网络的访问次数,这无疑会提升客户体验,给被访问的网站加分,并且不会有硬件的费用投入,算从理论上讲是一种“零”投入的策略。
代理服务器(ProxyServer)
代理服务器(ProxyServer),常用的就是“”,从去年开始因为ZF对GOOGLE的限制,而我辈又要始终追随GOOGLE,那最好的一个办法就是“”去GOOGLE了;还有就是需要访问的站点访问速度比较慢,可以通过代理服务器提高访问的速度,以下是一个原理图:
商用的代理服务器,通常都是有CACHE功能的,访问都比较稳定,且个人信息安全性也相对要高得多;但是普通的代理服务器就一定有CACHE功能了,访问的稳定性也不一定能够保证,最可怕的个人信息的安全性完全没有保障,因而在考虑使用代理服务器的时候要慎重,否则不要因小失大,那可就亏大了。
CDN、镜像站点
CDN的全称是ContentDeliveryNetwork,即内容分发网络。其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络"边缘",使用户可以就近取得所需的内容,解决Internet网络拥挤的状况,提高用户访问网站的响应速度。从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均等原因所造成的用户访问网站响应速度慢的问题。(也就是一个服务器的内容,平均分部到多个服务器上,服务器智能识别,让用户获取离用户最近的服务器,提高速度。
以下是CDN原理图:
现阶段,国内流量比较大的网站,如阿里巴巴、淘宝、腾讯、新浪、网易等都有使用CDN技术,这给用户的感觉就是在任何地方访问都比较快。
镜像站点、CDN这二者之间有一点比较类似,都是通过增加服务结点来降低访问的拥挤度,并提高用户访问的速度。他们的差别是镜像服务本身是一个独立的服务器,内容完全来自于主服务器,通过定期到主服务器去更新内容而保持内容与主服务器基本一致,如华军软件园的实现就是很多的镜像站点,直接访问该镜像的请求都全部去了该镜像服务器,这就会出现不同的镜像站点会有不同的访问压力,也就是没有导流、负载均衡的作用,但如果镜像站点出现了问题,是没有被其它服务器代理的,就相当于你访问的其它网站出现问题一样:挂了;CDN其实也是代理,只是他比镜像服务更智能的代理,如果当前服务器访问量过大时,可以将流量导到其它的其它服务器,提升响应的时间,它的优势在于几乎涵盖国内所有线路,而在可靠性上,CDN在结构上实现了多点的冗余,即使某一个节点由于意外发生故障,对网站的访问能够被自动导向其他的健康节点进行响应。CDN能轻松实现网站的全国铺设,不必考虑服务器的投入与托管、不必考虑新增带宽的成本、不必考虑多台服务器的镜像同步、不必考虑更多的管理维护技术人员。
中心数据CACHE服务器
以上谈到的都是应用以外的CACHE,以增加服务器节点提升用户访问速度,有没有办法使系统在获取数据数据时不是每次都和数据库打交道,减少I/O的开销,从而提访问速度呢?答案是肯定的,阿里使用的是内存CACHE(memcached),将经常访问、不易变化且CACHE命中率比较大的数据,放到CACHE服务器中,如阿里助手的菜单,这些数据都是不怎么变化,放到CACHE中应用在获取菜单数据时,速度就会提高,从而提高应用响应时间,也可以说是提高了用户的访问速度。
在选择,需要注意几点:1、CACHE的可靠性,在大量访问及使用的情况,能够保证数据的可靠性;水平伸缩性比较好,这方便于快速提高CACHE的系统容量;CACHE要能够快速数据恢复,当其中某台CACHE出现问题的时候,其它的CACHE能够在短时间之内代替它的工作;2、CACHE的有效性,要支持定期的数据失效策略,为其它需要使用CACHE的数据提供存储空间。
使用CACHE的时候,也需要注意CACHE的命中率要高,意思就是CACHE中要存放经常访问、不易变化的数据,这才能够体现CACHE的价值,如果将阿里每个用户的个人信息都放到CACHE中,这是没有意义的。
JVMCACHE
这里说的JVMCACHE,也是将数据放到内存中,算是另外一种内存CACHE,如我们在代码中写的静态对象,只是这种CACHE是没有过期策略的,除了绝对不变的数据以外,如配置文件及参数可以保存JVM中,不推荐使用JVMCACHE;阿里助手的菜单使用的是MEMCACHE,没有使用JVMCACHE,因为菜单有些时候也需要做变更的,这个时候要使变更立马的反映出来,可以通过手动清理MEMCACHE的方式,而JVMCACHE是不方便清理的,并且如果又是在集群环境中,完全清理的成本将是非常大的,而使用中心CACHE服务器,只需清理一次就完全清除了;如果菜单出不来或者数据不正确,那至少是A类故障,呵呵,老板又要找我喝酒了。
另外还有一些数据库中间件,如IBATIS、HIBERNATE等,也都支持数据缓存,支持数据自动过期策略,可以设定CACHE的数量,如下是IBATIS的CACHE配置实现:
<cacheModelid="USERINFO-CACHE"type="LRU"readOnly="true"serialize="true"> <!---数据自动过期时间-> <flushIntervalminutes="10"/> <!---保存的结果集的数量-> <propertyname="size"value="500"/> <!---数据过期的操作-> <flushOnExecutestatement="MY_SQL_INSERT"/> <!---数据过期的操作-> <flushOnExecutestatement="MY_SQL_UPDATE"/> </cacheModel> <selectid="..."parameterClass="..."resultMap="..."cacheModel="USERINFO-CACHE"> SQL HERE </select> |
这个对于缓解数据库的的压力也是会起到不少作用的,特别是在对相同的数据进行高峰访问的情况下,那效果是港港的。
数据库CACHE
数据库本身也是有CACHE的,这里我们就不继续究下去了,有兴趣的可以去研究研究。
结束语
本篇介绍CACHE,是从离用户最近到用户最远的顺序进行介绍的,让你可以一层层的去了解合适的优化策略,比较泛泛,没有什么深入的东西,都只是从表面上谈到了一些东西,具体的场景和使用,还需要根据具体情况而定。
参考:
CACHE:http://baike.baidu.com/view/44274.htm