可伸缩性,美妙的可伸缩性

2008-04-09 04:08:29来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

很多年以前,当我还是一个害羞的初级程序员时,每次了解项目管理中枢信息的机会对我来说都像是幸运之神对我的眷顾。不管是偶尔被正式邀请参加高层会议,还是鬼鬼祟祟地躲在桌子底下偷听,多年以来,我不断地听到“可伸缩性”这个词在耳边重复,像一个令人厌烦的老调。“我们如何提高可伸缩性?”,“您提出的方法有足够的伸缩性吗?”,“在中间层我们需要更多的可伸缩性。”

可伸缩性,美妙的可伸缩性。但是,什么是可伸缩性呢?

无论它是什么,我想作为我的职责,我应该重新引起大家对可伸缩性问题的关注。事实证明,您永远不知道项目管理这一领域正在进行着什么样的变化。

我还记得曾在许多学术书籍中频繁地看到可伸缩性这个词,这些书宣称涵盖了分布式系统的原则和技术。“在一个好的设计中,可伸缩性永远是决定性因素。”

可伸缩性,美妙的可伸缩性。但是,究竟什么是可伸缩性呢?

最近,我发现“可伸缩”一词已经成为人们最喜欢的一种“工具”,用来衡量用于分布式环境的所有软件技术在功能方面的质量。因此给我一种感觉,我应该在自己的可伸缩性方面进行更大的投资,以期我的事业更加兴旺发达。问题也就出来了。归根到底,可伸缩性到底意味着什么?在如今的数据库服务器和硬件环境中,它又意味着什么?

可伸缩性方面的成绩

抽象地来讲,我认为可以通过两种基本方法来利用可伸缩性的重要属性对系统进行修饰。一种是在设计阶段从理论上对系统进行优化。将其从所有软件工具和基础元素中独立出来进行考虑,然后再将它应用于实践。从实际意义上来讲,这意味着:在发掘任务的自然并行度时,尽可能将瓶颈和关键资源的影响减到最小。

而另一种方法则恰恰相反。您只能控制某些硬件和软件的内置功能,您自己的解决方案和创造性发挥的余地比较小。基本上,可伸缩性和互操作性方面的责任都交给选定用于处理此任务的工具来完成。

顺便说一句,在人们着重关注性能和可靠性而似乎忽略了可伸缩性的前 Internet 时代,第一种方法已经使用若干年了。(在没有实现大范围 Internet 连接的情况下,这的确是一个相对的问题。)

几年前,由于功能丰富并且负担得起的集成解决方案比较缺乏,因此人们主要考虑的是设计问题,把注意力放在数据库结构和各种操作的运算所消耗的资源上。

今天,较为便宜并且功能强大的硬件的出现使优化和设计的有效性在项目的整体管理中已经退居次要地位,这种可伸缩性独立于硬件的缺点已经被克服。

计算复杂程度的重要规则表明,只有最快的算法才能最充分地利用更快的硬件。考虑可伸缩性问题时请注意这一点。

增长因素

从一般意义上来说,可伸缩性是指客户端数量增加时,系统维持(如果没有提高)其平均性能的能力。因此,可伸缩性说起来是一个简洁明了的概念。

但是,可伸缩性也可以说是抽象的。因为它不是一种可以通过编程手段来打开和关闭,或以某种方式直接控制的系统属性。相反,它是一种系统特性,是所有其他特性、总体设计和实现方案以及所选择的交互模型的组合。

分布式系统中的可伸缩性的内在级别不易于通过监视和分析工具进行检测。另一方面,许多实现方面(重要资源是否丰富、设计的瓶颈问题、冗长但必要的任务以及操作过分的序列化)的因素限制了可伸缩性。

但是如果不在实际的产品环境下对系统进行强度测试,就不能够判断某个特定系统是否具有足够的可伸缩性。

可伸缩性在某种程度上与性能有关,如果系统构造良好并且使用了合理而完备的计划,这将不是问题。

看到像可伸缩性这样一个不可见的系统特性突然之间成为使系统性能下降的主要原因,这一定会让人感到惊讶。不管系统未来如何演变,只要在设计组件时适当注意操作的运算所消耗的资源,您就可以立于不败之地。

可伸缩性一直是一个影响系统增长的因素。概括地说,需要增长的系统是指其当前性能不能满足预期用户数量需要的系统。如何从结构上改善此类系统的性能?简单地说,只需要安装功能更强大的硬件或更好的硬件和软件组合。

如今,这两个选项已经被更改为更具迷惑力、更具市场战略的表达方式。以硬件为中心的方式称为“扩大”。硬件和软件相结合称为“扩展”,这种结合更为巧妙。

要控制系统的增长,请确保进行扩大或者扩展。但是,只有维护系统的性能才能实现扩大或扩展。

可伸缩性,美妙的可伸缩性。这是最合适的定义吗?

扩大

扩大系统基本上就是采用更新过的、功能更强大的硬件系统,如同加固雨伞的伞骨和伞柄。一旦新系统就绪,便可以备份表和应用程序并正式开始运行。这样,对现有代码和系统组织结构的影响将减至最低限度。

然而,不要以为进行扩大的路上铺满玫瑰。扩大也有其不足的一面,其中有几点需要多加注意。首先(也是最重要的),扩大的系统存在一个可能会导致失败的缺陷,这样的系统最终会面临某种硬件方面的限制。扩大通过使用功能更强的计算机,从而增加服务器的处理能力。单个硬件处理能力的增长有一个物理上的上限,虽然目前人们还可能无法预见,但终有一天会达到此值。

第二,接近此上限需要相当可观的花费,这种花费既包括时间(超过一定的限度后,也许需要花若干年才能在技术上成倍地提高性能)、费用,还包括(最后但并非最不重要)电源消耗和办公室空间。

这就是说,由于对现存结构的影响有限,扩大是一种比较合理的首选方案。

扩展

扩展是指增加系统整体处理能力,这与增加作为服务器的单个部件的能力正好相反。扩展的系统本质上是模块化的,并由一个计算机群集组成。扩展这样的系统意味着为系统添加一台或更多附加计算机。

在经过扩展、高度分区的环境中,您采用的处理能力应当更加抽象、更不依赖于硬件。总的处理能力是每台计算机的实际速度之和,而每台计算机又由整个节点范围内数据和应用程序的分区来调节。

看起来扩展对系统的增长似乎没有限制。开始从这点来看无疑是有利的。但是,扩展却涉及到大量的重新设计和重新实现方面的工作。根据单服务器理论而构造的系统必须经过重新考虑并重新组织,才能满足扩展要求。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:有些程序员可能很轻松

下一篇:续:关于ISO,CMM的误区.(精彩精彩!!@!!!!!!)不要错过