2012-02-23 161 views
42

我阅读了很多比较编程语言的文章。这意味着什么可扩展性?

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

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

谢谢。

+2

看看悬停标签的可伸缩性...这是一个好的开始! Google也是如此。那里有十亿资源可以完全轻松地解释它......例如http:// shiflett。org/blog/2003/oct/what-is-scalability – king14nyr 2012-02-23 19:44:01

+1

在@ king14nyr的链接中,O(c^n),O(n)和O(log(n))都是Big-O符号。正如你可以看到大量数据(n条记录)一样,具有O(log(n))模式的程序运行得非常好,而O(c^n)则执行得非常差。这是两个极端。 – Furbeenator 2012-02-23 19:48:35

回答

40

可伸缩性是程序扩展的能力。例如,如果您可以在小型数据库上执行某些操作(例如少于1000条记录),那么具有高度可扩展性的程序就可以在小型数据库上正常运行,并且可以在大型数据库上运行良好(例如数百万或数十亿条记录)。像差距说的那样,它会有资源需求的线性增长。查看Big-O表示法了解更多关于程序如何在数据输入得到越大时需要更多计算的更多细节。像Big-O(x^2)那样的抛物线在大x输入方面的效率远低于像Big-O(x)那样的线性效率。

+1

这实际上是错误的。对于一个线性可伸缩性会有线性增长。您仍然可以以非线性方式进行扩展(自然达到极限)。其次,通过改变硬件来获得/显示可扩展性。如果我有一个巨大的设置,我首先运行1 TPS,而实际上它可以处理100 TPS - 在100TPS上运行它不会缩放它。如果通过改变硬件负载可以增加到10KTPS,那么它是可扩展的 – 2014-08-30 07:54:51

+3

在OP问题的上下文中,我描述了软件算法的可扩展性。这种情况在大学课程中是典型的。比较两种潜在算法的可扩展性时,与具有抛物线资源需求的算法相比,具有线性资源需求的算法具有高度可扩展性。 – Furbeenator 2014-09-02 16:36:03

+0

我得到软件算法中特别的可扩展性。但是编程语言的可伸缩性是什么? – 2015-09-29 10:22:44

6

我的理解是不是就意味着在输出线性增加要求只需要在资源一个线性增加。

19

可伸缩性是软件解决方案可以处理更多工作量的特性。这可能是更大的数据集,更高的要求率,规模和速度等的组合

在谈到系统的可扩展性,我们通常

  • 区分“向上扩展” - 通过使用能力的增长强大的硬件
  • “向外扩展” - 通过添加更多的硬件

,可以扩展出通常可以长到啤酒载荷更具成本效益的方式加以解决成长的能力。这里要知道的一个重要的事情是Amdahl's law,它指出扩展的能力受限于软件的顺序部分

8

已经很好的答案在这里,只是想在这里添加一些东西。通过这种方式,你添加更多硬制品喜欢更多的RAM,处理器或多个节点 -

可扩展性可以通过2种方式

立式来实现。您还介绍了负载均衡器,它将根据所使用的路由算法将传入呼叫路由到各种服务器。随着负载在服务器之间共享,应用程序现在能够处理更多的负载。

水平 - 在水平缩放中,您以这样的方式构建应用程序,以便在更多并行流量中表现良好。你检查你是如何管理内存,会话,缓存&状态等。如果你使用会话来维护用户信息,在重负载下单个服务器可能更忙于管理服务器,所以在这种情况下,你可以检查可能性无国籍。它也可以并行响应来自同一用户的传入请求,而不是在正在使用会话时发生的串行回复。