当前位置:首页 > 科技  > 软件

我们一起聊聊软件架构伸缩性法则

来源: 责编: 时间:2024-04-03 09:08:25 124观看
导读对于大部分商业和政府部门的系统,初始的开发和部署更侧重于实现功能的可用性和创新性,而不是可伸缩性。在早期阶段,只要系统能够应对现有的工作负载,开发团队就会优先考虑引入新功能以提升业务价值。然而,随着系统的发展,性

对于大部分商业和政府部门的系统,初始的开发和部署更侧重于实现功能的可用性和创新性,而不是可伸缩性。在早期阶段,只要系统能够应对现有的工作负载,开发团队就会优先考虑引入新功能以提升业务价值。然而,随着系统的发展,性能和可伸缩性逐渐成为关键问题,甚至关乎系统的生存。在这一点上,架构师需负起责任,将系统改造为能够快速响应并支持伸缩性的架构。SbJ28资讯网——每日最新资讯28at.com

成本和伸缩性之间的关系

对系统进行伸缩的一个核心原则是能够方便地添加新资源来处理增长的负载。对于很多系统来说,一个简单而有效的方法是部署多个无状态服务器实例,并使用负载均衡器在这些实例之间分配请求,如下图。SbJ28资讯网——每日最新资讯28at.com

图片图片SbJ28资讯网——每日最新资讯28at.com

在云平台部署资源时,成本主要由两部分构成:SbJ28资讯网——每日最新资讯28at.com

一是每个虚拟机服务器实例的部署成本SbJ28资讯网——每日最新资讯28at.com

二是负载均衡器的成本,后者取决于新的和活跃的请求数量以及处理的数据量。随着请求量的增加,已部署的虚拟机需要具备更高的处理能力,导致成本上升。SbJ28资讯网——每日最新资讯28at.com

同时,负载均衡器的费用也会随着请求和处理的数据量的增加而增长。因此,成本的增加与系统规模的扩大是相互影响的,可伸缩性设计的选择将不可避免地影响到部署成本。忽略这个因素可能导致意外的高昂费用。SbJ28资讯网——每日最新资讯28at.com

为了控制成本,主要有两个策略:采用弹性负载均衡器自动根据实际请求量调整服务器实例的规模;以及提升每个服务器实例的处理能力,通常通过优化服务器配置(如线程数量、连接数量、堆内存大小等)实现。通过精心调整这些参数,可以显著提升性能和处理能力,进而降低成本。SbJ28资讯网——每日最新资讯28at.com

注意系统瓶颈

对一个系统进行伸缩本质上就是要增加它的容量。在上面的示例中,我们通过部署更多的服务器实例来提高请求处理能力。SbJ28资讯网——每日最新资讯28at.com

但是,软件系统是由多个相互依赖的处理元素或微服务组成的,所以在增加一部分微服务容量的同时,不可避免地会被其他一些微服务拖累。在我们的负载均衡示例中,假设服务器实例都连接到同一个共享数据库。随着部署服务器数量的增加,数据库的请求负载也随之增加 (如下图)。SbJ28资讯网——每日最新资讯28at.com

图片图片SbJ28资讯网——每日最新资讯28at.com

达到一定阶段时,数据库性能会成为限制因素,导致访问速度明显下降。SbJ28资讯网——每日最新资讯28at.com

这时,即便增加服务器的处理能力,也无法从根本上解决问题,因为问题出在数据库上。要想实现进一步的系统扩展,就必须增强数据库的处理能力。这可以通过优化查询语句、增配CPU或内存资源、执行数据库复制或分片等多种方式来实现。SbJ28资讯网——每日最新资讯28at.com

当然,还有许多其他方法可以缓解这个问题。系统内的任何共享资源都可能变成性能瓶颈。在增加系统的某个部分的能力时,必须考虑到对下游部分的影响,避免因增强而引起系统的其他部分突然承受不住压力,这种情况可能会导致连锁反应,进而使整个系统崩溃。数据库、消息队列、网络连接的长时间延迟、线程及连接池和共享的微服务等,都是潜在的性能瓶颈所在。一旦面临高流量负载,这些瓶颈点很快就会暴露出来。因此,关键在于一旦瓶颈出现,能够防止系统突然崩溃,并能迅速扩展系统能力以应对。SbJ28资讯网——每日最新资讯28at.com

慢服务比故障服务更有害

在正常情况下,系统应该能够为微服务和数据库提供稳定、低延迟的通信。当系统负载保持在正常的配置水平时,性能是可预测、一致和快速的,如下图所示。SbJ28资讯网——每日最新资讯28at.com

SbJ28资讯网——每日最新资讯28at.com

图片图片SbJ28资讯网——每日最新资讯28at.com

当客户端的请求量超出常规范围时,微服务架构中服务间的请求响应时间会开始延长。这尤其明显当进入的请求负荷超过了某个特定服务(例如服务B)的处理能力时,这时未处理完的请求就会在前置微服务(例如服务A)中累积。因为下游服务的处理速度减缓,导致这个微服务接收到的请求量超过了它能够完成的请求量。SbJ28资讯网——每日最新资讯28at.com

图片图片SbJ28资讯网——每日最新资讯28at.com

当服务因为波动或资源耗竭面临压力过大而无法正常响应客户端请求时,客户端会经历延迟,这种情况可能引起连锁反应,即级联故障——一个响应缓慢的服务导致沿请求链路的请求积压,进而可能造成整个系统的崩溃。SbJ28资讯网——每日最新资讯28at.com

为了防止这种级联故障,可以采用一些架构模式,例如回路断路器和隔板。回路断路器在检测到服务延迟超过预设阈值时,可以自动减少请求流向该服务,或完全切断对其的请求,以防止系统过载。隔板则通过隔离下游服务的故障,保护上游服务不受影响,从而在一个服务出现问题时,避免整个系统受损。这些策略有助于构建出更加弹性和可扩展的系统架构。SbJ28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-81055-0.html我们一起聊聊软件架构伸缩性法则

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 字节二面:为什么SpringBoot的 jar 可以直接运行?

下一篇: 聊聊 Python 中的同步原语,为什么有了 GIL 还需要同步原语

标签:
  • 热门焦点
  • 小米官宣:2023年上半年出货量中国第一!

    小米官宣:2023年上半年出货量中国第一!

    今日早间,小米电视官方微博带来消息,称2023年小米电视上半年出货量达到了中国第一,同时还表示小米电视的巨屏风暴即将开始。“公布一个好消息2023年#小米电视上半年出货量中国
  • 对标苹果的灵动岛 华为带来实况窗功能

    对标苹果的灵动岛 华为带来实况窗功能

    继苹果的灵动岛之后,华为也在今天正式推出了“实况窗”功能。据今天鸿蒙OS 4.0的现场演示显示,华为的实况窗可以更高效的展现出实时通知,比如锁屏上就能看到外卖、打车、银行
  • JavaScript 混淆及反混淆代码工具

    JavaScript 混淆及反混淆代码工具

    介绍在我们开始学习反混淆之前,我们首先要了解一下代码混淆。如果不了解代码是如何混淆的,我们可能无法成功对代码进行反混淆,尤其是使用自定义混淆器对其进行混淆时。什么是混
  • Rust中的高吞吐量流处理

    Rust中的高吞吐量流处理

    作者 | Noz编译 | 王瑞平本篇文章主要介绍了Rust中流处理的概念、方法和优化。作者不仅介绍了流处理的基本概念以及Rust中常用的流处理库,还使用这些库实现了一个流处理程序
  • 掘力计划第 20 期:Flutter 混合开发的混乱之治

    掘力计划第 20 期:Flutter 混合开发的混乱之治

    在掘力计划系列活动第20场,《Flutter 开发实战详解》作者,掘金优秀作者,Github GSY 系列目负责人恋猫的小郭分享了Flutter 混合开发的混乱之治。Flutter 基于自研的 Skia 引擎
  • 分布式系统中的CAP理论,面试必问,你理解了嘛?

    分布式系统中的CAP理论,面试必问,你理解了嘛?

    对于刚刚接触分布式系统的小伙伴们来说,一提起分布式系统,就感觉高大上,深不可测。而且看了很多书和视频还是一脸懵逼。这篇文章主要使用大白话的方式,带你理解一下分布式系统
  • JVM优化:实战OutOfMemoryError异常

    JVM优化:实战OutOfMemoryError异常

    一、Java堆溢出堆内存中主要存放对象、数组等,只要不断地创建这些对象,并且保证 GC Roots 到对象之间有可达路径来避免垃 圾收集回收机制清除这些对象,当这些对象所占空间超过
  • 重估百度丨大模型,能撑起百度的“今天”吗?

    重估百度丨大模型,能撑起百度的“今天”吗?

    自象限原创 作者|程心 罗辑2023年之前,对于自己的“今天”,百度也很迷茫。“新业务到 2022 年底还是 0,希望 2023 年出来一个 1。”这是2022年底,李彦宏
  • iQOO 11S或7月上市:搭载“鸡血版”骁龙8Gen2 史上最强5G Soc

    iQOO 11S或7月上市:搭载“鸡血版”骁龙8Gen2 史上最强5G Soc

    去年底,iQOO推出了“电竞旗舰”iQOO 11系列,作为一款性能强机,iQOO 11不仅全球首发2K 144Hz E6全感屏,搭载了第二代骁龙8平台及144Hz电竞屏,同时在快充
Top