多台服务器如何提高networking请求的吞吐量?

这个问题已经经历了两年多的时间,我从来没有真正放慢脚步,花时间去问,主要是因为我一直在使用云服务,而不是直接pipe理自己的服务器,现在。

公司提到线性/水平缩放是相当普遍的事情,当事情变得有点困难时,他们会在服务器应用程序上投入更多的机器来提高吞吐量。 请求将由所提供的许多机器之一来处理,并对客户做出响应。 在大多数情况下,我所读到的是,请求/连接和关联的数据被转发到应该根据所使用的algorithm处理特定连接/请求的设备。

这在理论上听起来不错,但是没有一个单一的失败/限制点 ? 如果有一个应用程序将所有这些请求(思考REST请求在这里)路由到应该处理它的机器,是不是还有一台机器正在接收和处理每一个请求? 如果你有5台机器,或者20台机器没有关系,如果有一台机器处理每个请求,并把它交给其他机器处理。 这似乎是一个可怕的实现,因为它在增加吞吐量方面没有做任何事情,但这是我读到最多的一个。

我如何总是想到这一点是有一个单一的服务器来处理决定哪个机器应该处理你的请求,你将在启动时发起一个GET请求。 这个请求可以通过关于您应该与之通话的服务器的信息来解决。 每隔5分钟左右,您将向服务器发送另一个GET请求,以查看是否应更改服务器,并始​​终发送GET请求以获取有关任何networking错误的新服务器。 这将确保你永远不会试图与离线服务器进行通信,并且我唯一想要调用它的“切换服务器”请求是询问我们应该与哪个服务器进行通信的请求。 这个切换服务器应该通过保持活动的TCP连接连接到每个单独的服务器,并确保服务器正在运行。 在服务器脱机的情况下,build议客户端使用新的服务器。 这样,即使机器停机,最终用户也不会注意到它。

在这个问题上我读到的信息有两个核心的区别,我怎么会认为它是有效的,这就是“Handoff server”的请求处理的数量,而我的实现只需要最less量的请求,我总是阅读有关请求切换服务器来处理每一个请求。

多台服务器如何提高networking请求的吞吐量?

那么,从根本上说,这是一个可用的资源计算。 给定服务中使用的每个节点都具有有限的CPU时间,RAM和networking带宽。

因此,多台服务器通过提供更多的资源来执行相同的任务来增加吞吐量。 如何分配任务是一个单独的问题 – 但基本原则是,更多的服务器有更多的资源来完成一个给定的工作,所以当我们需要做更多的工作,我们分配所需的资源。

通常会提到水平缩放比例,而不是在我们可以轻松抛出n + 1台机器之前完成的事情 – 即在您当前的硬件无法保留的情况下必须订购全新硬件的日子向上。 这往往导致需要规定一台机器来处理平均负载和峰值负载之间的事情,而这往往导致一些未使用的容量。

不过,我怀疑这部分答案并不是真正的问题。

这在理论上听起来不错,但是没有一个单一的失败/限制点?

最终,是的,总是一个单一的失败点,但是在上下文中的答案是这是一个deviseselect。

你基本上描述的是在你的后台服务器池前的某种负载平衡器或反向代理。 在这种情况下,是的,如果只有一台机器这样做,这是一个单点故障。

“明显”的对应点是:使用更多这样的前端机器来避免单点故障。 这是如何工作取决于:

你也可以把这两种技术结合起来,增加各种工具和方法,以避免SPOF实际上失败,但总的来说,单点故障将不顾名称,因此被认为是最佳实践避免首先将这样的失败点devise到您的devise中。

或者,给出一个更简短的答案:您可以像运行应用程序的服务器那样扩展您的前端/请求路由器/负载平衡器。 如果您担心可用性问题,我认为不要过于笼统地说,您通常会从每个组件的至less一对开始,以避免在应用程序中构build单点故障。

如果负载均衡器集群发生故障,则称其负载平衡器通常是一个具有高可用性的集群,那么通常在另一个站点通过另一组负载平衡器就可以获得冗余。

这就是为什么没有单点故障,因为负载均衡器“互相检查”,并检查节点是否启动了服务请求的“监视探测器”,以便知道节点是否已closures。 因为将专用设备“切换数据包”切换到可用节点要容易得多,因此增加了输出。 因为负载均衡器也可以在HA中交替使用,所以可以获得更高的吞吐量而不会出现单点故障。