到底什么是可扩展性?这年头,作为软件设计架构师如果系统没有可扩展性对外交流时都不好意思。但是如何选择可扩展性方案?水平扩展还是垂直扩展?是不是很矛盾呢,本文为你分析可扩展性的真实含义和实际项目中的取舍。

每每和别人提及可扩展性的含义时,很多人开始讨论提高性能,实施高可用性,甚至谈论特定的技术或协议。显然这些并不是可扩展性。不要误会,您当然需要了解关于速度,性能,可用性,应用平台,网络等相关的一切,但这并非可扩展性的定义。

简单地说,可扩展性就是关于如何处理更大规模的业务。比如,Web应用程序就是允许更多的人使用你的服务。如果你不能弄清楚如何提高性能的同时向外扩展,没关系。只要你能处理更大规模的用户,即使是存在多个单点故障也没有问题。

在今天实践中有两个关键的缩放Web应用程序的方式:垂直扩展和水平扩展。

“垂直扩展“ -在同一个逻辑单位添加资源以增加容量。这样的例子比比皆是,比如升级服务器的CPU,比如在RAID/ SAN存储设备上增加硬盘。

“横向扩展“- 增加多个逻辑单元资源并且使他们作为一个整体在工作。大多数的集群解决方案,比如分布式文件系统,负载均衡都是通过横向扩展技术来进行的。

每一个部件,无论它是处理器,服务器,存储驱动器或负载均衡有一定的管理上或者操作上的开销。当您尝试进行扩展时,很重要的一点是要了解实际的资源利用率,这种测量方法被称为“可扩展性因子“法。如果每添加一个CPU到系统,都会失去5%的处理器功率,那么您的可扩展性系数为0.95。当可扩展系数为0.9时,意味着你将只能使用90%的资源。

以“可扩展性因子“为基础,可扩展性可以进一步细化分类。

如果你的可扩展性系数保持不变,这就是所谓的“线性的可扩展性“。

但某些组件有可能无法像别人一样可以扩展,该系数低于1.0的就是所谓“分线性可扩展性。“

虽然数量很少,但是加入更多的组件确实可能会获得更好的性能(或者可伸缩性因子)(跨越多个磁盘的RAID I / O性能确实会更好)。这就是所谓的“超线性的可扩展性。“

如果应用程序没有可扩展性,当对其进行扩展时,得到了更加糟糕的结果。这就是所谓的“负可扩展性“。

如果您迫切需要可扩展性,垂直扩展可能是最容易的(只要你有足够的银行存款余额)。在大多数情况下,只要能砸一个超级昂贵的64个来自Sun或HP CPU服务器和来自EMC,NetApp和日立的存储设备,不用改变一行代码,一切都OK,至少可以抗一段时间。不幸的是伴随您的成长,垂直扩展会变得越来越贵。

另一方面,横向扩展并不要求你购买更多昂贵的服务器,这意味着应用普通的存储和服务器作为解决方案。但是,横向扩展也不便宜,因为它需要应用程序进行重新设计,以运行在多个服务器之上,但是对外要表现为一个单一的应用程序。这其中不得不思考两个有趣的问题:“脑裂“和”硬件故障“。

虽然无限的水平线性可扩展性是难以实现的,无限的垂直扩展性也是不可能的。如果你正在构建一个基本预先可以确定用户数量的系统,调查和应用垂直扩扩展可能是明智的选择。但是,如果你正在建设一个可用于数百万用户的Web应用程序,垂直扩展可能要付出昂贵的代价。

可扩展性不仅是和CPU处理能力有关,对于一个成功的具备可扩展性的Web应用程序而言,所有层都是一样的,这包括存储层(集群文件系统和S3等),数据库层(分区,联邦),应用层(memcached,横向扩展,TC,Tomcat集群等),网络层,负载平衡器,防火墙等等。例如如果没有办法实现多个负载平衡器来处理您未来的网络流量负载,这和您花多少钱和精力以使你的web层具备横向扩展能力毫无关系,您的流量将限于负载平衡器的能力。

选择合适的可扩展方法取决于你想要的规模和预算。事实上如果有人说有一个“放之四海而皆准“的解决办法,请不要相信他们。如果下次您参加聚会讨论时,有人开始“可扩展性“这个话题,请首先问他们可扩展性的含义。

参考文章

http://www.jroller.com/cpurdy/entry/my_linear_scalability_is_bigger

什么是系统的可扩展性?相关推荐

  1. 什么叫系统的可扩展性?

    看是否符合以下2点: 简单的增加服务器数量即可提高系统的吞吐量等性能指标. 支持单点登录. 注意不是"应用程序"的可扩展性. 转载于:https://blog.51cto.com/ ...

  2. 人月聊IT:对业务系统的可扩展性设计思考

    人月聊 IT 读完需要 9 分钟 速读仅需 3 分钟 对于业务系统本身在架构设计的时候考虑扩展,原来更多的都是谈的 IT 基础技术架构本身的高可用性和高扩展性.而对于业务系统扩展性,简单来说就是如何灵 ...

  3. 架构--系统的可扩展性

    1.利用分布式消息队列降低系统间的耦合度     a.事件驱动式编程     b.分布式消息队列         MQ,redis 2.利用分布式服务提高系统可复用度     a.webservice ...

  4. 后台系统可扩展性学习笔记(十二)NoSQL

    文章目录 NoSQL定义 NoSQL种类 键值存储 文档存储 宽列存储 图形数据库 NoSQL 意味着什么 ACID vs. BASE SQL or NoSQL NoSQL定义 不同于关系型数据库,N ...

  5. 后台系统可扩展性学习笔记(十)Database Partitioning

    为了提升数据库的处理能力,我们把单库扩展成多库,并通过更新同步机制(即Replication)来保证多份数据的一致性.然而,在 各种复制方案下,每个数据库都持有一份完整数据,基于全量数据提供增删改查服 ...

  6. 【分布式系统工程实现】系统可扩展性演化

    一般来说,只要多台机器通过互相协调共同执行某项任务,我们都会将这套系统称为"分布式系统",这样显得更有技术含量.从这个意义上讲,Memcache集群,Mysql sharding集 ...

  7. 集群服务器分析系统,集群服务器系统可扩展性的研究与实现

    摘要: 随着网络的广泛普及,一方面Internet与网络硬件,带宽在发展速度上的不平衡越来越成为制约发展的瓶颈,另一方面未来网络服务对可用性,可靠性,可管理性提出越来越严格的要求,如何能在发展速度和服 ...

  8. 科普一下,什么是网站系统的性能,可用性,可伸缩性,可扩展性?

    最近在读李智慧大拿写的<<大型网站技术架构--核心原理与案例分析>,其中第三节提到了大型网站的核心架构要素,感觉受益匪浅,总结的非常到位.读完之后,马上总结一下,也算是对自己爱不释手 ...

  9. 系统架构设计(3)-可扩展性

    即使系统现在可靠,不代表将来一定可靠.发生退化的最常见原因是负载增加:并发用户从最初的10,000 增长到 100,000或系统目前处理数据量超出之前很多倍. 可扩展性,描述系统应对负载增加的能力.它 ...

最新文章

  1. zendopcache代替APC效果不错
  2. 整理一些提高C#编程性能的技巧
  3. SESSIONS.ser 的问题
  4. Oracle中dmp/dmpdp导出,imp/impdp导入
  5. 太香了!4999元就能入手iPhone 11 最高降价达900元
  6. python程序实现excel排序_python初学—-实现excel里面读数据进行排序(改进算法)
  7. 运行gedit报No protocol specified
  8. PAT 乙级1016 部分A+B(C语言)
  9. 什么才是一份好的AI求职简历?
  10. JQuery学习系列(三)语法
  11. Java货币金额转换为大写形式
  12. TwinCAT 3 马达程序
  13. matlab伽马分布,伽马分布(Γ分布的分布函数)
  14. 2022年新冠疫情后上海的电子商务,数字化经济可能的新趋势
  15. 网络打印机安装教程:HP LaserJet Pro MFP M226dw,Windows解决外网无法使用打印机问题
  16. 正确获取星期几(Calendar.DAY_OF_WEEK)
  17. Visual Studio 2017 安装及使用(新手)
  18. html点击除某个元素之外的元素的事件添加技巧
  19. 力扣解法汇总917-仅仅反转字母
  20. HDU 6187 Destroy Walls

热门文章

  1. STM32F767时钟树分析
  2. Python全国二级等级考试 资源!
  3. Windos下用setx.exe命令行模式下永久设置系统环境变量(转)
  4. 如何修改树莓派系统时间
  5. iOS 布局 Masonry详解
  6. 摄影教室:数码摄影区域曝光法实用教程
  7. Unity ForceMode
  8. TIFS_2013_Empirical Evaluation and New Design for Fighting Evolving Twitter Spammers
  9. 关苏哲-洞察问题本质,解决工作难题
  10. 20172327 2018-2019-1《程序设计与数据结构》课程总结