题
我建立一个应用程序与多个服务器的参与。(4台服务器那里的每一个都有一个数据库和一个网络服务器。1个主数据库和3奴隶+一个负载平衡)
有几个办法启用缓存。现在这是相当简单和效率不高。所有的高速缓存在一个NFS分区之间共享所有服务器。NFS的瓶颈所在的建筑。
- 我有几个想法的实施 缓存。它可以做一个服务器 一级(地方文件系统)的但是 问题是无效的缓存 文件的内容时已 更新在所有服务器:它可以 通过具有一个小型高速缓存 生(效率不高,因为 高速缓存,将刷新快它 应该是大部分时间)
- 它也可以通过一个消息 系统(。例如)在每 服务器进行通信。服务器负责的 失效的高速缓冲发送一个 请求的所有其他要让他们 知道,缓存 无效。延迟可能是 更(需要更多的时间用于每个人 要知道,缓存 无效)但是我的申请 不需要原子高速缓存 无效。
- 第三种方法是使用一个云 系统以储存的超高速缓冲存储器(图像 CouchDB)但是我没有想法的 业绩对于这一个。是它 快于使用一个,SQL数据库?
我计划使用Zend框架,但我不认为这是真的相关(除了一些软件包可能存在其他架构来处理。,CouchDB)
要求:持续的高速缓冲存储器(如果服务器重新启动,缓存应该不会失去避免把服务器的同时,重新创建的高速缓存)
解决方案 2
我想我发现了一个较好的解决方案。
我用Zend_Cache储存在本地的每一个缓存文件。我已经创建了一个小小守护进程的基础上nanoserver其管理的缓存文件在当地。当个服务器创建/修改/删除的缓存文件在当地,它送同样的行动对所有服务器的通过程序,其做同样的行动。
这意味着我有地方的缓存文件和远程操作在同一时间。也许不完美,但是应该的工作。CouchDB太缓慢和NFS是不够可靠。
其他提示
http://www.danga.com/memcached/
缓存涵盖的大多数要求你放出消息基于阅读,犯和失效。高可用性和高速度快,但是很少的原子可靠性(牺牲了性能)。
(此外,缓存的权力的事情,如YouTube,Facebook,所以我认为这可以相当确定,组织与的时间、金钱和人才严重的是评估许多分布式缓存的选择解决与缓存!)
编辑(在应对意见) 这个想法的高速缓存是因为它是相对暂时性相比,你的后备存储。如果你需要持续的高速缓存数据的长期,我建议在(a)将数据层,以获得更多的性能,或(b)添加一中间层的数据库服务器存储的大量数据在直键值对表,或一些密切相近似的。
在辩护方的缓存作为一个高速缓冲储存,如果你想高效能低的影响的一个服务器重新启动,为什么不仅有4缓存服务器?或8?每一重新启动'将会有相应的影响较小,数据库服务器。