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

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

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

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

成本和伸缩性之间的关系

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

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

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

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

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

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

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

注意系统瓶颈

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

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

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

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

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

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

慢服务比故障服务更有害

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

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

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

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

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

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

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

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

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

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

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

标签:
  • 热门焦点
  • 跑分安卓第一!Redmi K60至尊版8月发布!卢伟冰:目标年度性能之王

    8月5日消息,Redmi K60至尊版将于8月发布,在此前举行的战略发布会上,官方该机将搭载搭载天玑9200+处理器,安兔兔V10跑分超177万分,是目前安卓阵营最高的分数
  • JavaScript 混淆及反混淆代码工具

    介绍在我们开始学习反混淆之前,我们首先要了解一下代码混淆。如果不了解代码是如何混淆的,我们可能无法成功对代码进行反混淆,尤其是使用自定义混淆器对其进行混淆时。什么是混
  • 线程通讯的三种方法!通俗易懂

    线程通信是指多个线程之间通过某种机制进行协调和交互,例如,线程等待和通知机制就是线程通讯的主要手段之一。 在 Java 中,线程等待和通知的实现手段有以下几种方式:Object 类下
  • 分布式系统中的CAP理论,面试必问,你理解了嘛?

    对于刚刚接触分布式系统的小伙伴们来说,一提起分布式系统,就感觉高大上,深不可测。而且看了很多书和视频还是一脸懵逼。这篇文章主要使用大白话的方式,带你理解一下分布式系统
  • 2天涨粉255万,又一赛道在抖音爆火

    来源:运营研究社作者 | 张知白编辑 | 杨佩汶设计 | 晏谈梦洁这个暑期,旅游赛道彻底火了:有的「地方」火了——贵州村超旅游收入 1 个月超过 12 亿;有的「博主」火了&m
  • 10天营收超1亿美元,《星铁》比《原神》差在哪?

    来源:伯虎财经作者:陈平安即便你没玩过《原神》,你一定听说过的它的大名。恨它的人把《原神》开服那天称作是中国游戏史上最黑暗的一天,有粉丝因为索尼在PS平台上线《原神》,怒而
  • 花7万退货退款无门:谁在纵容淘宝珠宝商家造假?

    来源:极点商业作者:杨铭在淘宝购买珠宝玉石后,因为保证金不够赔付,店铺关闭,退货退款难、维权无门的比比皆是。“提供相关产品鉴定证书,支持全国复检,可以30天无理由退换货。&
  • Android 14发布:首批适配机型公布

    5月11日消息,谷歌在今天凌晨举行了I/O大会,本次发布会谷歌带来了自家的AI语言模型PaLM 2、谷歌Pixel Fold折叠屏、谷歌Pixel 7a手机,同时发布了Androi
  • OPPO K11评测:旗舰级IMX890加持 2000元档最强影像手机

    【Techweb评测】中端机型用户群体巨大,占了中国目前手机市场的大头,一直以来都是各手机品牌的“必争之地”,其中OPPO K系列机型一直以来都以高品质、
Top