“可扩展性”是啥意思? [关闭]
Posted
技术标签:
【中文标题】“可扩展性”是啥意思? [关闭]【英文标题】:What does "scalability" mean? [closed]“可扩展性”是什么意思? [关闭] 【发布时间】:2012-03-14 06:27:59 【问题描述】:我阅读了许多比较编程语言的文章。
有一个词经常出现:可扩展性。我实际上试图寻找一个简单明了的解释,但没有找到任何东西。
你能解释一下可扩展性这个词是什么意思吗?
【问题讨论】:
看看悬停的可扩展性标签...这是一个好的开始!谷歌它,以及。有十亿种资源可以完整而轻松地解释它......例如shiflett.org/blog/2003/oct/what-is-scalability 在@king14nyr 链接中的图中,O(c^n)、O(n) 和 O(log(n)) 都是 Big-O 表示法。正如您在大量数据(n 条记录)中看到的那样,具有 O(log(n)) 模式的程序将运行得非常好,而 O(c^n) 的程序性能会很差。这是两个极端。 有一种语言的名字来源于“可扩展性”——Scala。这意味着什么你可以在这里找到:softwareengineering.stackexchange.com/a/130340/92672 【参考方案1】:这里已经有了很好的答案,只是想在这里添加一些东西。
可扩展性可以通过两种方式实现:
垂直 - 通过这种方式,您可以添加更多硬件,例如更多 RAM、处理器或更多节点。您还介绍了负载均衡器,这将有助于根据使用的路由算法将传入呼叫路由到各种服务器。随着负载在服务器之间共享,应用程序现在能够处理更多负载。
水平 - 在水平扩展中,您架构/设计应用程序的方式使其能够在更多并行流量的情况下表现良好。你检查你是如何管理内存、会话、缓存和状态等的。如果你使用会话来维护用户信息,在重负载下单个服务器可能会更忙于管理服务器,所以在这种情况下你可以检查的可能性去无国籍。它还可以并行响应来自同一用户的传入请求,而不是在使用会话时发生的串行回复。
【讨论】:
【参考方案2】:我的理解是这意味着要求的输出线性增加只需要资源的线性增加。
【讨论】:
【参考方案3】:可扩展性是软件解决方案可以处理更多工作量的特征。这可以是更大的数据集、更高的请求率、大小和速度的组合等。
在谈论系统可扩展性时,我们通常会区分
“扩大规模” - 通过使用更强大的硬件实现增长的能力 “横向扩展”- 通过添加更多硬件实现增长的能力可以横向扩展的解决方案通常可以以更具成本效益的方式扩展到更大的负载。这里要知道的重要一点是Amdahl's law,它指出横向扩展的能力受到软件顺序部分的限制
【讨论】:
【参考方案4】:可扩展性是程序可扩展的能力。例如,如果您可以在小型数据库(比如少于 1000 条记录)上做某事,那么具有高度可扩展性的程序既适用于小型数据库,也适用于大型数据库(比如数百万或数十亿条记录) )。
就像 gap 所说的那样,它的资源需求会线性增长。查看 Big-O 表示法,了解更多关于程序如何在数据输入越大时需要更多计算的详细信息。像 Big-O(x^2) 这样的抛物线对于大 x 输入的效率远低于像 Big-O(x) 这样的线性。
【讨论】:
这实际上是错误的。因为线性可扩展性将具有线性增长。您仍然可以以非线性方式进行扩展(自然会受到限制)。其次,通过改变硬件来获得/显示可扩展性。如果我有一个庞大的设置并且我首先以 1 TPS 运行它,而它实际上可以处理 100 TPS - 在 100 TPS 上运行它并不会扩展它。如果通过更改硬件可以将负载增加到 10KTPS,那么它是可扩展的 在 OP 问题的上下文中,我描述了软件算法的可扩展性。这种情况在大学课程中很典型。在比较两种潜在算法的可扩展性时,一种具有线性资源需求的算法与一种具有抛物线资源需求的算法相比将具有高度可扩展性。 我知道软件算法中的可扩展性是什么。但什么是编程语言的可扩展性? @jafar,同样的原则也适用于编程语言。当您可以在其中编写资源需求线性增长的小型或大型程序时,编程语言是可扩展的。这一切都取决于语言的语法和语义。更多关于不同语言的讨论和比较(尽管已经过时了几年)在这里:users.cms.caltech.edu/~mvanier/hacking/rants/…以上是关于“可扩展性”是啥意思? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章