0

假设 -

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


问题 -

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

2 回答 2

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

  2. 不,所有用户的状态通常不会复制到所有应用服务器上,这将是一种巨大的资源浪费。身份验证服务器(或服务器集群)本身可以充当负载均衡器,或者将所有请求转发到单独的负载均衡器——对于无状态应用程序来说是这样

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

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

于 2017-02-26T00:59:26.693 回答
0

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

也假设实例由于某种原因被杀死,为了保持状态,身份验证令牌和其他信息也可以保存在单独的redis缓存中,这样查询起来要快得多。阅读微服务中的会话管理

于 2017-02-25T12:22:12.823 回答