什么是水平缩放?

当我们在计算机科学中讨论“缩放”时,我们指的是一个过程,通过该过程我们向系统添加更多“东西”以允许它处理更多“其他东西”。例如,您可以为笔记本电脑添加更多内存能够一次运行更多程序。这是扩展计算机的一种形式。关键的想法是,您有一项要完成的任务,缺少某些资源会阻止您完成该任务。在我们的笔记本电脑示例中,您缺少的资源是内存。我们可以说你受到缺乏记忆的限制。

我们进一步将缩放分为两大类:垂直缩放和水平缩放。垂直扩展意味着我们将更多资源添加到单个计算机。例如,我们添加更多磁盘空间,更多内存或更多CPU。这些中的每一种都是垂直缩放的形式。

最终,垂直缩放将达到极限。我们的计算机可以支持的内存和CPU数量有限制。它因计算机而异,但限制在那里。最终,如果我们需要进一步扩展,我们需要通过添加更多计算机来扩展。添加更多计算机的过程是水平缩放。

水平缩放的原因_Web

垂直缩放也称为“向上扩展”,而水平缩放称为“向外扩展”。因此,垂直扩展为系统中的单个节点添加更多资源,而水平扩展是向系统添加更多节点的过程。

您可能希望水平扩展系统的原因有很多。我将覆盖其中三个:

  • 处理更多吞吐量。
  • 容错。
  • 需要比单个节点更多的资源。

处理更多吞吐量

有时您需要能够处理比单个节点更多的吞吐量。典型的情况是运行多个Web服务器来处理您的热门网站获得的所有流量。大多数小型网站都可以使用单个Web服务器。随着站点越来越流行,最终单个Web服务器无法处理所有传入请求,并且需要添加更多Web服务器来处理负载。

对于某些用例,可以轻松实现吞吐量的水平扩展。对于其他用例,通过水平扩展来提高吞吐量可能具有挑战性。

有困难的场景和容易出场的场景之间有什么区别?主要区别之一是协调。如果您可以添加不需要了解任何其他节点的新节点,那么添加新节点相对简单,这将允许您处理更多吞吐量。

以我们的Web服务器为例。网站可以成为横向扩展的理想选择。如果每个Web服务器都有一个站点内容的副本(这在许多网站中很常见),那么我们可以在新节点之后添加新节点以处理越来越多的流量。这通常被称为“无共享”架构。每个新的Web服务器都是独立的。他们不互相交谈,也不共享任何共享资源。

当您添加节点之间的协调和通信,或者它们依赖于共享资源时,水平扩展以处理更多吞吐量开始变得更加困难。

容错

看到想要向系统添加更多节点以提供更多容错的人是相对常见的。添加更多节点以更好地应对故障通常被称为“高可用性”或“HA”。

假设我有一个由单个Web服务器提供服务的网站。如果该Web服务器出现故障,我的网站将不再可用。游民。我可以采取的一种方法是添加更多的Web服务器,这样如果一个服务器发生故障,我仍然可以使用其他服 只要每个新节点可以独立于其他节点运行,就可以添加更多节点。如果我的网站是一个简单的静态网站,那么我可以添加更多节点并获得更高的容错能力。但是,要实现这一点,我需要每个Web服务器都是“无状态的”。这允许任何单个节点处理对系统的任何请求。无状态,无共享系统是最容易添加容错的。

即使我的系统不是无状态,无共享系统,仍然可以通过水平扩展来添加容错。分布式数据库通过在多个节点(3个或更多节点)上运行,然后跨这些节点复制数据来提供容错功能。副本的数量,也称为“复制因子”,使我们能够在系统的某些成员(通常称为“集群”)丢失的情况下生存。复制因子越高,我们可以丢失并继续运行的节点越多。为什么?我们需要的数据存在于多个节点上,因此,即使我们丢失了该节点,我们仍然可以在集群中的某个位置访问它。

需要比单个节点更多的资源

在追求垂直扩展策略时,您最终会遇到限制。您将无法添加更多内存,添加更多磁盘,添加更多“内容”。当那一天到来时,您需要找到一种方法来横向扩展应用程序以解决问题。

想象一下批量数据处理系统。每天晚上,它运行并通过一堆文件进行搅拌以创建一些业务输出。随着时间的推移,越来越多的输入文件越来越大。当您生成非常重要的业务输出时,输入量的增加会导致您需要在内存中保留越来越多的数据。

可以添加到执行处理的计算机的内存量存在物理限制。您可以升级到可以容纳更多内存的计算机,但最终,您将无法继续获得更强大的单个节点。您将对可以添加到给定节点的内存量达到物理限制。您将需要添加更多节点,以便您可以继续添加更多内存。假设您的机器最多可以存储64个内存。当您达到该限制时,如果您需要更多内存,则需要开始添加其他节点。你可以增加拥有两台机器,每台机器有64台内存,而不是被困在64台机器的一台机器上。

缩放以处理缺少物理资源听起来像一个相对简单的任务。但是,当您的系统变得足够大以实际需要这种转换时,您可能会发现这是一个痛苦的工程挑战。为什么?我们正在谈论扩展共享资源。大多数在单个节点上运行的应用程序都没有任何方法可以获取内存等共享资源(有状态)并在多台计算机上使用它。根据您的具体问题,可能会有一个框架来帮助您(如Wallaroo)。

以下是重要的内容:如果您认为最终需要水平扩展,因为您需要更多的磁盘,内存或CPU,请提前计划。知道你将如何做到这一点,所以你不会突然发现自己需要在几天内完成它,而你最好的情况是用几周来衡量的。

包起来

水平缩放是一个深刻而复杂的主题。我希望你比开始这篇文章时感受到更多的教育。如果你想探索更多,我会推荐我的2018 Papers We Love San Francisco谈论Pat Helland的“超越分布式交易”。  该演讲涵盖了如何横向扩展有状态应用程序以及我们如何在Wallaroo中实现它们。