WebCache web的缓存机制
1webcache的简单介绍
web缓存,是一种 缓存技术 ,用于临时存储(缓存)的网页文件,如HTML页面和图像等静态资源,减少带宽以及后端服务器的压力,通常一个WebCache也是一个 反向代理软件 ,既可以通过缓存响应用户的请求,当本地没有缓存时,可以代理用户请求至后端主机。
WebCache分为正向和反向之分,一般正向WebCache不常用,这次主要以反向WebCache为主。
2webcache的由来
1)由于程序具有局部性,而局部性分为: 时间局部性和空间局部性
A时间局部性是指:在单位时间内,大部分用户访问的数据只是热点数据(热点数据指经常被访问的数据)
B空间局部性是指:某新闻网站突然出来一个重大新闻,此新闻会被被反复访问。
3webcache的变化性
WebCache的新鲜度监测机制 :数据都是可变的,所以缓存中的内容要做新鲜度检测
4缓存相关的HTTP首部:
HTTP协议提供了多个首部用以实现 页面缓存及缓存失效 的相关功能,这其中最常用的有:
1)Expires:HTTP/10,用于指定某web对象的过期日期/时间,通常为GMT格式;一般不应该将此设定过长的时间,一年的长度对大多场景来说足矣;其常用于为 纯静态内容 如JavaScripts样式表或指定缓存周期;
(2)Cache-Control:为了解决HTTP/10中对于新鲜度控制的策略而生,通过相对时间来控制缓存使用期限;
(3)Etag:响应首部,用于在 响应报文中为某web资源定义版本标识符 ;
(4)Last-Mofified:响应首部,用于回应客户端关于Last-Modified-Since或If-None-Match首部的请求,以通知客户端其请求的web对象最近的修改时间;
(5)If-Modified-Since:条件式请求首部,基于 请求内容的时间戳作验正 ,如果后端服务器数据的时间戳未发生改变则继续使用,反之亦然
(6)If-None-Match:条件式请求首部; 通过Etag来跟后端服务器进行匹配 ,如果数据的Etag未发生改变,既不匹配,则响应新数据,否则继续使用当前数据
(7)Vary:响应首部,原始服务器根据请求来源的不同响应的可能会有所不同的首部,最常用的是 Vary: Accept-Encoding,用于通知缓存机制其内容看起来可能不同于用户请求时 Accept-Encoding-header首部标识的编码格式;
(8)Age:缓存服务器可以发送的一个额外的响应首部,用于指定响应的有效期限;浏览器通常根据此 首部决定内容的缓存时长;如果响应报文首部还使用了max-age指令,那么缓存的有效时长为 “max-age减去Age”的结果;
很多无盘软件都集成了缓存功能,将缓存技术应用在无盘系统上可以大大减轻服务器的压力,减少频繁传输与读写,从而达到提高带机量的目的,缓存技术曾经一度成为论坛上吹捧的神物,superCache 软件被广泛的使用,后期无盘厂家都开始了对缓存的重视,加强无盘系统工作站写缓存技术的应用,多家厂商先后推出了本地回写,多路回写等概念,这实质就是对写缓存技术的应用名词,而少有人去重视服务器端的读缓存的重要性,实际上如果可以很好解决服务器端读缓存的技术问题,大量工作站的同时运行时的效率就不再是问题了
传统的无盘系统,当同时运行的工作站数量增多以后,或同一节点中运行大型游戏的用户增多后,会导致后开启的机器运行速度变慢,甚至整个网络变得非常卡,这种现象如推除网管工作失误之外,更重要的一个因素在于此款无盘系统没有重视服务器端读缓存的重要。
新一代的无盘软件在设计时,吸引很多前人的经验教训,除了成功的解决了工作站写缓存的问题,更加大力度对服务端的读缓存进行了研究,已经取得了重要的突破。
1. 通过精确的算法,将工作站运行所必须的数据调入缓存中供工作站使用 (非ramdisk 存放镜像)。
2. 多数工作站常读的数据锁定在公共缓存区中,不需每次从祠服阵列中调用,减少磁盘读压力。
3.缓存区智能释放,避免缓存耗尽。
4. 将P2P 技术与缓存技术结合,工作站可以从周围机器的缓存中读取需要的数据。
1、OSCache
OSCache是个一个广泛采用的高性能的J2EE缓存框架,OSCache能用于任何java应用程序的普通的缓存解决方案。
OSCache有以下特点:
(1)缓存任何对象,你可以不受限制的缓存部分jsp页面或HTTP请求,任何java对象都可以缓存。
永久缓存--缓存能随意的写入硬盘,因此答应昂贵的创建(eXPensive-to-create)数据来保持缓存,甚至能让应用重启。
(2)支持集群--集群缓存数据能被单个的进行参数配置,不需要修改代码。
缓存记录的过期--你可以有最大限度的控制缓存对象的过期,包括可插入式的刷新策略(假如默认性能不需要时)。
2、Java Caching System
JSC(Java Caching System)是一个用分布式的缓存系统,是基于服务器的java应用程序。它是通过提供治理各种动态缓存数据来加速动态web应用。
JCS和其他缓存系统一样,也是一个用于高速读取,低速写入的应用程序。
动态内容和报表系统能够获得更好的性能。
假如一个网站,有重复的网站结构,使用间歇性更新方式的数据库(而不是连续不断的更新数据库),被重复搜索出相同结果的,就能够通过执行缓存方式改进其性能和伸缩性。
3、EHCache
EHCache 是一个纯java的在进程中的缓存,它具有以下特性:快速,简单,为Hibernate21充当可插入的缓存,最小的依靠性,全面的文档和测试。
4、JCache
JCache是个开源程序,正在努力成为JSR-107开源规范,JSR-107规范已经很多年没改变了。这个版本仍然是构建在最初的功能定义上。
5、ShiftOne
ShiftOne Java Object Cache是一个执行一系列严格的对象缓存策略的Java lib,就像一个轻量级的配置缓存工作状态的框架。
6、SwarmCache
SwarmCache是一个简单且有效的分布式缓存,它使用ip multicast与同一个局域网的其他主机进
行通讯,是非凡为集群和数据驱动web应用程序而设计的。
SwarmCache能够让典型的读操作大大超过写操作的这类应用提供更好的性能支持。
SwarmCache使用JavaGroups来治理从属关系和分布式缓存的通讯。
扩展资料
Java中缓存存在的原因:
一 般情况下,一个网站,或者一个应用,它的一般形式是,浏览器请求应用服务器,应用服务器做一堆计算后再请求数据库,数据库收到请求后再作一堆计算后把数据 返回给应用服务器。
应用服务器再作一堆计算后把数据返回给浏览器,这个是一个标准流程。但是随着互连网的普及,上网的人越来越多,网上的信息量也越来越多。
数据库每秒中接受请求的次数也是有限的,如果利用有限的资源来提供尽可能大的吞吐量呢。一个办法:减少计算量,缩短请求流程(减少网络io或者硬盘io),这时候缓存就可以大展手脚了。
缓存的基本原理就是打破上图中所描绘的标准流程,在这个标准流程中,任何 一个环节都可以被切断请求可以从缓存里取到数据直接返回。
一、全页面静态化缓存
也就是将页面全部生成html静态页面,用户访问时直接访问的静态页面,而不会去走php服务器解析的流程。此种方式,在CMS系统中比较常见,比如dedecms;
一种比较常用的实现方式是用输出缓存:
Ob_start()要运行的代码$content=Ob_get_contents();将缓存内容写入html文件Ob_end_clean();
二、数据缓存
顾名思义,就是缓存数据的一种方式;比如,商城中的某个商品信息,当用商品id去请求时,就会得出包括店铺信息、商品信息等数据,此时就可以将这些数据缓存到一个php文件中,文件名包含商品id来建一个唯一标示;下一次有人想查看这个商品时,首先就直接调这个文件里面的信息,而不用再去数据库查询;其实缓存文件中缓存的就是一个php数组之类;
Ecmall商城系统里面就用了这种方式;
三、查询缓存
其实这跟数据缓存是一个思路,就是根据查询语句来缓存;将查询得到的数据缓存在一个文件中,下次遇到相同的查询时,就直接先从这个文件里面调数据,不会再去查数据库;但此处的缓存文件名可能就需要以查询语句为基点来建立唯一标示;
按时间变更进行缓存
就是对于缓存文件您需要设一个有效时间,在这个有效时间内,相同的访问才会先取缓存文件的内容,但是超过设定的缓存时间,就需要重新从数据库中获取数据,并生产最新的缓存文件;比如,我将我们商城的首页就是设置2个小时更新一次。
四、页面部分缓存
该种方式,是将一个页面中不经常变的部分进行静态缓存,而经常变化的块不缓存,最后组装在一起显示;可以使用类似于ob_get_contents的方式实现,也可以利用类似ESI之类的页面片段缓存策略,使其用来做动态页面中相对静态的片段部分的缓存。
该种方式可以用于如商城中的商品页;
五、Opcode缓存
首先php代码被解析为Tokens,然后再编译为Opcode码,最后执行Opcode码,返回结果;所以,对于相同的php文件,第一次运行时可以缓存其Opcode码,下次再执行这个页面时,直接会去找到缓存下的opcode码,直接执行最后一步,而不再需要中间的步骤了。
比较知名的是XCache、TurckMMCache、PHPAccelerator等。
六、按内容变更进行缓存
这个也并非独立的缓存技术,需结合着用;就是当数据库内容被修改时,即刻更新缓存文件;
比如,一个人流量很大的商城,商品很多,商品表必然比较大,这表的压力也比较重;我们就可以对商品显示页进行页面缓存;
当商家在后台修改这个商品的信息时,点击保存,我们同时就更新缓存文件;那么,买家访问这个商品信息时,实际问的是一个静态页面,而不需要再去访问数据库;
试想,如果对商品页不缓存,那么每次访问一个商品就要去数据库查一次,如果有10万人在线浏览商品,那服务器压力就大了;
七、内存式缓存
提到这个,可能大家想到的首先就是Memcached;memcached是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。
它就是将需要缓存的信息,缓存到系统内存中,需要获取信息时,直接到内存中取;比较常用的方式就是key_>value方式;
connect($memcachehost,$memcacheport)ordie("Couldnotconnect");$memcache->set('key','缓存的内容');$get=$memcache->get($key);//获取信息>
八、apache缓存模块
apache安装完以后,是不允许被cache的。云南IT培训http://wwwkmbdqncn/认为如果外接了cache或squid服务器要求进行web加速的话,就需要在htttpdconf里进行设置,当然前提是在安装apache的时候要激活mod_cache的模块。
服务器优化技术主要有分布式缓存、异步操作、使用集群以及代码。
网站性能优化第一定律:优先考虑使用缓存优化性能。
缓存原理
(1)什么是缓存?(将数据存储在相对较高访问速度的介质中,以供系统处理)
(2)缓存的优点:访问速度快,如果需要计算可以减少计算时间
(3)缓存的本质是一张以键值对存储的内存hash表
(4)主要用来存储:读写比例高,很少变化的数据
(5)网站的访问遵循28定律
合理使用缓存应该注意以下问题
(1)频繁更新的数据(数据还没有读就已经失效,一般要求读写比在2:1以上才有意义)
(2)没有热点数据(无疑浪费资源)
(3)数据不一致与脏读(缓存被加载的过程中可能会产生数据不一致,有效时间过程数据在内存中就会变成脏数据)
(4)缓存的可用性(如果太过依赖缓存,容易产生雪崩。使用缓存热备并不能提高缓存的可用性,使用集群可以提高可用性)
(5)缓存预热(LRU计算时间过长,有的数据需要提前加载)
(6)缓存穿透(解决部分数据无法命中,而加重数据库压力的问题,一般设置空值)分布式缓存架构
(1)JBoss Cache:数据相同
(2)Memcached:数据不同互不通信
(3)Memcached5大优点:协议简单、通用性强(支持各种语言)、Libevent网络通信、内存管理高效、互不通信。
当网站因为过度消耗资源暂时无法访问时,可能是由于网站流量过大或者服务器资源不足引起的。为了解决这个问题,可以采取以下措施:
1 增加服务器资源:升级服务器或添加更多的服务器来分担流量负载,以提高网站的可用性和稳定性。
2 优化网站代码:对网站代码进行优化,减少资源的消耗,提高网站的性能。
3 启用缓存:使用缓存技术,将经常访问的页面或数据缓存到服务器或客户端,减少每次请求对资源的消耗。
4 限制流量:在极端情况下,可以限制网站的流量,防止过度消耗资源,保证网站的核心功能能够正常运行。
为了更好地理解问题,可以想象一个商店里面人满为患,导致货架上的商品被抢购一空。为了解决这个问题,商店可以增加更多的货架和商品,或者限制进入商店的人数。同样,网站也需要通过增加资源或限制流量来保证正常运行。
综上所述,解决网站因为过度消耗资源暂时无法访问的问题需要从多个方面入手,提高服务器的处理能力、优化网站代码、启用缓存以及限制流量等措施可以有效地解决问题。
1减少 HTTP 请求数:一个页面中包含的,JS,CSS等每一个资源都会生成一个 HTTP 下载请求,由浏览器发向网站服务器,如果减少这个请求数,会缩短网络传输的时间。
另外尽量采用压缩格式的,例如 jpg 就属于一种压缩格式,bmp属于无压缩无失真。这个需要网页/网站设计人员综合考虑这个因素。
优点:缩短网络传输事件,网络传输量小,减少服务器端负载;
缺点:减少HTTP请求,有时候无法满足网站发布信息的需求,盗链的出现也会增加HTTP请求;
2、采用缓存技术(webcache):这个是目前网站加速最主要的方式。如果利用代理/缓存加速服务器去实现的话,网站在不需要做任何改动的情况下,就可实现大跨度的实现加速效果。实现的基本方式为:将指定的网站页面周期性的缓存起来,缓存时间可从几秒到几天,在缓存时间内,页面只需要生成一次,以后有用户访问这个页面的时候,网站服务器和数据库就不再需要重新生成相同的页面了,极大的减少了网站服务器和数据库负荷。我们做个简单的对比,假设一个新闻热点页面,在一个小时可被访问1万次,如果这个新闻页面每次被访问的时候,都会通过读取数据库后再一遍一遍的编译生成,在一个小时内将会重复性的生成1万次;如果这个页面被周期性的缓存10分钟,也就是每间隔10分钟才会被生成一次,一个小时内只会被生成6次,如果两种方式一对比,效果就超级明显,两种比较下服务器负荷的压力比差别1000倍以上,缓存技术将使得网站负载在高峰期游刃有余。Fikker网站加速软件实际上是一款代理服务器软件,通过Fikker网站加速服务器提供的页面缓存(webcache)功能,将需要缓存的网站URL配置到页面缓存中(支持正则表达式,通配符和精确地址匹配),并设定一定的缓存时间(几秒到几天),不需要重启Fikker立即生效,如果有重要页面变动,可通过清理缓存将指定的缓存页面清理出去。
优点:网站不需要做任何改动,大幅减少服务器和数据库的负荷。
3、使用gzip压缩:页面压缩主要是降低传输尺寸,提高传输效率。常用的 html,asp,php,jsp,txt,css,js等文本页面,通过gzip压缩可降低75%左右尺寸,也就是原来需要传输 100KB 的页面,gzip压缩后只需要 25KB 的传输数据了,加速的效果是非常明显的。Fikker内置了gzip模块,自动对压缩的文件压面进行压缩传输。
4、使用非阻塞网络技术(non-block):提高网络响应速度,Linux 从 26 内核开始,专门引入 epoll 事件机制,相对于传统的 select 事件机制,效率大大的增强,尤其在高并发情况下越发的明显,几个线程即可并发支持上万并发连接,使用尽量少的线程除了减少内存开支还可减少频繁的线程切换的开销。Fikker软件的Linux版本全面支持epoll事件机制,支持从连接建立到连接结束,从域名解析开始到结束的全非阻塞网络设计。
5、提高带宽,加速页面传输:利用带宽加速方式常用是CDN,通过CDN运营商的网络将页面分发出去,用户访问时可就从最近的节点获取,达到加速目的。但这里面有一个前提,就是需要页面是静态的,或动态页面首先需要被生成出来,然后才能利用 CDN 的高速网络传输出去,从这个角度理解,CDN 与 缓存加速具有很强的互补性,即利用缓存技术加快页面生成,利用CDN加快传输,缺一不可。
希望对你有事帮助。
0条评论