谈谈可伸缩性

举报
大数据小粉 发表于 2017/03/24 16:10:51 2017/03/24
【摘要】 可伸缩性(Scalability)是业界的热门词汇,在常见的技术文章中把可伸缩性和性能、可用性(可靠性)等非功能属性需求并列,eBay架构师甚至把可伸缩性列为级别是0(最高级别)的需求。

可伸缩性(Scalability)是业界的热门词汇,在常见的技术文章中把可伸缩性和性能、可用性(可靠性)等非功能属性需求并列,eBay架构师甚至把可伸缩性列为级别是0(最高级别)的需求。为什么可伸缩性有如此重要的地位?在微软的完美代码(Solid Code)一书中给出的理由是,很多时候软件的成功与否更在于用户群的大小,设计出一个能满足大规模用户需求的软件相当具有挑战性。
可伸缩性是否需要?应该如何考虑和实施可伸缩性设计?个人的理解是极其需要的,尤其在多形态和多核时代,面对不断变化的网络和硬件形态,以及新的多核体系,软件设计如何做到弹性,可伸缩性是关键。下面给出业界对可伸缩性的一些介绍以及设计思路,请大家参考。

可伸缩性的定义
可伸缩性是在硬件能力增加的情况下,系统随着负载上升时提升吞吐量。简单的说,可伸缩性是用更大的方式做更多的事情。这里有两点需要关注,一是硬件能力增加的方式:如果硬件能力是朝着“更大”的方向,比如更快的CPU,更多的内存,那么这种伸缩叫向上伸缩(Scale Up),也叫垂直伸缩;如果硬件能力是朝着“更多”的方向,比如更多的CPU,服务器,那么这种伸缩叫向外伸缩(Scale Out),也叫水平伸缩。见下图:

第二点需要关注的是系统容量提升的幅度,按照提升幅度,伸缩性可以分为线性伸缩性、低线性伸缩性、超线性伸缩性、负伸缩性。可伸缩性设计是使系统尽量趋近线性伸缩,而如果没有针对性的设计,系统的性能可能随着负载的增加而恶化,这就是负伸缩性了。见下图:

需要注意的是,可伸缩性和我们常常看到的(多核)阿门德尔定律是有微妙的区别:阿门德尔定律是描述在计算量一定(即负载不变)的情况下,增加并行的处理单元带来的系统性能的提升。所以阿门德尔曲线中性能加速比是趋近于某个常量,而不是在上图中典型性能有缓慢的提升。

可伸缩性的特点
向外伸缩(Scale Out)是更好的设计方式。对于系统容量不大的情况下,向上伸缩较好,因为只要更换大规格的硬件无需或较少改动软件就可以了。但是对于很大规格的系统,向上伸缩是Impossible的(试想Google的系统吧)。在大规模系统中设计向外伸缩的方式是更合理的选择。
可伸缩性不是性能,而是对性能的增量方式。性能是给定资源后系统的容量,而可伸缩性是增加资源对系统容量的增加幅度。性能提升可以减少对可伸缩性的需求,但性能本身不能解决可伸缩性。举个例子,如果系统的单用户很慢,这是性能问题,如果只是在系统负载很大的情况下单用户很慢,这就是可伸缩性问题。
可伸缩性可以提高可用性。良好的可伸缩性带来的不仅是性能的提升,而且还会有可用性的增加。举个例子,对于多节点的系统,单节点故障不应该造成功能的缺失,通过冗余性、容错性、管理维护等手段可以保证硬件或软件的部分故障不会对用户造成影响。
所以,对于大规模系统来说,良好的可伸缩性可以支持和提高性能和可用性,是系统的关键非功能性属性。

作者 | 陶永祥

转载请注明出处:华为云博客 https://portal.hwclouds.com/blogs

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。