caching(memcache / redis)和多个服务器 – 最佳策略

我们正在考虑在我们的应用程序( Symfony2 )中使用caching(基于memcacheredis的)的最佳策略。 它将被部署在多个(至今为止3个)具有负载平衡的单独机器上,并且被分开复制数据库+一个公共共享存储器。 还有第四个服务器,主要用于crons和发送群发邮件。 请注意,高速caching将不仅经常使用,而且由于频繁的数据更改而被更新。

到目前为止,我们有三次尝试:

  1. 我们在第四台机器上放置单个caching并在整个域中共享。 坏的一面是,当这台机器出现故障时,一切都会失败。

  2. 我们在多台机器上放置不同的caching,每台caching都有自己的caching。 缺点是我们必须保留更多的计算能力来完成冗余任务。

  3. 一台机器重buildcaching,然后将其传播到不同的机器(与第一种情况相同)。

什么是处理这个最好的select?

如果我读取的是已发布的信息, memcache通过一个名为repcached的守护进程支持repcached多个服务器的数据复制。 我必须添加我从来没有使用过的memcache。

我用过redis ,我知道它支持主从设置。

在这两种情况下,您都可能想要在所有机器上安装守护进程,并以主从方式复制数据。 然后,您可以调整刷新延迟来为您的设置提供一致的副本。

原因包括:

  • 不需要设置专门的复制机制,你的守护进程将会处理这个任务
  • 如果任何一台机器出现故障,设备将继续正常工作,其他机器将失去与故障机器的连接并共享负载。 然后,您可以暂时切换其余三个节点中的任何一个

在应用程序方面,您可能希望连接到守护进程的单个实例(通常是主节点),并使从节点以懒惰的方式复制数据。

这将允许扯下最佳的性能,因为caching总是可以直接访问热数据。 这种设置也将保持一个体面的可用性(允许X时间的“错过的数据”由于失败,在那里你可以configurationX,只要你喜欢)。 您可能还需要对cachingdns项进行负载平衡,以便您的应用程序实例始终能够find可用的caching。

如果您selectredis ,请确保同时启用数据持久性模式(RDB和AOF)。