“可扩展性”是什么意思?[关闭]


67

我读了许多比较编程语言的文章。

经常有一个词:可扩展性。我实际上试图寻找一个简单明了的解释,但没有发现任何东西。

您能否解释可扩展性术语的含义?


2
看一下可扩展性标签的悬停……这是一个好的开始!谷歌它,以及。那里有十亿资源可以完全轻松地解释它……例如shiflett.org/blog/2003/oct/what-is-scalability
king14nyr 2012年

1
在@ king14nyr链接中的图中,O(c ^ n),O(n)和O(log(n))均为Big-O表示法。如您所见,使用大量数据(n条记录)时,具有O(log(n))模式的程序将运行得很好,而O(c ^ n)的性能将非常差。这是两个极端。
Furbeenator '02

有一种语言的名称源于“可扩展性”-Scala。这意味着什么,您可以在这里找到:softwareengineering.stackexchange.com/a/130340/92672
xuesheng

Answers:


58

可伸缩性是程序进行伸缩的能力。例如,如果您可以在小型数据库(例如少于1000条记录)上做某事,那么具有高度可伸缩性的程序既可以在小型数据库上运行,也可以在大型数据库上运行(例如数百万或数十亿条记录) )。

就像差距所说的那样,资源需求将呈线性增长。查找Big-O表示法,以获得有关数据输入越大程序如何需要更多计算的更多详细信息。大输入x时,诸如Big-O(x ^ 2)之类的抛物线效率远不如Big-O(x)线性之类。


1
这实际上是错误的。因为一个线性可伸缩性将具有线性增长。您仍然可以通过非线性方式(自然而然地)进行扩展。其次,通过更改硬件获得/显示可伸缩性。如果我有一个庞大的设置,并且我首先以1 TPS的速度运行它,而实际上却可以处理100 TPS-在100TPS上运行它并不能扩展它。如果通过更改硬件可以将负载增加到10KTPS,那么它是可扩展的
Arnon Rotem-Gal-Oz

3
关于OP问题,我正在描述软件算法的可伸缩性。这种情况在大学课程中很典型。当比较两种潜在算法的可伸缩性时,具有线性资源需求的一种算法与具有抛物线资源需求的一种算法相比将具有高度可伸缩性。
Furbeenator 2014年

我得到了软件算法中特别重要的可伸缩性。但是编程语言中的可伸缩性是什么?
Acha Bill

@jafar,相同的原理适用于编程语言。当您可以在其中编写小型或大型程序且资源需求呈线性增长时,该编程语言是可伸缩的。这一切都取决于语言的语法和语义。有关不同语言的更多讨论和比较(尽管已经过时了几年)在这里:users.cms.caltech.edu/~mvanier/hacking/rants/…– Furbeenator 2015
21

32

可伸缩性是软件解决方案可以处理增加的工作量的特征。这可以是更大的数据集,更高的请求率,大小和速度的组合等。

在谈论系统可伸缩性时,我们通常会区分

  • “向上扩展”-通过使用更强大的硬件进行扩展的能力
  • “横向扩展”-通过添加更多硬件进行扩展的能力

可以横向扩展的解决方案通常可以以更具成本效益的方式扩展为更大的负载。这里要了解的重要一件事是阿姆达尔定律,该定律指出横向扩展的能力受软件顺序部分的限制


12

这里已经有了不错的答案,只想在这里添加一些内容。

可伸缩性可以通过两种方式实现:

  1. 垂直-通过这种方式,您可以添加更多的硬件,例如更多的RAM,处理器或更多的节点。您还将介绍负载均衡器,该负载均衡器将有助于根据使用的路由算法将传入呼叫路由到各种服务器。由于跨服务器共享负载,因此该应用程序现在能够处理更多负载。

  2. 水平-在水平缩放中,您以某种方式设计/设计应用程序,使其在出现更多并行流量时表现良好。您可以检查如何管理内存,会话,缓存和状态等。如果使用会话维护用户信息,则在负载较重的情况下,单个服务器可能会更忙于管理服务器,因此在这种情况下,您可以检查变得无国籍。它还可以并行响应来自同一用户的传入请求,而无需串行响应(如果正在使用会话)。


10

我的理解是,这意味着所需的产出线性增长仅需要资源线性增长

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.