什么是扩展性?

6

我经常听到人们说RoR不可扩展,但我从来没有得到过任何恰当的答案,这是什么意思?所以,一个新手在这里问,什么是“可扩展性”,如何衡量它?


5
我认为,在使用Scala编程时,"Scaling"是您正在做的事情。 :-) - David Webb
请问能提供一些上下文吗?您是在询问关于网站和/或应用程序的扩展,以处理更多用户/数据吗? - ChrisF
@ChrisF 更具体地说,我在谈论网站,以及这个术语在一般情况下的真正含义。 - itsaboutcode
7个回答

10
作为一个通用术语,scalability意味着项目对不同需求的响应能力。能够良好扩展的项目是指在服务需求增加时没有任何问题的项目,或者至少不会因无法处理请求而开始拒绝请求。

通常情况下,简单地将问题规模增加一两个数量级就会暴露出解决方案中的弱点。当这样的弱点被暴露时,可能会说该问题的解决方案“扩展性不佳”。

例如,bogo sort易于实现,但一旦你需要排序的东西超过几个,它就需要很长时间才能得到你想要的答案。可以公平地说,bogo sort的扩展性不佳。

测量扩展性是一个更难回答的问题。通常情况下,扩展性没有相关单位;类似“那个系统比这个系统扩展性高N倍”的说法最多只能进行苹果与橙子之间的比较。

可扩展性通常通过测试条件下系统如何应对不同需求来衡量。如果系统在不同种类的需求范围内都能跟上,人们可能会说它具有良好的可扩展性。特别是当它能够应对目前没有经历过的需求,但如果突然出现流行潮会被期望应对时,这一点尤为重要。(想想Slashdot/Digg/Reddit effects。)


9

2

维基百科指出,可扩展性具有广泛的用途:

可扩展性可以在各个方面进行衡量,例如:

  • 负载可扩展性:分布式系统轻松扩展和收缩资源池以适应更重或更轻的负载的能力。或者说,系统或组件可以轻松修改、添加或删除,以适应不断变化的负载。
  • 地理可扩展性:无论从集中在本地区到更分散的地理模式,都能够保持性能、实用性或可用性。
  • 管理可扩展性:越来越多的组织可以轻松共享单个分布式系统的能力。
  • 功能可扩展性:通过最小的努力添加新功能来增强系统的能力。

我所在的一个领域关注高吞吐量和并行计算的性能,随着处理器数量的增加,这一领域的性能表现备受关注。

更普遍地说,通常发现将问题增加一到两个数量级会带来完全不同的挑战,这些挑战不能从较小的系统中轻易预测。


那么我们可以说这就是每秒通过隧道的人数吗? - itsaboutcode
2
这更多是在说,如果有10倍的人,答案可能不是建造九个隧道,而是找到另一种穿越山脉的方式。 - peter.murray.rust

2
「可伸缩性」是一个术语,用于表达系统在随着时间的推移而保持其性能的能力。理想情况下,您希望一个系统能够实现「线性可伸缩性」。这意味着通过添加新的资源单元,系统的性能能够相应增长。例如:当三个 Web 应用服务器可以处理一千个并发用户时,通过添加三个「更多」的服务器,它可以处理「双倍数量」,在这种情况下为两千个并发用户,且不得低于此。如果系统没有线性可伸缩性的属性,那么在添加更多资源(例如硬件)后,就会出现不能带来任何额外好处的情况,例如性能会收敛到零,因为任务被分配给越来越多的服务器。在上述示例中,每个新服务器的附加好处变得越来越小,直到达到零。因此,「可伸缩性是告诉您从给定输入获得的输出的因素。它的值范围理论上介于 0 和正无穷之间。在实践中,任何等于 1 的值都是最理想的...」

1

可扩展性是指系统适应不断变化的用户数量的能力。随着我们现在尝试围绕云计算和租用计算时间来规划系统,这可能是不断增加或减少的用户数量。

想想看,如果要让一个设计用于1000个代表的订单录入系统适应10万个代表,需要添加什么硬件?数据库呢?简而言之,这就是可扩展性。


1
它并不一定指用户数量。例如,想象一个跟踪道路上汽车的单用户系统。它可能已经在一个有1万人口的城镇中进行了测试,但它能否扩展到一个人口数百万的城镇呢? - Bryan Oakley
真的,但我只是举了一个例子,我认为SO上的任何人都可以理解。 - DenaliHardtail

0

应用程序的可扩展性是指它在应用负载变化时的表现能力。这通常受到连接用户数量、数据库中数据量等因素的影响。


0

系统的可扩展性是指在不影响原始设计或系统的情况下,能够接受增加的工作负载、更多的功能和变化的数据库等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接