最近思考一些网站架构的问题,这两天着重思考了下memcache对于网站架构的作用以及意义。

memcache作为一个很早就出现的网站架构的一环有很重要的历史意义,但随着技术的不断发展,各种不同的中间件在整个系统中的作用也在不断的发生着变化。

myspace曾经作为全世界流量最大的网站,而memcache在myspace的网站架构中起到了至关重要的作用,myspace采用了自行开发的memcache,每台服务器拥有至少64g的内存,全部用来做缓冲,每个服务器缓冲的内容完全相同,每个服务器之间采用类似连锁复制的概念来进行同步,每当一个服务器的cache发生了变化,会从该服务器开始顺序的触发复制更新到所有的cache服务器。

在myspace的架构中,memchache的作用毋庸置疑,没有cahce这一层,只靠sqlserver是无法支撑这么大的流量的,但我并不清楚myspace是在什么阶段引入的cache层,而且在myspace使用的是收费的sqlserver,每台高配的sqlserver需要巨额的授权费,每台8核的服务器,需要支付微软近rmb80万的授权费,这样引入cache层的另一个很重要的作用是减少成本。

现代的数据库服务器都自己带有cache层,同时绝大部分数据库的操作都完全是在内存中完成的,所以数据库的支持能力比起memchache来说,除了多了存储开销以外,就是数据的重新组织,但如果有足够的内存,而经常访问的sql比较固定来说,那么数据库本身的cache层可以部分替代memcache的功效。

无论如何,纯粹做cache的性能是要高于数据库服务器的,这点毋庸置疑,但是要考虑到引入cache层意味着给开发以及部署都带来了新的麻烦,这点是需要有得失权衡的,我思考的建议是,当网站的访问量并不那么大时,不需要引入memcache,直到访问量到达一定的级别,比如数据库服务器如果少于10台,完全没有必要引入memcache,因为此时运营的成本很低,而不考虑cache层无论是开发,部署还是运营都可以减少很大的便利。当访问量进一步增加,此时假设每增加一台数据库可以提供200的并发性能提升,而引入cache层可以提供300的并发提升,此时引入cache层将在性价比上得到体现,当数据库规模比如达到了100台的规模,此时同时维护100台数据库服务器会是一种很大的运营开销,而相对来说cache的运营维护要低很多,所以到不如使用60台cache,40台数据库的架构,如果数据库是收费的,则此时的成本优势则更明显。

综上所述,在网站的访问量规模不大的情况下,尽量不要引入cache层增加网站架构的复杂,带来不必要的运营,开发,测试的麻烦,当访问规模到达一定程度后再考虑使用memcache而提高性价比。