【韧性设计】节流模式
控制应用程序实例、单个租户或整个服务使用的资源消耗。这可以使系统继续运行并满足服务水平协议,即使需求增加对资源造成极大负载。
背景和问题
云应用程序的负载通常会根据活动用户的数量或他们正在执行的活动类型而随时间变化。例如,更多用户可能会在工作时间处于活跃状态,或者系统可能需要在每个月底执行计算成本高昂的分析。活动中也可能出现突然的和意料之外的爆发。如果系统的处理需求超过了可用资源的容量,那么它的性能就会很差,甚至会失败。如果系统必须满足商定的服务水平,则此类故障可能是不可接受的。
有许多策略可用于处理云中的不同负载,具体取决于应用程序的业务目标。一种策略是使用自动缩放在任何给定时间将供应的资源与用户需求相匹配。这有可能始终如一地满足用户需求,同时优化运行成本。但是,虽然自动缩放可以触发额外资源的配置,但这种配置并不是立即的。如果需求快速增长,可能会出现资源短缺的时间窗口。
解决方案
自动缩放的另一种策略是允许应用程序仅在某个限制内使用资源,然后在达到此限制时限制它们。系统应该监控它是如何使用资源的,以便当使用量超过阈值时,它可以限制来自一个或多个用户的请求。这将使系统能够继续运行并满足任何现有的服务水平协议 (SLA)。有关监控资源使用情况的更多信息,请参阅 Instrumentation and Telemetry Guidance。
该系统可以实施多种节流策略,包括:
拒绝在给定时间段内每秒访问系统 API 超过 n 次的单个用户的请求。这需要系统计量每个租户或运行应用程序的用户的资源使用情况。有关详细信息,请参阅服务计量指南。
禁用或降低选定非必要服务的功能,以便必要服务可以在有足够资源的情况下畅通无阻地运行。例如,如果应用程序正在流式传输视频输出,它可以切换到较低的分辨率。
使用负载均衡来平滑活动量(基于队列的负载均衡模式更详细地介绍了这种方法)。在多租户环境中,这种方法会降低每个租户的性能。如果系统必须支持具有不同 SLA 的租户组合,则可能会立即执行高价值租户的工作。可以推迟对其他租户的请求,并在积压情况缓解后进行处理。优先队列模式可以用来帮助实现这种方法。
推迟代表较低优先级的应用程序或租户执行的操作。这些操作可以暂停或限制,但会生成一个异常通知租户系统正忙,稍后应重试该操作。
该图显示了使用三个功能的应用程序的资源使用(内存、CPU、带宽和其他因素的组合)与时间的面积图。特性是功能的一个区域,例如执行一组特定任务的组件、执行复杂计算的一段代码或提供诸如内存缓存之类的服务的元素。这些特征标记为 A、B 和 C。
特性线正下方的区域指示应用程序在调用此特性时使用的资源。例如,功能 A 的线下方的区域显示正在使用功能 A 的应用程序使用的资源,功能 A 和功能 B 的线之间的区域表示调用功能 B 的应用程序使用的资源。聚合区域每个功能都显示系统的总资源使用情况。
上图说明了延迟操作的影响。就在时间 T1 之前,分配给使用这些功能的所有应用程序的总资源达到阈值(资源使用限制)。此时,应用程序有耗尽可用资源的危险。在这个系统中,功能 B 不如功能 A 或功能 C 重要,因此它被暂时禁用并且它正在使用的资源被释放。在时间 T1 和 T2 之间,使用功能 A 和功能 C 的应用程序继续正常运行。最终,这两个功能的资源使用减少到在时间 T2 有足够的容量再次启用功能 B 的程度。
自动缩放和限制方法也可以结合使用,以帮助保持应用程序响应并在 SLA 范围内。如果预计需求将保持高位,则在系统横向扩展时,节流提供了一种临时解决方案。此时,可以恢复系统的全部功能。
下图显示了系统中运行的所有应用程序对时间的总体资源使用情况的区域图,并说明了如何将限制与自动缩放结合起来。
在时间 T1,达到指定资源使用的软限制的阈值。此时,系统可以开始横向扩展。但是,如果新资源没有足够快地可用,则现有资源可能会耗尽,系统可能会失败。如前所述,为防止这种情况发生,系统会暂时受到限制。当自动缩放完成并且额外的资源可用时,可以放松限制。
问题和考虑
在决定如何实现此模式时,您应该考虑以下几点:
限制应用程序和使用的策略是影响整个系统设计的架构决策。应该在应用程序设计过程的早期考虑节流,因为一旦实现了系统就不容易添加。
必须快速执行节流。系统必须能够检测到活动的增加并做出相应的反应。系统还必须能够在负载减轻后迅速恢复到原始状态。这需要持续捕获和监控适当的性能数据。
如果服务需要暂时拒绝用户请求,它应该返回特定的错误代码,以便客户端应用程序了解拒绝执行操作的原因是由于限制。客户端应用程序可以在重试请求之前等待一段时间。
系统自动缩放时,节流可用作临时措施。在某些情况下,如果活动突然爆发并且预计不会长期存在,则最好简单地限制而不是扩展,因为扩展会大大增加运行成本。
如果在系统自动缩放时将节流用作临时措施,并且如果资源需求增长非常快,则系统可能无法继续运行,即使在节流模式下运行也是如此。如果这不可接受,请考虑保持更大的容量储备并配置更积极的自动缩放。
何时使用此模式
使用此模式:
确保系统继续满足服务水平协议。
防止单个租户垄断应用程序提供的资源。
处理活动的突发。
通过限制保持系统运行所需的最大资源水平来帮助优化系统成本。
例子
最后一张图说明了如何在多租户系统中实现节流。每个租户组织的用户都可以访问云托管的应用程序,并在其中填写和提交调查。该应用程序包含监控这些用户向应用程序提交请求的速率的工具。
为了防止来自一个租户的用户影响应用程序对所有其他用户的响应能力和可用性,对来自任何一个租户的用户每秒可以提交的请求数施加了限制。应用程序阻止超过此限制的请求。
下一步
在实施此模式时,以下指南也可能是相关的:
仪器仪表和遥测指导。限制取决于收集有关服务使用量的信息。描述如何生成和捕获自定义监控信息。
服务计量指南。描述如何计量服务的使用,以了解它们的使用方式。此信息可用于确定如何限制服务。
自动缩放指导。节流可用作系统自动缩放时的临时措施,或消除系统自动缩放的需要。包含有关自动缩放策略的信息。
相关指导
在实现此模式时,以下模式也可能是相关的:
基于队列的负载均衡模式。基于队列的负载均衡是实现节流的常用机制。队列可以充当缓冲区,帮助平衡应用程序发送到服务的请求的速率。
优先队列模式。系统可以使用优先队列作为其节流策略的一部分,以维持关键或更高价值应用程序的性能,同时降低不太重要的应用程序的性能。
本文 | https://www.jiagoushi.pro/ms-throttling-pattern | |
讨论:知识星球【首席架构师圈】或者加微信小号【ca_cto】或者加QQ群【792862318】 | ||
公众号 |
【jiagoushipro】 【超级架构师】 精彩图文详解架构方法论,架构实践,技术原理,技术趋势。 我们在等你,赶快扫描关注吧。 |
|
微信小号 |
【ca_cea】 50000人社区,讨论:企业架构,云计算,大数据,数据科学,物联网,人工智能,安全,全栈开发,DevOps,数字化. |
|
QQ群 |
【792862318】深度交流企业架构,业务架构,应用架构,数据架构,技术架构,集成架构,安全架构。以及大数据,云计算,物联网,人工智能等各种新兴技术。 加QQ群,有珍贵的报告和干货资料分享。 |
|
视频号 |
【超级架构师】 1分钟快速了解架构相关的基本概念,模型,方法,经验。 每天1分钟,架构心中熟。 |
|
知识星球 | 【首席架构师圈】向大咖提问,近距离接触,或者获得私密资料分享。 | |
喜马拉雅 | 【超级架构师】路上或者车上了解最新黑科技资讯,架构心得。 | 【智能时刻,架构君和你聊黑科技】 |
知识星球 | 认识更多朋友,职场和技术闲聊。 | 知识星球【职场和技术】 |
微博 | 【超级架构师】 | 智能时刻 |
哔哩哔哩 | 【超级架构师】 | |
抖音 | 【cea_cio】超级架构师 | |
快手 | 【cea_cio_cto】超级架构师 | |
小红书 | 【cea_csa_cto】超级架构师 | |
网站 | CIO(首席信息官) | https://cio.ceo |
CIO,CTO和CDO | https://cioctocdo.com | |
应用开发和开发平台 | https://apaas.dev | |
开发信息网 | https://xinxi.dev | |
首席架构师社区 | https://jiagoushi.pro | |
超级架构师 | https://jiagou.dev | |
企业技术培训 | https://peixun.dev |
谢谢大家关注,转发,点赞和点在看。
【韧性设计】节流模式相关推荐
- 云计算设计模式(二十三)——Throttling节流模式
云计算设计模式(二十三)--Throttling节流模式 控制由应用程序使用,一个单独的租户或整个服务的一个实例的资源的消耗.这样的模式能够同意系统继续执行并满足服务水平协议.即使当添加需求的资源放置 ...
- JS设计模式—节流模式的实际应用
在实际工作中,我们会经常遇到这样的业务场景,比如点击按钮提交表单,点击一次发一次请求,如果快速点击多次会发送多次请求,这样发送了多次请求是我们不愿意看到的.又比如输入框我们输入内容会调搜索的接口,那么 ...
- 电子产品设计流程_消费类电子产品设计思维模式是什么?
消费类电子产品是指围绕着消费者应用而设计的,与生活.工作.娱乐息息相关的电子类产品,这类电子产品的目的是实现消费者自由选择.使用和享用.从目前的定义和市场情况来看,这类产品通常泛指电脑.手机.平板.相 ...
- Atitit. 数据约束 校验 原理理论与 架构设计 理念模式java php c#.net js javascript mysql oracle...
Atitit. 数据约束 校验 原理理论与 架构设计 理念模式java php c#.net js javascript mysql oracle 1. 主键1 2. uniq index2 3. ...
- 设计模式视频教程——【从设计到模式】
准备了好久的设计模式教程,最终在昨天周末录制完毕.当晚上传到网易云课堂.第二天就通过了审核,这次网易工作人员的工作效率还是相当能够的. http://study.163.com/course/cour ...
- 聊聊那些专为算法设计的模式——模板方法模式
AI越来越火热,人工智能已然成风!而人工智能最重要是各种算法,因此机器学习越来越受到追捧,算法越来越被重视. 作为一个算法的研究者,写出一手高级算法当然是令人兴奋的一件事!但你是否有时会有这种感觉: ...
- 第五章--第三节:设计复用模式(pattern)
第五章:面向软件构造的可复用性的构建方法 第三节:设计复用模式(pattern) 问题一:复用模式的类型 Creational patterns 创建型模式 Structural patterns 结 ...
- 与成都嘉兰图合作了 开启工业设计众包模式
2016年2月24日,猿团与成都嘉兰图设计有限公司达成战略合作,开启工业设计众包模式,这意味着猿团未来将在坚持软件众包.股权众筹.IT教育发展的同时,兼并智能硬件发展. 成都嘉兰图设计有限公司是中国本 ...
- 聊聊那些专为算法设计的模式——访问模式
AI越来越火热,人工智能已然成风!而人工智能最重要是各种算法,因此机器学习越来越受到追捧,算法越来越被重视. 作为一个算法的研究者,写出一手高级算法当然是令人兴奋的一件事!但你是否有时会有这种感觉: ...
最新文章
- 结束下面sql块_如何执行超过100M的SQL脚本?
- 文本挖掘预处理之向量化与Hash Trick
- mysql 更改 uf_mysql 常用修改语句
- boost::mpl模块实现find_if相关的测试程序
- CodeForces - 1484E Skyline Photo(dp+单调栈)
- 基于知识图谱的小微企业贷款申请反欺诈方案
- 131_Power Query之获取钉钉日志自动刷新Power BI报告
- 恣无忌惮的拼音及解释
- Android FrameWork——Binder机制详解(1)
- mysql首字母排序,抛弃传统的php首字母排序
- 手机 html宽度超出屏幕,解决华为手机用rem单位,内容超出屏幕宽度问题
- 超实用的!南京南站最新停车指南来了
- buildroot_buildroot-我对多平台发行版创作的经验
- 【大数据入门核心技术-Tez】(三)Tez与Hive整合
- 安搭Share:小康时代新青年
- 清云小程序教程十五:主轴与交叉轴一
- 期货柜台怎样进行配置?
- 计算机考研复试面试常问问题 计算机网络篇(上)
- 海康大华等摄像头RTSP低延迟(1秒以内)网页无插件播放解决方案
- 小诗一首《钗头凤·七夕夜》
热门文章
- 数据防泄密(DLP)系统
- 百度搜索结果页面的参数_反馈搜索结果用时(rsv_sug4)
- java版Spring Cloud+b2b2c多商户分布式微服务
- Myeclipse10怎么找到 Servers
- SSD(ECCV 2016)
- {“msg“:“参数错误“,“code“:400}:问题
- dva model数据管理
- tsp问题——遗传算法解决
- 【NLP】语料库和词汇知识库
- 靠着“反转”设计,这些短视频火了