这意味着什么可扩展性?

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

有一个经常出现的词汇:可扩展性。 其实我试图寻找一个简单而明确的解释,但还没有find它。

你能解释一下可扩展性是什么意思?

谢谢。

可伸缩性是程序扩展的能力。 例如,如果你可以在一个小的数据库(比如less于1000条logging)上做一些事情,那么一个高度可扩展的程序就可以在一个小的数据库上正常工作,并且能够在一个大的数据库上运行得很好(比如说数百万甚至数十亿条logging)。

就像差距说的那样,资源需求会有线性增长。 请查阅Big-O符号,了解有关程序如何在数据input得到的数据量越大时需要更多计算的更多细节。 像Big-O(x ^ 2)这样的抛物线在大xinput方面的效率远低于Big-O(x)这样的线性效率。

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

在谈到系统可扩展性时,我们通常会区分

  • “放大” – 通过使用更强大的硬件来增长的能力
  • “扩展” – 通过增加更多硬件来增长的能力

一个可以扩展的解决scheme通常可以以更具成本效益的方式增长到更大的负载。 这里要知道的一个重要的事情是Amdahl的定律 ,规定扩大的能力受限于软件的顺序部分

这里已经有了很好的答案,只是想在这里添加一些东西。

可扩展性可以通过两种方式来实现

垂直 – 通过这种方式,可以像更多的RAM,处理器或更多节点一样添加更多的硬件。 您还介绍了负载平衡器,这将有助于根据所使用的路由algorithm将传入呼叫路由到各种服务器。 现在应用程序能够处理更多的负载,因为负载正在服务器之间共享。

水平 – 在水平缩放中,您以这种方式构build应用程序,以便在更多并行stream量中performance良好。 您检查如何pipe理内存,会话,caching和状态等。如果您使用会话来维护用户信息,在重负载下单个服务器可能更忙于pipe理服务器,所以在这种情况下,您可以检查去无国籍。 它也可以并行响应来自同一用户的传入请求,而不是在正在使用会话时发生的串行应答。

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