摘要:
consistent hashing算法早在1997年就在论文Consistent hashing and random trees中被提出,目前在cache系统中应用越来越广泛;1基本场景比如你有N个cache服务器(后面简称cache),那么如何将一个对象object映射到N个cache上呢,你很可能会采用类似下面的通用方法计算object的hash值,然后均匀的映射到到N个cache;hash(object)%N一切都运行正常,再考虑如下的两种情况;1一个cache服务器m down掉了(在实际应用中必须要考虑这种情况),这样所有映射到cache m的对象都会失效,怎么办,需要把cach 阅读全文
摘要:
第一步:物理分离应用数据库网站运营的最开始阶段,在每天高峰期的时候总是会出现宕机现象并且经常会有数据库和网站应用挣抢硬件资源的状况出现,这种情况下,最简单的方案就是把应用和数据库分开部署到不同机器上,以提高各自能够占有的资源。(此方案是网站建设最初阶段)第二步:页面缓存和静态化随着网站访问量的迅猛攀升,系统的响应会开始变慢,主要原因是因为访问数据库的连接增多,数据库服务器的硬件配置又决定了只能提供一定数量的连接。由于网站里的很多内容是很少更新的。于是可以把这些页面缓存起来或者静态化,减少对数据库的访问。这一步对技术上有所要求:页面缓存技术,模板技术。页面缓存提议Squid等几种方案,静态化可通 阅读全文
摘要:
一、缓存穿透我们在项目中使用缓存通常都是APP先检查缓存中是否存在,如果存在直接返回缓存内容,如果不存在就直接查询数据库然后再缓存查询结果返回。这个时候如果我们查询的某一个数据在缓存中一直不存在,就会造成每一次请求都查询DB,这样缓存就失去了意义,在流量大时,可能DB就挂掉了。这个问题其实经常遇到,只是没有引起足够的重视,在我想来,如果碰到这样的问题可以在封装的缓存SET和GET部分增加个步骤,如果查询一个KEY不存在,就已这个KEY为前缀设定一个标识KEY;以后再查询该KEY的时候,先查询标识KEY,如果标识KEY存在,就返回一个协定好的非FALSH或者NULL值,然后APP做相应的处理,这 阅读全文