我正在构建一个涉及多个服务器的应用程序。 (4台服务器,每台服务器都有一个数据库和一个网络服务器.1个主数据库和3个从机+一个负载均衡器)
有几种方法可以启用缓存。现在它很简单,效率也不高。 所有缓存都在所有服务器之间的NFS分区共享上完成。 NFS是架构中的瓶颈。
我计划使用Zend Framework,但我认为它并不真正相关(除了某些包可能存在于其他框架中以处理XMPP,CouchDB)
要求:持久缓存(如果服务器重新启动,则不应丢失缓存以避免在重新创建缓存时关闭服务器)
答案 0 :(得分:5)
http://www.danga.com/memcached/
Memcached涵盖了您列出的大多数要求 - 基于消息的读取,提交和失效。高可用性和高速度,但原子可靠性极低(牺牲了性能)。
(另外,memcached支持像YouTube,维基百科,Facebook这样的东西,所以我认为有足够的时间,金钱和才能认真评估许多分布式缓存选项的组织可以用memcached来解决这个问题!)
编辑(回复评论) 缓存的想法是它与后备存储相比是相对短暂的。如果您需要长期保留缓存数据,我建议您查看(a)对数据层进行非规范化以获得更高性能,或者(b)添加一个中间层数据库服务器,以直接密钥存储高容量数据 - 价值对表格,或与此非常接近的东西。
答案 1 :(得分:1)
我认为我找到了一个比较好的解决方案。
我使用Zend_Cache在本地存储每个缓存文件。 我已经创建了一个基于nanoserver的小守护进程,它也在本地管理缓存文件。 当一台服务器在本地创建/修改/删除缓存文件时,它会通过执行相同操作的守护程序向所有服务器发送相同的操作。
这意味着我同时拥有本地缓存文件和远程操作。 可能不完美,但现在应该工作。 CouchDB太慢了,NFS也不够可靠。
答案 2 :(得分:1)
为了保护memcached作为缓存存储,如果你想要高性能和服务器重启的低影响,为什么不只有4个memcached服务器?还是8?每次“重启”对数据库服务器的影响都会相应减少。