阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

你真的明白什么是可伸缩性吗?

  • 2007-10-07
  • 本文字数:1241 字

    阅读完需:约 4 分钟

“可伸缩性(Scalability)”是软件厂商常常在新闻稿中用到的一个词(也是人们站在饮水机旁谈论的一个词),但这个词在很多情况下都被误解了。例如,很多人说起可伸缩性的时候其实指的是性能和高可用性。Royans K Tharakan 试图回答“什么是可伸缩性”这个问题,他说:

可伸缩性,简单来说,是以更大的规模来做你现在所做的事。伸展一个 Web 应用的规模在于让更多的人使用你的程序。如果你没法找出方法在伸展规模的同时提高性能,没关系。而且只要你可以伸展规模来处理更大数量的用户,那么有几个单点故障(single point of failure)也没关系。

Royans 解释说如今我们在面对规模伸展的时候有两个选择:

  • 纵向的可伸缩性——在同一个逻辑单元内增加资源来提高处理能力。这样的例子包括在现有服务器上增加 CPU,或者在现有的 RAID/SAN 存储中增加硬盘来提高存储量。
  • 横向的可伸缩性——增加更多逻辑单元的资源,并令它们像是一个单元一样工作。大多数集群方案、分布式文件系统、负载平衡都是在帮助你提高横向的可伸缩性。

架构师们都在为达到线性的可伸缩性而挣扎,目的是让系统产出的增长与系统中投入资源的增长保持稳定的比率。然而,增加资源会导致一般耗费(overhead)的额外增长,因此难以达到线性的可伸缩性。Royans 将之称为“伸缩性因子”,并用它来区分各种类型的伸缩能力:

  • 如果在你扩大规模的时候伸缩性因子保持为常数,这种叫做线性伸缩性
  • 但很可能有些组件并不像其他组件那么适应规模的增长。小于 1.0 的伸缩性因子叫做次线性伸缩性
  • 话说回来,也可能因为增加更多组件而获得更佳的性能(在 RAID 系统中跨多个磁盘的 I/O,当磁盘越多,性能越好)。这种叫做超线性伸缩性 。 不过类似情况很少见。
  • 如果应用程序没有专门为可伸缩性而设计,有可能当规模扩大的时候情况会变糟。这种称为负伸缩性

跟软件开发中的许多事物一样,这里也没有适合一切情形的银弹可以解决你的伸缩性问题。Royans 建议说,“如果你急切需要可伸缩性,向纵向发展可能是最容易的”,但注意“不幸的是纵向伸展会随着你的规模增长而越来越昂贵”,而且“无穷的横向线性伸缩性只是难以达到,而无穷的纵向伸缩性绝不可能”。他继续说:

从另一方面来说,横向可伸缩性并不要求你购买越来越昂贵的服务器。它的本意是用普通的存储和服务器方案来实现规模伸展。不过横向可伸缩性也不便宜。应用必须从建造的最底层就加以考虑才能在多台服务器上运行得像一台服务器一样。

Royans 最后建议应该考虑所有的层次才能解决可伸缩性问题:

对于一个成功的 Web 应用,所有的层次都要同样能够应付规模的增长。包括存储层(集群文件系统、S3 等)、数据库层(分区、联合)、应用层(memcached、scaleout、terracota、tomcat clustering 等等)、Web 层、负载平衡、防火墙等等。比如,如果你没办法实现多个负载平衡控制器来处理未来的网络流量,不管你在 Web 层的横向伸缩性上扔下多少钱,都不会有什么效果。你的流量始终被限制在一个负载平衡控制器能够承受的程度。

查看英文原文: Think you know what scalability is?

2007-10-07 16:027745
用户头像

发布了 225 篇内容, 共 60.9 次阅读, 收获喜欢 50 次。

关注

评论

发布
暂无评论
发现更多内容

架构实战营模块 2 作业

陌生流云

架构实战营

Docker下,两分钟极速体验Nacos配置中心

程序员欣宸

Docker nacos 10月月更

改造微服务的时机

穿过生命散发芬芳

微服务 10月月更

【愚公系列】2022年10月 Go教学课程 019-循环结构之for

愚公搬代码

10月月更

面试官:说说JS作用域和作用域链,我是这样回答的

loveX001

JavaScript

ESP32-C3 学习测试 蓝牙 篇(七、GATT 数据通信 — 发送自定义数据)

矜辰所致

蓝牙 ESP32-C3 10月月更

什么是光网络,几张图就可以很好的解释!

wljslmz

光纤 10月月更 光网络 通信网络

C++学习---cstdio的源码学习分析06-关闭文件函数fclose

桑榆

c++ 源码分析 10月月更

深入理解JS作用域链与执行上下文

loveX001

JavaScript

Python应用之寻求两个数对之间的最大乘积

智趣匠

Python语法 10月月更 split函数

React组件之间的通信方式总结(上)

beifeng1996

React

作为Android Coder,你了解注解吗?

子不语Any

后端 java; 10月月更

聊聊前端面试中的js同步与异步问题

loveX001

JavaScript

Python进阶(一)初识Python数据元素:列表&元组

No Silver Bullet

Python 列表 元组 10月月更 数据元素

架构师的十八般武艺:领域建模

agnostic

领域建模

开发者有话说|以码为梦,心向远方,路在脚下

乌龟哥哥

个人成长 10月月更

一文了解 CPython 中的垃圾收集器

宇宙之一粟

Python 垃圾回收算法 垃圾收集器 10月月更

爬虫练习题(一)

张立梵

Python. 10月月更 爬虫案例

一天梳理完React所有面试考察知识点

beifeng1996

React

React组件之间的通信方式总结(下)

beifeng1996

React

Python应用之丑数的判断

智趣匠

Python 10月月更 丑数

JVM——垃圾回收算法

琦彦

Java JVM 垃圾回收 10月月更

2022-10-05:在一个 n x n 的整数矩阵 grid 中, 每一个方格的值 grid[i][j] 表示位置 (i, j) 的平台高度。 当开始下雨时,在时间为 t 时,水池中的水位为 t 。

福大大架构师每日一题

算法 rust 福大大

从这两道题重新理解,JS的this、作用域、闭包、对象

loveX001

JavaScript

React-hooks面试考察知识点汇总

beifeng1996

React

Python进阶(二)初识Python数据元素:字典&时间

No Silver Bullet

Python 时间 字典 10月月更 数据元素

【C语言难点突破】指针和数组名的爱恨情仇

Geek_65222d

10月月更

Python应用之拉力赛求最短时间

智趣匠

10月月更 Python语法应用 函数构建

《Rust for Rustaceans》读书笔记2

袁世超

rust

第九期 - 模块二

wuli洋

陈宗绵|关于研发效能的理想与现实

laofo

DevOps cicd 研发效能 持续集成 持续交付

你真的明白什么是可伸缩性吗?_架构_Gavin Terrill_InfoQ精选文章