这种负载平衡/水平缩放scheme是否天真?

我提供了解决以下问题的方法,并要求您的networking和服务器pipe理员专业人员validation它或在其中打洞。 我感兴趣的任何明显的攻击媒介或可扩展性问题,你可能会看到。 谢谢!

要求:

  • HTTPS支持,由每个应用程序服务器独立处理
  • 接近线性的水平可伸缩性
  • 分布在不同服务器上的带宽(响应数据不全都通过LB或代理服务器返回)
  • 像应用程序服务器和负载平衡器的故障转移
  • 客户端 – 服务器关系
  • Linux友好(解决scheme不是封闭源代码)
  • 引导友好! (即初始成本低)

scheme:

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

冗余负载平衡器(LB *,通过类似DNS RR的方式,或者仅仅是故障切换):它们唯一的目的是为客户提供一些应用服务器实例的URI,然后客户端永远使用它来请求它。 最初的分配将是随机的或循环的。

应用程序服务器实例(S *)各自独立处理来自客户端的请求。

无状态架构可以让个人服务器停机。 如果客户端分配的服务器发生故障,客户端将从负载均衡器请求新的服务器。

新的应用程序服务器可以启动,向负载平衡器注册,并可以很快分配给客户端。 所有S *都将有一个子域DNS条目来共享通配符证书。

一个天真的实现可以完全在一个零冗余的服务器上完成,并根据需要委托职责进行扩展。

即时关注

防火墙和DDoS防护必须在每台服务器上进行pipe理,而不是像使用负载均衡反向代理那样进行集中pipe理。 集中configurationpipe理就像我想到的那样。

这种scheme不像Anycast DNS那样利用地理位置或服务器响应时间。 这是一个有意识的权衡服务器的亲和力的可能性,并可能在稍后被嘲笑。

在高水平上看起来不错,但是这个计划有一些差距。

  • 解释客户端如何知道如果服务器出现故障就会退后。 (我认为最大的问题)
  • 解释你的负载平衡器如何提供一个URI。 这些只是networking服务器?
  • 你如何处理有状态的数据,如会话cookie可能会传递来自以前服务器的隐式数据。 否则,你使用普通的cookies?
  • 你如何注册负载平衡器?
  • 存储如何在这个devise中工作? 这个规模如何?
  • 负载平衡器如何在这个scheme中实际平衡负载? 由于它提供的只是引用,因此无法知道会话在服务器端何时结束。
  • 负载平衡器如何知道服务器是否closures?