在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

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

  • 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:029006
用户头像

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

关注

评论

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

CNStack 2.0:云原生的技术中台

阿里巴巴云原生

阿里云 云原生 技术中台

重识Flutter 用于解决复杂滑动视窗问题的Slivers - part1

编程的平行世界

flutter 前端 an'droid

100 行 shell 写个 Docker

vivo互联网技术

Docker Shell

有关TCP协议,这是我看过讲的最清楚的一篇文章了!

程序员小毕

程序员 TCP 程序人生 计算机网络 架构师

小游戏内测|小游戏脱离微信运行在其它 App

Onegun

微信小程序 小游戏 小游戏开发 微信小程序-游戏

启科量子解决方案实践:使用QuTrunk+AWS Deep Learning AMI(TensorFlow2)构建量子神经网络

启科量子开发者官方号

人工智能 量子计算

在这些工厂、农田、服务区,看到智能中国的草蛇灰线

脑极体

人工智能 华为 许昌

支付对接常用的加密方式介绍以及java代码实现

京东科技开发者

Java 安全 哈希算法 加密算法 非对称加密算法

设计模式-工厂方法模式和抽象工厂模式

C++后台开发

数据结构 设计模式 后端开发 Linux服务器开发 C++开发

算力新话题,畅聊算力之新民生

鲸品堂

算力网络 企业号 2 月 PK 榜

《数字经济全景白皮书》出海篇:选对路径下好棋,热点出海行业如何实现增长?

易观分析

数字化 经济 出海

十年老程序员:再见了Navicat,以后多数据库管理就看这款SQL工具

雨果

sql navicat 数据库管理工具

极客时间运维进阶训练营第十三周作业

9527

ChatGPT集成之前,让我们复习一下即将过时的知识

newbe36524

搜索引擎; ChatGPT

关于小程序游戏变现方式你还知道哪些?

没有用户名丶

前端开发 小程序游戏

Top 5 OSSInsight 年度最佳 MLOps 开源工具

Jina AI

深度学习 开源框架 Jina MLOps OSSInsight.io

架构实战营 10 期 - 作业 6

炮仗

【Rust学习】内存安全探秘:变量的所有权、引用与借用

京东科技开发者

spring rust slice 企业号 2 月 PK 榜 可变引用

谷歌用Bard打响了Chat GPT的第一枪,百度版Chat GPT 何时出炉?

GPU算力

Java高手速成 | 单例模式实现方式——枚举

TiAmo

单例模式 枚举 Java 开发

对线面试官:浅聊一下 Java 虚拟机栈?

王磊

java面试

Sugar BI 增强分析能力全场景解析

XxinQi

数据分析 可视化 BI 商务智能 预测模型

高校数据库/SQL教学用什么样的SQL工具?管理更方便,学习更轻松

雨果

数据库管理工具 :MySQL 数据库 SQL开发工具

BIGO 如何做到夜间同时运行 2.4K 个工作流实例?

白鲸开源

spark 工作流调度 Apache DolphinScheduler 离线计算

前端图片最优化压缩方案

凉城

前端 图片处理 图片压缩 前端图片压缩

可路由计算引擎实现前置数据库

石臻臻的杂货铺

数据库

第六周作业-拆分电商系统为微服务

不爱学习的程序猿

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