作者 Gavin Terrill 译者 郭晓刚 发布于 2007年10月7日 下午4时2分
Architecture 主题 性能和可伸缩性 标签
并行计算,
网格计算, 负载均衡
“可伸缩性(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?
分享到:
相关推荐
在Android开发中,创建可伸缩的控件是一项常见的需求,尤其在设计用户界面时,为了提供更好的用户体验,开发者往往需要实现自定义的动画效果。本文将深入探讨如何基于API 17创建一个可伸缩的Android控件,并讨论如何...
标题中的“你为什么一个要分成3个包,被你啃了”似乎是在戏谑地讨论一个软件或系统设计的问题,即为什么将一个整体拆分为三个部分。这可能涉及到软件工程中的模块化、分层设计或者组件化思想。在IT行业中,这种做法...
运维是互联网业务中不可或缺的一环,它涉及到基础设施的建设和维护,确保线上服务的稳定性和高可用性。随着互联网业务规模的扩大,运维工作逐渐细化,形成了多种专业化的岗位。这篇文章将探讨运维的发展方向,帮助你...
另外,这种文件格式还包含了以前 MPEG 压缩标准所不具备的比特率的可伸缩性、动画精灵、交互性甚至版权保护等一些特殊功能。这 种 视频格式的文件扩展名包括.asf、.mov 和 DivX AVI 等。 需要注意的是,MPEG-3 编码...
这种模式提高了系统的可伸缩性和容错性,但增加了部署和管理的复杂性。 3. 客户-服务器(C/S)架构:客户端向服务器发送请求,服务器处理请求并返回结果。这种模式广泛应用于网络应用,但客户端可能需要处理大量...
这种架构可以提高系统的可伸缩性和容错性。 4. C++在软件架构中的角色:C++是一种强大的、面向对象的编程语言,常用于构建高性能、低级别的系统组件。在软件架构中,C++可以用于编写系统核心或关键性能敏感的部分。...
分布式架构的目标是通过解耦各个组件,提高系统的可伸缩性、容错性和灵活性。它涉及到负载均衡、服务发现、通信协议、数据一致性、错误处理等多个关键领域。书籍《架构探险:从零开始写分布式服务架构》可能会涵盖...
同时,学习运维知识,如Docker容器化、Kubernetes集群管理,能提高部署效率和系统的可伸缩性。 7. **持续集成/持续交付(CI/CD)**:使用Jenkins、GitLab CI/CD等工具实现代码的自动构建、测试和部署,加速开发迭代...
而分布式和微服务是现代互联网应用的重要设计模式,它们允许我们将大型复杂系统分解为可独立部署的小型服务,提高系统的可伸缩性、灵活性和容错性。 基础篇可能涵盖了SpringCloud的基础概念和使用方法,如Eureka...
5. **微服务架构**:将大型应用拆分为一系列小型、独立的服务,每个服务都可以单独部署和扩展,从而提高系统的可伸缩性和可靠性。 6. **并行计算**:利用多核处理器的优势,通过并行计算可以同时处理多个任务,提高...
稳定性提供了结构的坚固,而四边形的可变性则允许了设计的灵活性。在实际问题中,我们需要根据需求来选择和利用这两种特性。 课堂检测部分涵盖了对三角形稳定性和四边形不稳定性理解的检验,包括判断题和应用题,...
3. **差异化策略**:“稍微多花点钱,你就会明白为什么有那么多人喜爱‘克拉涅特’了”,这是通过比较和差异化展示产品的价值,数据库中的市场细分分析能帮助找出产品的独特卖点。 4. **质量标准**:“全球以此为...
这些组件协同工作,构建出具有高可用性、可伸缩性和安全性的应用。 1. **Servlet**:Servlet是Java Web应用的基础,负责处理HTTP请求。在这个拍卖系统中,Servlet可能被用来接收用户的出价请求,更新拍卖品的状态,...
这意味着开发者可以在WebLogic Server上构建企业级应用,利用Java EE带来的模块化、可伸缩性和安全性特性。 BEA WebLogic Server 8.1版本 文档中提及的是WebLogic Server 8.1版本。虽然这是一个较早的版本,但其...
云计算技术是现代信息技术的核心之一,它通过互联网提供动态的、可伸缩的、虚拟化的资源,用户无需了解提供资源的底层基础设施。在农业领域,云计算可以大幅提升农业生产和管理的效率,例如在邯郸市测土配方施肥“一...
通过这次实习,我对建筑行业的实际操作有了更深的体会,明白了理论知识与实践操作的紧密结合对于成为一名合格的建筑专业人才的重要性。这次工地实习经历无疑是我专业学习道路上的重要里程碑,它为我未来的职业生涯...
在理解这些概念时,首先要明白线性变换是数学中一种基本的操作,它将一个向量空间中的向量映射到自身或其他向量空间。矩阵是对这种线性变换的一种表示方式,在特定基下,线性变换的矩阵可以简化为对角矩阵,这使得...
此外,AMBA还支持多种数据宽度和时钟频率的设备,为设计高性能、可伸缩的系统提供了便利。 AMBA总线技术随着版本的更新也在不断演进。例如,AMBA 4规范引入了AXI(Advanced eXtensible Interface)协议,它被设计为...
【建筑工地实习总结】 在2021年的建筑工地实习中,我深入...总之,这次实习不仅锻炼了我的专业技能,更让我明白了团队协作、沟通协调和责任意识在建筑行业中不可或缺。这段经历将为我未来的职业生涯奠定坚实的基础。