【问题标题】:User state in a big (high traffic) application大型(高流量)应用程序中的用户状态
【发布时间】:2017-07-10 15:24:10
【问题描述】:
假设 -
- 有 4 台服务器位于充当负载平衡器的反向代理后面
- 负载均衡器纯粹是负载均衡,根据当前负载向 4 台服务器中的任何一台发送请求
- 用户需要通过身份验证才能访问此应用程序,并且一些空间应该保存所有用户的状态,因为反向代理只是负载平衡
- 应用程序需要扩展到超过 4 台服务器,例如 4000 台服务器。
问题 -
- 在拥有所有用户状态的大型多服务器系统中 - 负载平衡器、每个服务器、单独的服务器?
- 是否所有用户的状态都保存在所有服务器上,以便负载均衡器可以向任何服务器发送请求?这如何扩展到 1 亿用户?
【问题讨论】:
标签:
session
reverse-proxy
session-state
horizontal-scaling
【解决方案2】:
-
在无状态的多服务器系统中,一个单独的服务器(身份验证服务器)或一个单独的服务器集群(身份验证 api)保存所有用户的状态。如果它是用于大型应用程序的单个身份验证服务器,您可以期望它的 RAM 范围为 100 GB,甚至更多。
- 不,所有用户的状态通常不会复制到所有应用服务器上,这将是巨大的资源浪费。身份验证服务器(或服务器集群)本身可以充当负载平衡器或将所有请求转发到单独的负载平衡器 - 对于无状态应用程序是这样。
在有状态应用程序中,各个服务器通过粘性会话保持用户状态。
如果可能,请尽量让您的应用程序保持无状态。无状态应用程序将具有更好的性能,并且比有状态应用程序更容易横向扩展!