这种负载平衡/水平扩展方案是否简单?

这种负载平衡/水平扩展方案是否简单?

我针对以下问题提出了自己的解决方案,并请网络和服务器管理专业人员验证它或找出其中的漏洞。我对您可能看到的任何明显的攻击媒介或可扩展性问题都很感兴趣。谢谢!

要求:

  • HTTPS 支持,由每个应用服务器独立处理
  • 近线性水平可扩展性
  • 带宽分布在服务器上(响应数据并非全部通过 LB 或代理返回)
  • 类似于应用程序服务器和负载平衡器的故障转移
  • 客户端与服务器之间的亲和性
  • Linux 友好(解决方案非闭源)
  • 引导友好!(即初始成本低)

方案:

            PUBLIC NETWORK
+-----+------+--------+-----+------->
      |      |        |     |
      v      v        v     v
    +---+  +---+     +--+  +--+
    |LB1|  |LB2| ... |S1|  |S2| ...
    +---+  +---+     +--+  +--+

冗余负载平衡器(LB*,通过类似 DNS RR 的方式,或者只是故障转移):它们的唯一目的是向客户端提供某个应用服务器实例的 URI,然后客户端将永久使用该 URI 来处理其请求。最初,分配将是随机的或循环的。

每个应用服务器实例(S*)都独立地直接处理来自客户端的请求。

无状态架构允许单个服务器停机。如果客户端指定的服务器发生故障,客户端会向负载平衡器请求新的服务器。

新的应用服务器可以快速启动、注册到负载均衡器并分配给客户端。所有 S* 都会有一个子域 DNS 条目来共享通配符证书。

简单的实现可以完全在一台没有冗余的服务器上完成,并根据需要委托扩展职责。

当前关注的问题

防火墙和 DDoS 保护必须在每台服务器上进行管理,而不是像负载平衡反向代理那样集中管理。集中配置管理是我目前为止想到的。

此方案不会像 Anycast DNS 那样利用地理位置或服务器响应时间。这是为提高服务器亲和性而做出的有意识的权衡,并且可能会在以后强行加入。

答案1

从高层次来看,这个方案似乎是合理的,但仍然存在一些缺陷。

  • 解释一下如果服务器宕机,客户端如何知道恢复。(我认为这是最大的问题)
  • 解释一下您的负载均衡器如何仅提供 URI。这些只是 Web 服务器吗?
  • 您如何处理状态数据(例如,可能传递来自前一个服务器的隐式数据的会话 cookie)。否则,您使用普通 cookie?
  • 如何向负载均衡器注册?
  • 在这个设计中,存储如何工作?如何扩展?
  • 在这个方案中,负载平衡器如何真正平衡负载?由于它提供的只是引荐,因此它无法知道服务器端的会话何时结束。
  • 负载均衡器如何知道服务器是否宕机?

相关内容