用户在大型(高流量)应用程序中的状态

时间:2017-02-21 06:15:10

标签: session reverse-proxy session-state horizontal-scaling

假设 -

  1. 反向代理后面有4台服务器作为负载均衡器
  2. 负载均衡器纯粹是负载均衡,并根据当前负载向4台服务器中的任何一台发送请求
  3. 用户需要通过身份验证才能访问此应用程序,并且某些空间应该保留所有用户的状态,因为反向代理只是负载平衡
  4. 应用程序需要扩展到超过4台服务器,比如4000台服务器。

  5. 问题 -

    1. 在一个拥有所有用户状态的大型多服务器系统中 - 负载均衡器,每个服务器,单独的服务器?
    2. 是否所有用户的状态都保存在所有服务器上,以便负载均衡器可以向任何服务器发送请求?这如何扩展到1亿用户?

2 个答案:

答案 0 :(得分:0)

您可以使用粘性会话。它使负载均衡器能够将用户的会话绑定到特定实例。这可确保在会话期间来自用户的所有请求都发送到同一实例。阅读Sticky and NON-Sticky sessions

另外,假设实例因某种原因而被杀死,为了维持状态,身份验证令牌和其他信息也可以保存在单独的redis缓存中,查询速度要快得多。阅读Session Management in microservices

答案 1 :(得分:0)

  1. 在无状态多服务器系统中,单独的服务器(身份验证服务器)或单独的服务器群集(身份验证API)保存所有用户的状态。如果它是一个大型应用程序的单一身份验证服务器,您可以预期它的RAM可以在100英寸的范围内,甚至更多。

  2. 不,所有用户的状态通常不会在所有应用服务器上复制,这将浪费大量资源。身份验证服务器(或服务器群集)可以充当负载均衡器本身,也可以将所有请求转发给单独的负载均衡器 - 对于无状态应用程序为true

  3. 在有状态应用程序中,各个服务器通过粘性会话保持用户状态。

    如果可能,请尝试保持应用程序无状态。无状态应用程序将具有更好的性能,并且比有状态的应用程序更容易扩展!