使用多个服务器进行缓存

时间:2009-01-28 02:44:58

标签: caching couchdb xmpp

我正在构建一个涉及多个服务器的应用程序。 (4台服务器,每台服务器都有一个数据库和一个网络服务器.1个主数据库和3个从机+一个负载均衡器)

有几种方法可以启用缓存。现在它很简单,效率也不高。 所有缓存都在所有服务器之间的NFS分区共享上完成。 NFS是架构中的瓶颈。

  1. 我有几个想法实现 缓存。它可以在服务器上完成 级别(本地文件系统)但是 问题是使缓存无效 内容已经存档 在所有服务器上更新:它可以 通过拥有一个小缓存完成 一生(因为没有效率 缓存将更快刷新它 应该是大部分时间)
  2. 也可以通过消息传递来完成 sytem(例如XMPP)每个 服务器相互通信。 服务器负责人 缓存失效发送一个 要求所有其他人让他们 知道缓存已经存在 无效。延迟可能是 更大(为每个人腾出更多时间 知道缓存已经存在 无效)但我的申请 不需要原子缓存 无效。
  3. 第三种方法是使用云 用于存储缓存的系统(如 CouchDB)但我不知道 这个表现。是吗 比使用SQL数据库更快?
  4. 我计划使用Zend Framework,但我认为它并不真正相关(除了某些包可能存在于其他框架中以处理XMPP,CouchDB)

    要求:持久缓存(如果服务器重新启动,则不应丢失缓存以避免在重新创建缓存时关闭服务器)

3 个答案:

答案 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?每次“重启”对数据库服务器的影响都会相应减少。