memcache
我们正在考虑在我们的应用程序中使用缓存(或基于缓存)的最佳策略redis
(Symfony2
)。它将部署在多台(目前为 3 台)具有负载平衡和独立复制数据库 + 一个公共共享存储的独立机器上。还有第四台服务器,主要用于 cron 和发送群发邮件。请注意,缓存不仅会频繁使用,而且还会由于频繁的数据更改而更新。
到目前为止,我们已经进行了三次尝试:
我们在第四台机器上放置单个缓存,并在域内共享它。不好的一面是,当这台机器发生故障时,一切都会失败。
我们在多台机器上放置单独的缓存,每台机器都有自己的缓存。缺点是我们必须保留更多的计算能力来执行冗余任务。
一台机器重建缓存,然后将其传播到单独的机器(缺点与第一种情况相同)。
处理此问题的最佳选择是什么?
答案1
如果我没看错,发布的信息显示,memcache
它支持通过名为 的守护进程在多个服务器之间进行数据复制repcached
。不过我必须补充一下,我从未使用过 memcache。
我已经使用过redis
,并且我知道它支持主从设置。
在这两种情况下,您可能希望在所有机器上安装守护程序,并以主从方式复制数据。然后,您可以调整刷新延迟,以便为您的设置提供一致的副本。
原因包括:
- 无需设置专用的复制机制,你的守护进程将处理该任务
- 如果任何一台机器发生故障,该设置将继续正常工作,其他机器将只是失去与发生故障的机器的连接并分担负载。然后,您可以暂时将剩余的三个节点中的任何一个切换为主节点
在应用程序端,您可能希望连接到守护进程的单个实例以进行读写(通常是主实例),并让从属进程以惰性方式复制数据。
这样可以实现最佳性能,因为缓存始终可以直接访问热数据。此设置还可以保持良好的可用性(允许因故障而“丢失数据”的 X 时间,您可以根据需要配置 X)。您可能还希望对缓存 DNS 条目进行负载平衡,以便您的应用程序实例始终可以找到可用的缓存。
如果选择redis
,请确保启用两种数据持久模式(RDB 和 AOF)。