我也要谈谈大型网站架构之系列(3)——死了都要说的缓存

11/25/2015来源:ASP.NET技巧人气:1367

 

  说到缓存,我想大家跟我一样都很兴奋,当我们遭遇网站性能瓶颈的时候,缓存是一剂强心针,也是一粒紧急妈富隆,从而在优化网站

性能方面冠上了第一定律的帽子,我们前年在做淘应用的时候,就遭遇了性能瓶颈,短时间内采用缓存紧急优化,给我们大优化之前争取了

宝贵的时间。

 

一:缓存的种类

     要说缓存有多少种,太多了,比如浏览器缓存,文件缓存,片段缓存,数据库缓存等等,合理利用这些缓存则能大幅度的提高系统性能,

利用不好反而会偷鸡不成蚀把米,给服务器造成巨大的压力,所以这里就存在一个缓存的使用原则的问题。

 

二:合理的使用缓存

1.  读写小于10:1的情况下,不适合用缓存,我们用缓存的目的就是想分摊下数据库的压力以及利用内存来提速性能,如果读写差不多,或者

     压根就没读过,这样的死数据就会造成内存资源的浪费。

2.  既然是缓存,就注定了它的资源是有限的,宝贵的,也就注定了我们必须合理利用它的内存空间,也就被迫的让我们清楚的认识到热点数据,

   不易修改的应该放在缓存,反之不宜放。

3.  大公司在缓存方面做的好的地方就是在一个“控”字上,他们会为缓存专门做一套“缓存系统”,当系统预加载的时候,同时也充当内存数据库

     使用,将这些元数据加载到缓存系统中,比如“县市区”,“分类信息”等等作为预热数据。

 

三:分布式缓存

   一般情况下,会有两种形式,第一种就是主从复制的模式,第二种就是分片的模式。

1:主从复制模式

  这种模式曾今在项目中也用过,就是一份内存,多处备份,当其中某一个缓存内容中的数据有变化时,会及时通知其他机器进行缓存更新

或清除,这种模式的缺点在于比较容易受制于单台机器的内存限制,优点在于用心跳机制及时用另一台缓存机器顶替,那个时候我们使用120G

的大内存,得益于项目业务规模的限制,否则当机器内存爆满的时候就比较尴尬了,所以做大型网站还是谨慎使用吧,毕竟这个也是我们曾今做

了一些为了提升性能的尝试。

 

2:分片的模式

    这种模式在大型网站中还是被大量使用的,它的特点就是可以把一大坨数据通过一定的算法和配置分摊到集群中的若干台机器上,如果集群中

的某一台机器挂了,没关系,只会影响到该台机器中的数据,对数据库不会造成很大的影响。一个典型的应用就是memcache,memcache是一

个非常简单,实用,高效的分布式缓存架构,其实memcache最值得一提的就是“路由算法的一致性hash”技术使得我们的memcache集群可以

自由伸缩,不过现在已经有很多的nosql产品,比如redis,couchdb,mongodb等等,让我们在这个世界上有了更多的选择吧。

 

最近看到园子里面有很多抱怨声,没关系,如果觉得自己屈才了,欢迎来携程试一试,只有你达不到的能力,没有给不起你的薪资。