代码之家  ›  专栏  ›  技术社区  ›  Sanjay Uttam

memcached与带有粘性会话的硬件负载平衡器

  •  3
  • Sanjay Uttam  · 技术社区  · 15 年前

    所有的, 我一直在研究何时(以及何时)使用memcached。我熟悉分布式缓存的核心目标。如果您有一些服务器,使用memcacached/类似的方法对我来说是有意义的……因为它可以为您提供中央虚拟存储库来获取缓存的数据。

    这就是说,如果您有一个硬件负载均衡器(比如f5的bigip),可以执行粘性会话,那么拥有分布式缓存是否更为有利呢?在本例中,似乎您要做的唯一一件事就是确保不会将Web服务器的RAM用于缓存。在一个已经有了基于硬件的负载均衡器来利用粘性会话的环境中,利用memcached还有其他好处吗?

    据我所知,进行粘性会话在性能上不需要花费太多。显然,我可能错了。

    3 回复  |  直到 15 年前
        1
  •  3
  •   Rohan Singh    15 年前

    我们有硬件负载均衡器和memcached。它们有不同的用途,memcached实际上与粘性会话没有太多关系。

    这是非常高级的,但是您可以这样想:负载平衡允许您将对CPU和其他资源的请求分散到一堆服务器上。但是,memcached使它成为您甚至不需要这些资源的第一位。

    例如,假设您有一个搜索页面,并决定缓存搜索结果。假设您有20台服务器。当一个搜索请求出现时,它将被路由到一个服务器,我们可以称之为服务器A。该服务器将进行搜索,然后将结果缓存到memcached中。

    现在,如果相同的搜索请求来自不同的会话或用户,它很可能被路由到不同的服务器,服务器B。但是服务器B将能够从服务器A放置的memcached中检索缓存的结果,因此它将不必实际执行搜索。

    Caveat: 如果您正在使用memcached进行缓存,这将不适用。 只有 特定于会话并在会话之间发生变化的内容,例如唯一的登录令牌。对于这些事情,如果您有粘性会话,那么您最好只在服务器上缓存具有特定会话的缓存。然而,大多数值得缓存的东西被更广泛地访问。

        2
  •  3
  •   Yiftach    15 年前

    从我开发高级负载均衡器设备的长期经验来看,cookie粘性实际上会破坏您的负载平衡,因为平衡只在每个会话的第一个请求上进行,从那时起,所有用户请求都将转到同一个服务器。这就造成了一个不平衡的环境。

    在memcached中保存会话是实现这一点的最佳解决方案,因为每个web/app服务器都可以访问共享memcached以获取用户状态,并且负载平衡是基于每个请求而不是每个会话来完成的。

        3
  •  2
  •   Mark    15 年前

    但是,启用粘性会话可能会降低负载平衡的效率。我们在生产站点上看到了这一点,其中一个服务器(只是偶然)会有很多低活动会话,而另一个服务器会有很多高活动会话。会话平衡,但不一定是负载或流量。

    这不是一个完整的答案,但这是一个重要的考虑因素。