负载平衡(6) – 如何选择Cache的对象

这次选择了memcache对那些频繁使用的项目作缓存处理。

不过哪些项目需要放到memcache里面呢。如果把所有的信息都作cache,那占用的硬盘就太大了,想来速度也会大打折扣。

我的思路是这样的,首先要通过OpenSocial容器的API,才能得到的信息(例如用户的Avantar,nickname),肯定是要Cache的。因为这种Rest API,实在是代价太大。而且现在OpenSocial的东家也有自己的压力,在你的App出来前,他要先帮你测一下,不要几十万一上线,先把它的服务器搞挂了。

其次,就是用户最经常逗留的页面,比如Mypage。这是进入各个功能区的入口,通常访问也是最大,对上面要查询数据库,或者要复杂计算的项目,要想办法缓存下来。不过把用户的所有信息都保存下来也是不现实的。对于那些需要join,leftjoin的项目,要么考虑用Cache,要么就是一个Batch定时去算。

最后,是那些页面本身就复杂,检索内容比较多的,载入比较慢的。也要考虑把一些内容作缓存处理。除了memocache,也可以用smarty的cache把整个页面按照参数不同分别做整个HTML的Cache。

当然,有些时候是也要从整体上去改善。比如确实DB是瓶颈的,那么Mysql的query cache,Mysql的Replication(用一个DB专门处理更新,其他都是检索)是一些好的方法。另外,检索项目的memocache,显示页面的smarty cache,也是解决之策。静态资源用Nginx快速响应,动态资源用Load Balance下的多个Apache Server也是可以的。