`
soleghost
  • 浏览: 40784 次
  • 性别: Icon_minigender_1
  • 来自: 未知
社区版块
存档分类
最新评论

可伸缩性的艺术(1)

阅读更多

本来翻译出来想放在技术部知识库上的,担心太烂被人拍死,放在javaeye吧,欢迎斧正:)

原文链接:http://www.hfadeel.com/Blog/?p=120

 
可伸缩性的艺术(1)
我打算写两至三篇关于可伸缩性的文章。其中第一篇文章叫做‘可伸缩性原则’——介绍可伸缩性的概念

及其原则,接下来我会介绍可伸缩性模式、相关反模式以及下一篇文章准备介绍的一些可伸缩性准则。我

们现在开始吧!

在电信和软件工程行业中,可伸缩性是一个系统、一个网络、或者一次处理过程中非常值得期待的特性,它

意味着可以用一种非常优雅的方法去处理不断增长的系统的访问量。例如,他可以通过增加资源的方式

(最典型的是增加硬件)去适应系统吞吐量的不断增加。另一层商业方面的含义是指一个公司的可伸缩性:

它的商业模式可以支持公司经济的不断增长。 [Wikipedia]

 

如果你无法理解Wikipedia 对可伸缩性的定义的话,请接着看这句:可伸缩性是指用最简单的方式做更多

的事情。一个网站的可伸缩性是指允许越来越多的人访问你的系统,但是对于每个用户来说,消耗的时间

却是不变的,这种可伸缩性要处理大量的并发访问者的数量。

这里有两条建议如何去做到可伸缩性:

    * 纵向可伸缩性:纵向可伸缩性是指在相同逻辑单元中增加资源去增加这种能力。比如:增加应用服

务器的CPU数量,或者增加内存的容量。这种纵向可伸缩性仅仅强调硬件的方式。
    * 横向可伸缩性:横向可伸缩性是指增加多个逻辑单元,并使他们像一台机器工作一样。比如:集群、

分布式、负载平衡等方式。这种横向可伸缩性强调软件和硬件结合的方式。

 

现在有一个问题:我们该如何设计和架构的软件的可伸缩性呢?架构师们努力去实现线性可伸缩性,这种

可伸缩性希望通过增加系统资源的方式去支撑持续增加的吞吐量。然而,增加资源的方式容易导致额外的

开销,(making it difficult to achieve)Royans K Tharakan 称之为“可伸缩性因子”,下面列举可伸

缩性因子的几种类型:

 

    * 如果可伸缩性因子是一个常量,则称之为线性可伸缩性因子。
    * 如果某些性能没有随着资源的增加而成比例,这种小于1的可伸缩性因子则称为次性线可伸缩因子。
    * 在及其少的情况下,仅仅增加资源可以得到更好的性能(比如RAID的磁盘主轴越多,IO访问速度越

快),这种则称为主性线可伸缩因子。
    * 如果系统根本没有考虑到可伸缩性的设计,有可能资源的增加了,性能反而会下降。这称为负可伸

缩性。

 

      和大部分的软件开发过程一样,没有一种固定的模式能够解决所有的可伸缩性问题。如果你现在非常迫切

的需要改善系统的可伸缩性,那么走横向可伸缩性这条路是最容易的,但是随着系统吞吐量的增大,花费也会

越来越高。而横向可伸缩性与之相比,虽然实现起来比较困难,但几乎可以达到无线的伸缩性。

 

      另外一方面,横向可伸缩性不要求越来越高的硬件支出,它只需要一定数量的存储器和服务器。但是这种方式

也不会很便宜,我们必须打造出能够部署在多台服务器上,但对外却是一个整体的系统。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics