87

我听说很多人可以互换使用这两个术语。但是,在我看来,它们之间是有区别的:

可扩展性——软件系统在其当前硬件资源(纵向扩展)或当前和额外硬件资源(横向扩展)上处理更多工作负载而不中断应用程序服务的能力;

弹性——下面的硬件层(通常是云基础设施)增加或缩小该硬件层提供给上面软件层的物理资源量的能力。增加/减少由预先定义的业务规则触发(通常与应用程序的需求相关)。增加/减少在没有物理服务中断的情况下即时发生。

同样,可扩展性是软件架构的一个特征,与服务更高数量的工作负载相关,其中弹性是下面物理层的特征,完全与硬件预算优化有关。

我对这两个非功能性架构特征有区别吗?有人可以举出具体的例子,以便我们可以在这两个术语之间划出更鲜明的界限吗?

4

11 回答 11

84

可扩展性是系统仅通过添加资源使硬件更强大(向上扩展)或添加额外节点(向外扩展)来适应更大负载的能力。

弹性是动态适应负载所需的资源的能力,通常与横向扩展相关。因此,当负载增加时,您可以通过添加更多资源来扩展,而当需求减弱时,您会缩减并删除不需要的资源。弹性在云环境中最为重要,在这种环境中,您一方面按使用付费,一方面不想为当前不需要的资源付费,另一方面又希望在需要时满足不断增长的需求。

于 2012-03-07T22:33:48.707 回答
59

_

可扩展性: “增加”满足“增加”工作负载的能力。

弹性: “增加或减少”满足“增加或减少”工作量的能力。


可扩展性:在可扩展的环境中,可用资源可能会超过满足“未来需求”。

弹性:在弹性环境中,可用资源尽可能与“当前需求”匹配。


可扩展性:可扩展性仅通过以“增量”方式“供应”资源来适应“工作量增加”。

弹性: 弹性通过以“自主”方式“供应和取消供应”资源来适应“工作量增加”和“工作量减少”。


可扩展性: 通过增加单个计算机资源的能力或通过增加一组计算机资源的能力来增加工作量。

弹性:变化的工作负载伴随着计算机资源使用的动态变化。


可扩展性:可扩展性使企业能够满足对具有“长期战略需求”的服务的预期需求。

弹性:弹性使企业能够以“短期的、战术性的需求”满足对服务需求的意外变化。


可扩展性:它正在“增加”为工作负载增加的环境提供服务的能力。

这种可扩展性可以是“向上扩展”或“向外扩展”。

(例子:

扩大规模 - 增加单个服务器的能力

横向扩展 - 通过向单个服务器添加多个服务器来增加能力。)

弹性:是随意“放大或缩小”服务能力的能力。


可扩展性:打个比方,“扩大规模”是个人增加自己的能力以满足不断增长的需求,而“扩大规模”是建立团队来满足不断增长的需求。

弹性:打个比方,电影演员增加或减少体重,以满足电影业的不同需求。

_

于 2014-04-07T11:49:44.093 回答
25

通常,当有人说平台或架构规模时,他们的意思是硬件成本随需求线性增加。例如,如果一台服务器可以处理 50 个用户,那么 2 个服务器可以处理 100 个用户,而 10 个服务器可以处理 500 个用户。如果每获得 1,000 个用户,您需要 2 倍的服务器数量,那么可以说您的设计无法扩展,因为随着用户数量的增加,您很快就会花光钱。

弹性用于描述您的架构实时适应工作负载的能力。例如,如果您每小时有一个用户登录到您的站点,那么您实际上只需要一台服务器来处理这个问题。但是,如果突然间有 50,000 名用户同时登录,您的架构能否快速(并且可能自动)动态配置新的 Web 服务器来处理这种负载?如果是这样,可以说你的设计是有弹性的。

于 2012-03-06T22:04:51.953 回答
14

可扩展性是指您的资源在大小或数量上增加或减少的能力。

实现这样的事情涉及很多基础设施,所以这不是一件容易的事。

AWS 中的许多服务在默认情况下都是可扩展的,这也是 AWS 如此成功的原因之一。

可扩展性很容易定义,这就是为什么弹性的某些方面经常归因于它。


弹性是您的资源根据规定的标准(通常是CloudWatch规则)进行扩展的能力。

这就是当负载均衡器在 Web 应用程序获得大量流量时添加实例时发生的情况。

弹性需要可伸缩性,反之则不然。

并非所有 AWS 服务都支持弹性,即使是那些经常需要以某种方式配置的服务。

--

在 resume中,可伸缩性使您能够增加或减少资源,而弹性使这些操作根据配置的规则自动发生。

于 2018-07-06T15:11:18.223 回答
5

一张照片胜过一千个字。我在Mark Richards 和 Neal Ford的《软件架构基础:一种工程方法》中找到了它。

在此处输入图像描述

于 2020-06-14T06:52:24.093 回答
3

可扩展性根据系统的工作负载需求处理资源的增加和减少。因此,可扩展性不必自动完成。

弹性是根据需要自动或动态增加或减少资源的能力。弹性资源匹配当前需求,并在需要时自动添加或删除资源以满足未来需求。

因此,简而言之,系统自动处理可扩展性的能力就是弹性

于 2020-07-11T01:31:07.000 回答
1

弹性与服务或应用程序的短期需求及其变化有关,但可扩展性支持长期需求。

于 2015-09-05T18:36:08.870 回答
1

弹性是系统根据特定标准(例如系统的总负载)增加(或减少)其计算、存储、网络等容量的能力。

例如,您可以实现一个后端系统,该系统最初在其集群中具有 1 个服务器,但如果集群中所有服务器的平均每分钟 CPU 利用率超过给定阈值(例如 70% )。

同样,您可以将系统配置为在系统负载降低且每分钟平均 CPU 利用率低于您定义的阈值(例如 30%)时从后端集群中删除服务器。

作为另一个示例,如果使用了超过 80% 的当前可用总存储空间,您可以将系统配置为将后端集群的总磁盘空间增加 2 个数量级。如果出于某种原因,稍后从存储中删除了数据,例如,使用的总存储低于 20%,您可以将总可用磁盘空间减少到其原始值。

但是有些系统(例如遗留软件)不是分布式的,也许它们只能使用 1 个 CPU 内核。因此,即使您可以按需增加可用的计算容量,系统也不能以任何形式使用这种额外的容量。此类系统不可扩展。但可扩展系统可以使用增加的计算容量并处理更多负载,而不会影响系统的整体性能。

但是,可扩展的系统并不依赖于弹性。传统上,IT 部门可以用具有更多 CPU、RAM 和存储的新服务器替换现有服务器,并将系统移植到新硬件,以利用可用的额外计算容量。

云环境(AWS、Azure、谷歌云等)提供了弹性,它们的一些核心服务也可以开箱即用地扩展。此外,如果您构建了一个可扩展的软件,您可以将其部署到这些云环境中,并从它们为您提供的弹性基础架构中受益,从而按需自动增加/减少您可用的计算资源。

于 2018-05-20T13:16:55.273 回答
0

可扩展性和弹性都是指满足流量需求,但在两种不同的情况下。

可扩展性是满足可预测的流量需求,而弹性是满足突然的流量需求。

在此处输入图像描述

图片参考:https ://www.skylinesacademy.com/blog/2020/3/6/az-900-cloud-concepts-scalability-and-elasticity

于 2021-03-06T15:44:20.967 回答
0

可扩展性和弹性都指系统在容量和资源方面增长和收缩的能力,在这个程度上实际上是相同的。差异通常在于发生这种情况的需求和条件。可扩展性主要是手动的、预测的和针对预期条件的计划。弹性是自动的,对外部刺激和条件具有反应性。弹性是响应外部条件和情况的自动可扩展性。

于 2021-08-23T22:36:31.760 回答
0

根据我对这些概念的有限理解,举个例子:

假设我们有一个由 5 台计算机组成的系统,它可以完成 5 个工作单元,如果我们需要再完成一个工作单元,我们将不得不再使用一台计算机。这是一个可扩展的系统,但它不是弹性的。有人将不得不去拿另一台电脑。此外,如果购买了一台新计算机并且不再需要额外的工作单元,则系统会因冗余资源而陷入困境。

现在,假设同一系统使用适合其需求的云服务,而不是自己的计算机。理想情况下,当工作负载上升一个工作单元时,云将为系统提供另一个“计算单元”,当工作负载下降时,云将优雅地停止提供该计算单元。这是一种系统既可扩展又具有弹性的情况。

于 2016-03-23T09:01:43.180 回答