2009-01-28 56 views
0

我正在构建一个包含多个服务器的应用程序。 (4台服务器,其中每一个有一个数据库和一个网络服务器。1主数据库和3个从站+一个负载平衡器)与多个服务器缓存

有几个方法来启用高速缓存。现在它非常简单而且效率不高。 所有缓存都在所有服务器之间的NFS分区共享上完成。 NFS是架构中的瓶颈。

  1. 我有几个想法实现 缓存。它可以在服务器 水平(本地文件系统)上进行,但 问题是无效缓存 文件时,内容已经全部服务器上 更新:它可以是 由具有少量缓存 一辈子做(不有效,因为 缓存将刷新越快,它 应该是大部分时间)
  2. 它也可以通过短信 系统正(XMPP例如),其中每个 服务器相互沟通来完成。 负责 缓存失效的服务器发送一个 请求给所有其他人,让他们知道 缓存已被 无效。延迟大概是 更大(需要更多时间才能让大家知道 缓存已被无效),但我的应用程序 不需要原子缓存 无效。
  3. 第三种方法是使用云系统来存储缓存(如 CouchDB),但我不知道这个性能为 。它是否比使用SQL数据库快 ?

我打算使用Zend框架,但我不认为这是真正相关的(除了一些包装在其他框架可能存在处理XMPP,CouchDB的)

要求:持久高速缓存(如果一台服务器重新启动后,缓存应该不会输给避免关闭服务器同时重新创建缓存)

回答

1

我想我找到了一个比较好的解决方案。

我使用Zend_Cache在本地存储每个缓存文件。 我已经创建了一个基于nanoserver的小型守护进程,它也可以在本地管理缓存文件。 当一台服务器在本地创建/修改/删除缓存文件时,它会通过守护程序向所有服务器发送相同的操作,该守护程序执行相同的操作。

这意味着我有本地缓存​​文件和远程操作在同一时间。 可能不完美,但应该现在工作。 CouchDB速度太慢,NFS不够可靠。

5

http://www.danga.com/memcached/

Memcached的覆盖了大部分的你铺陈要求 - 基于消息的读取,提交和无效。高可用性和高速度,但很小的原子可靠性(牺牲性能)。

(另外,memcached的权力的东西,如YouTube,维基百科,Facebook的,所以我认为它可以相当完善的,随着时间,资金和人才机构要认真评估许多分布式缓存选项与memcached的解决!)

编辑(回应评论) 缓存的想法是,它比你的后备存储是比较短暂的。如果您需要长期保存缓存数据,我建议您考虑(a)对数据层进行非规范化以获得更高性能,或者(b)添加一个中间层数据库服务器,以直接密钥的形式存储高容量数据,价值对表或者其他非常接近的东西。

+0

事实上,我们的缓存基地将相当大(几个演出)。我们已经在使用memcached,但所有时间都使用了值(来自user_id的用户名,...)。 我正在寻找一个缓存系统,在重新启动后会在那里。否则它会在重新启动时终止数据库。 – stunti 2009-01-28 02:59:40

1

为了保护memcached作为缓存存储,如果您希望高性能且服务器重新引导的影响很小,为什么不只有4个memcached服务器?还是8?每个“重新启动”对数据库服务器的影响相应较小。