全部, 我一直在研究何时(以及何时没有)使用Memcached。我熟悉分布式缓存的核心目标。如果你有一些服务器,使用Memcacached / similar对我来说很有意义......因为它会为你提供中央虚拟存储库来获取你的缓存数据。
那就是说,如果你有一个硬件负载均衡器(比如F5的BigIP)可以做粘性会话 - 那么分布式缓存是否有利? AFAIK,在这种情况下你似乎唯一要做的就是确保你没有利用你的web服务器RAM来缓存。在您已经拥有利用粘性会话的基于硬件的负载均衡器的环境中,利用memcached还有其他好处吗?
据我所知,进行粘性会话并不会在性能方面花费太多。显然,我可能是错的。
答案 0 :(得分:3)
我们有硬件负载平衡器和memcached。它们用于不同的目的,memcached与粘性会话无关。
这是非常高级的,但您可以这样考虑:负载平衡允许您在一堆服务器上分散CPU和其他资源的请求。但是,memcached使得你甚至不需要那些资源。
例如,假设您有一个搜索页面并决定缓存搜索结果。假设您有20台服务器。当搜索请求进入时,它将被路由到服务器,我们可以将其称为服务器A.此服务器将执行搜索,然后将结果缓存在memcached中。
现在,如果相同的搜索请求来自不同的会话或用户,它可能会被路由到另一台服务器,即服务器B.但是服务器B将能够从服务器A放在那里的memcached中检索缓存的结果,所以它永远不必实际进行搜索。
警告:如果您使用memcached仅缓存 特定于会话的内容并在会话之间进行更改(例如唯一登录),则不适用令牌。对于这些事情,如果你有粘性会话,你也可能只在具有特定会话的服务器上缓存。但是,大多数值得缓存的东西都可以更广泛地访问。
答案 1 :(得分:3)
根据我在开发高级负载平衡器设备方面的长期经验,cookie粘性实际上会导致负载平衡,因为平衡仅在每个会话的第一个请求上完成,从那时起所有用户请求都将转到同一服务器。这会造成不平衡的环境。
在memcached中保存会话是最佳解决方案,因为每个Web / app服务器都可以访问共享的memcached以获取用户状态,并且负载平衡是基于每个请求而不是每个会话完成的。
答案 2 :(得分:2)
但是,启用粘性会话可能会降低负载平衡的有效性。我们在我们的生产站点上看到了这一点,其中一台服务器(只是偶然)有很多低活动会话,而另一台服务器会有很多高活动会话。会话平衡,但不一定是负载或流量。
这不是一个完整的答案,但这是一个需要考虑的重要因素。