也学人家来一次标题党,其实就是如何使用memcached,对不起,我使用的是中英文混合翻译法。这里讨论的问题不是针对memcached,实际上是通用的缓存策略。
前两天,公司技术部群里,大家针对如何使用cache服务器进行了一次热烈的讨论。事情起因是因为对一组cache服务器的维护导致了前台应用的报警。大家讨论很热烈,经过多次发散和收敛,大致的观点有几种:
*cache应该是可有可无的,cache的存在只是为了提高应用的性能的
*cache有时候相当重要,必要的时候,我们需要为cache做mirror copy,fail over,互相同步保证一致性等等,来提高其可用性,而且还有产品规划了上述功能
*有时候应该对cache做warm up,在cache服务器起来的时候,应该做一些数据的初始化,前提当然是实现通过统计能识别出哪些数据是热点,需要warm up的
*在有的应用场景,cache非常重要,比如说数据库复杂sql的结果缓存,这时候实际上cache挂掉的时候,后端的数据库是顶不住的
*有的观点比较实在,强化我们的cache客户端,做更多的容错策略,来保证可用性
*领导的意见很简单,重视这个问题,制定使用的指导方针,推广下去
从上面的讨论来看,很多问题其实都很有代表性。以下是我的一些看法:
*正如大师(公司里的一大牛)说的,首先要明确这个“神”:
一是应用要在cache失效的时候能正常工作(至少功能正常,不能挂掉,最多性能稍差),
二是cache不要存在单点,或者说单点的失败不会导致整个应用失败。
大师的观点非常精炼,完全可以作为cache使用的指导方针列出来,没什么好评论的。
*如何提高cache服务的可用性?
这个争论的很多。有的说要复制、要一致性保证,服务器要2N的策略,我觉得这是盲目的夸大了cache的重要性,在目前阶段,cache不应该成为系统的关键点,只是为了提高性能的一个手段而已。
还有一种改进策略,2N太浪费,而且也不是能绝对保证可用性,可以使用N+n(n< 很明显,从措辞上来看,我就是赞同第二中观点的。 *领导就是领导 领导看问题的角度就是不一样,讨论这么多,还是要落到实处,明显站的高一点,这是很需要学习的一种思维方式。 #end