Caching 我的缓存守护进程应该住在哪里?

Caching 我的缓存守护进程应该住在哪里?,caching,amazon-web-services,redis,memcached,aws-opsworks,Caching,Amazon Web Services,Redis,Memcached,Aws Opsworks,TL;DR-会话存储的简单缓存集群(使用memcache或redis)应该存在于应用程序的服务器(即与nginx和php一起)上,还是存在于其单独的ec2实例(如elasticache或定制的ec2实例)上 我正在使用Amazon OpsWorks设置我的web应用程序的基础设施。我倾向于通过安装在应用层本身的memcache实例来实现会话缓存,而不是将其作为自己的ec2实例。例如: [ Load Balancer ] /

TL;DR-会话存储的简单缓存集群(使用memcache或redis)应该存在于应用程序的服务器(即与nginx和php一起)上,还是存在于其单独的ec2实例(如elasticache或定制的ec2实例)上

我正在使用Amazon OpsWorks设置我的web应用程序的基础设施。我倾向于通过安装在应用层本身的memcache实例来实现会话缓存,而不是将其作为自己的ec2实例。例如:

                 [ Load Balancer ]
                /        |        \
[ App Layer 1 ] – [ App Layer 2 ] – [ App Layer 3 ]  * /w memcache or redis
vs

这里的利与弊是什么?对我来说,后一种解决方案似乎是不必要的,尽管我可以看出一个拥有巨大会话缓存的高流量网站可能需要这种解决方案


我可能不想在我的nginx/php应用服务器堆栈旁边运行redis或elasticache,这有什么原因吗?这是否会使自动缩放或监视性能变得更加困难?

第一种解决方案的两个主要缺点是:

  • 您将被迫进入会话粘性
  • 您正在耦合应用程序和缓存的缩放事件

虽然在您的情况下,这些可能不是问题,但通常我会尽可能避免它们,因为从长远来看,它们会使事情变得复杂。

将缓存放在应用服务器上的主要原因是成本问题。这与不将数据库与web或应用服务器放在同一服务器上的想法相同

如果您有一个小规模的应用程序,您可能会在同一台机器上压缩所有资源,但是如果您能够从任何类型的故障中恢复(和“”),您将丢失数据,或者它将使您的部分用户的服务中断

一旦有了足够的应用服务器,每个服务器的缓存集群成本就会降低

从体系结构的角度来看,当规模和高可用性非常重要时,您应该拥有比少数更复杂的组件更多的小型组件


例如,如果您希望在用户较多的情况下将另一个应用程序服务器添加到您的车队中,则添加服务器会更快,因为您在该服务器上安装的软件组件较少,并且服务器已经可以为以前的用户提供服务,因为他们的会话集中存储。如果要删除应用程序服务器(或丢失应用程序服务器),则该服务器提供服务的用户可以轻松迁移到其他服务器,因为他们的会话/状态存储在缓存群集中。

+1 for ASCII diagramming skillz!谢谢你!我选择了另一个答案,因为它更详细,但这些我们都非常有帮助!Np-只想加上我的2美分;)
                 [ Load Balancer ]
               /         |         \
[ App Layer 1 ]   [ App Layer 2 ]   [ App Layer 3 ]
               \         |         /
                [ Cache Server(s) ]   * ElastiCache or custom ec2 /w memcache or redis