【问题标题】:Load balancing long lived sessions that require server state负载平衡需要服务器状态的长期会话
【发布时间】:2011-07-16 07:51:06
【问题描述】:

假设用户的会话负载平衡到服务器 #8,并且在服务器 #8 上维护了一些状态。用户的下一个动作需要再次路由到服务器#8,因为这是唯一具有他服务器状态的地方。是否有标准解决方案来维护从用户会话到长期会话的服务器编号的映射?似乎将用户会话映射到许多服务器中的特定服务器的问题应该是标准“教科书”解决方案的常见问题,该解决方案具有 CPU 和内存效率。

【问题讨论】:

    标签: http session-state load-balancing


    【解决方案1】:

    一个简单的解决方案是将负载平衡器配置为使用粘性会话。负载均衡器会将用户会话关联到服务器 #8,然后来自同一会话的后续请求将自动转发到同一服务器(服务器 8)。

    【讨论】:

      【解决方案2】:

      最好的解决方案是不要依赖服务器关联 - 它会使您的系统变得脆弱。我不会期待教科书的答案,就像我不会期待教科书般的答案,即如何在浴缸里玩烤面包机或如何用螺丝刀进行脑部手术。

      如果您必须有粘性路由,那么您如何实现它在很大程度上取决于您建议如何处理不可用的服务器 - 您是否对请求进行故障转移?或者只是停止处理将被定向到该服务器的请求?

      我最初认为这是一个非常愚蠢的问题 - 除非您正在编写自己的代理/负载平衡器(在这种情况下您应该已经知道他的答案),否则相关性是什么,但是有可用的代理可以让您实现你自己的导演。

      所以最终归结为会话的哪些特征在 HTTP 请求中可见。由于 IP adderss 可以更改中间流,因此您可以使用的唯一实用特性是会话标识符 - 通常实现为 cookie。

      【讨论】:

      • 考虑 10 个后端服务器。容错是通过将这些服务器中的每一个复制 3 次来实现的。假设你有一个扑克服务。然后你必须维护服务器状态。由于您不能信任具有状态的客户端,因此必须在某个服务器上维护每个扑克手。因此,依赖服务器维护状态的需求毕竟并不罕见。
      • 否 - 会话数据没有顶部绑定到集群中的特定节点。
      • 那么你将如何维护每手牌的状态?
      • 在会话数据中。还有哪里?
      • 我不明白你在说什么。如果我试图阻止客户端操纵手,那么完整的数据怎么会不在服务器上。
      猜你喜欢
      • 1970-01-01
      • 2020-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多