Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29307404
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: 系统运维

2009-05-27 09:29:52

很多人都在问,想某某网站这样高访问量的网站,非生成静态页面,能承受这么大的访问量吗?他是怎么做到的?!其实在这里面,缓存扮演着很重要的角色.
    为什么需要缓存?缓存的性能??
    缓 存的最根本的目的是为了提高网站性能,减轻频繁访问数据而給数据库带来的压力.再进一步,合理的缓存了某种数据形式,还会减轻程序运算时,对CPU带来的 压力.首先,我们要知道一个最基本的效率规则,操作内存中的数据比操作存放在硬盘上的数据是要快N个数量级的.操作简单的文本结构的数据比操作数据库中的 数据快N个数量级.
    例如:每次用户访问网站,都必须从数据库读取网站的标题,每读一次需要15毫秒的时间,如果有100个用户(先不考虑 同一时间访问),每小时访问10次,那么就需要读取数据库1000次,需要时间15000毫秒.看看,这个对数据库的压力是很恐怖的.这个时候,就需要用 缓存来解决这个问题.
    目前缓存的做法分为两种模式:
    第一种模式是内存缓存,缓存数据存放在服务器的内存空间中,这种模式的效率是最高的.这里要注意的是:每一个服务器的资源都是有限的,盲目的把所有数据都加在到内存中,将可能会导致服务器资源占用过多,而造成Web服务失败.
    第 二种模式就是文件缓存,缓存数据存放在服务器的硬盘空间中.存放格式有很多种类,如:文本格式,XML格式,二进制格式等等.这里要注意的是,服务器 I/O的处理能力有限,当一次性读取过大数据时(>1M),它并没有想象中那么的高效.这个时候就需要你有一个合理的文件结构来解决了.但这已经不 在我们本次要讲叙的内容范围内了.
    缓存的数据形式:
    知道了缓存的模式,那么应该把怎样的数据形式进行缓存,也是很重要 的.缓存合适的数据形式,一方面减轻了数据库的压力,另一方面,也可以让CPU少跑几圈.至于应该缓存什么数据形式合适,这个还是要看你的实际应用场合来 决定了.需要从多方面去考虑了,例如整个网站中被调用的次数,调用数据页面被访问的次数,CPU执行某个操作的效率等等
    例如:产品分类数 据,是应该缓存从数据库读取出来的数组呢,还是缓存从数据库读取之后由程序生成之后的目录树的HTML数据呢?这个时候,你就要看回你网站显示目录树的地 方时候足够多,如果超过5地方,而且这5个地方都是在经常被访问到的页面(如首页,产品列表页等),那么缓存生成后的HTML数据,就比缓存产品分类的纯 数组显得合适了.如果显示的地方只有1到2个,而其他地方需要显示产品分类,且显示形式不止一种,再且用户也很少会浏览到那些页面,那么不缓存生成后的 HTMl数据,直接缓存产品分类数组,就会比较合适了.
   缓存的数据内容:
   用什么缓存模式缓存什么数据是需要給自己网站制定出一套机制,让程序按照访问负荷自由的去选择的.这样才能最大的利用缓存来提高网站的性能,达到较高的负 荷能力.这个我们分两种情况来叙述,第一种是公用的数据,被N多个页面调用.第二种是个体的数据,只被一个页面所调用.

   第一种、公用的数据:
   公用的数据,一般是页面的标题,头部,广告代码等等..
   对于这种数据,我们一般都是将他放在内存中缓存.原因很简单,因为他被调用的频度非常高,放在内存中减轻了对服务器I/O的负荷.

   第二种、个体的数据
   个体的数据,一般是整个页面的HTML数据.例如缓存整个首页,整个内容页等等..
   对于这种数据,需要看整个个体页面被访问的次数..例如,有1000个人/秒访问,那么应该考虑把它缓存到内存中,如果有500个人访问,那么应该考虑把它缓存成文件中.小于200个人访问的时候,不缓存.
   那么,这里你就需要为每个页面建立一个访问计数了,当达到某个量级的时候,启用某种缓存模式.而至于整个量级这么定义,就要按照服务器本身的性能,网站程序的执行效率来自行规划了.

   缓存数据的时长
   好了,现在已经把合适的数据进行缓存了,但是我们缓存的数据不是一成不变的,它会随着访问者的操作而不断的更新变化.我们需要设定一个时间来告诉我们的网站程序,缓存已经过期了,需要对新的数据进行缓存.下面,我们对上面说阐述的两种不同的数据进行说明:
   第一种、公用的数据
   公用的数据,一般这种数据的更新不会很频繁,例如网站标题这些都是几百年不改一下的..那么这些缓存的更新事件,可以在用户更新该数据的时候,才更新,缓 存的有效时间是永久的.再如,缓存了会员的积分排名榜单,那么你可以隔5-10分钟更新,如果访问量太高,数据量多,那么还可以更加长(1-2个小时)不 等.
   第二种、个体的数据
   个体数据的页面,就要看情况了,如果是首页,可能一天只是更换一次,那么他的缓存有效是24小时.再如:一个新闻内容页,可能他头2个小时内的访问量很 大,那么他被前面的缓存规则缓存放到了内存中...可是后面2个钟头,他的访问量很低,那么就应该把这个页面缓存释放了.
  
  好了.关于网站的缓存机制,说到这里也差不多了,更多的经验还要各位好好积累,缓存没有一个标准,只有看是否能合适这个网站系统的需求.而且需要在网站的运营中不断的调整,以满足更高的需求.
  以上所叙为本人的经验,其中难免有些不对的地方,还请各位前辈多多指教了.
阅读(837) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~