提升系统稳定性:熔断、降级和限流策略详解

news2024/11/29 8:46:57

文章目录

  • 前言
  • 一、熔断(Circuit Breaker)
  • 二、降级(Degradation)
  • 三、限流(Rate Limiting)
  • 四、应用案例
  • 五、小结
  • 推荐阅读

前言

随着互联网业务的快速发展,系统稳定性和高可用性成为现代分布式系统的关键要求。为此,熔断、降级和限流等策略被广泛应用。这些策略不仅能提高系统的 Robustness(稳健性),还能在面对高峰流量时确保服务的连续性和响应速度。本文将详细介绍这三种策略。

一、熔断(Circuit Breaker)

场景:假设我们有一个电子商务网站,提供商品搜索服务。搜索服务调用了商品推荐服务,由于推荐服务在高峰期间出现了延迟或者部分错误,导致搜索服务也开始出现响应延迟或失败。

在这里插入图片描述

应用:为了防止搜索服务因为依赖的推荐服务故障而导致整个系统的崩溃,我们可以使用熔断机制。具体做法是,在搜索服务调用推荐服务的代码中设置熔断器。当推荐服务的失败率达到一定阈值时,熔断器将触发,搜索服务会立即拒绝新的请求,而不是等待超时或者进一步的故障扩散。一段时间后,熔断器会尝试半开启状态,允许少量请求通过,如果成功率良好,则恢复到关闭状态,否则重新进入开启状态。

效果:通过熔断机制,搜索服务在推荐服务出现故障时能够快速失败,防止请求在系统内部持续堆积,保护整体系统免受推荐服务故障的影响,提升了系统的稳定性和可用性。

二、降级(Degradation)

场景:在高峰时段,为了保证核心功能的稳定性,我们可以考虑降级非核心功能。

应用:假设电商网站的商品搜索服务包含了推荐商品、促销广告等附加信息,这些信息对于用户体验很重要,但不是搜索主功能的核心。在高峰期间,可以通过配置降级策略,暂时关闭推荐商品或者促销广告的展示,只保留基本的商品搜索功能,以保证搜索服务的响应速度和稳定性。

效果:降级策略可以减少不必要的资源消耗,集中精力保障核心业务的正常运行,同时减少了非核心功能对系统性能的影响,提升了系统的鲁棒性和可用性。

实现方式:

  1. 静态页面降级:在系统过载时,返回简化的静态页面而不是动态生成的内容。
  2. 功能降级:禁用非核心功能,例如推荐系统、评论系统等,只保留核心功能。
  3. 接口降级:提供简化版的接口响应,避免复杂的业务处理。

三、限流(Rate Limiting)

场景:在电商网站的搜索服务中,为了防止突发的用户请求过多导致系统负载过重,我们可以使用限流策略。

应用:通过设置每秒钟允许的最大搜索请求次数,例如每秒最多处理 100 次搜索请求。当搜索请求超过这个限制时,系统会拒绝多余的请求,或者通过等待队列进行排队处理。这样可以有效控制系统的负载,防止搜索服务因为过多请求而导致响应速度变慢或者崩溃。

效果:限流策略可以平滑处理系统的请求流量,保护系统免受过载攻击或者异常流量的影响,避免系统资源被耗尽,从而保证了系统的稳定性和可用性。
综上所述,熔断、降级和限流是在分布式系统中常用的三种策略,通过合理配置和使用,可以有效提升系统的稳定性、可靠性和抗干扰能力,保证系统能够在各种复杂和恶劣的环境下稳定运行。

实现方式

  1. 固定窗口算法:将时间划分为固定的窗口,每个窗口内只允许一定数量的请求。
  2. 滑动窗口算法:类似固定窗口,但允许多个窗口滑动,以更加平滑地控制请求速率。
  3. 漏桶算法:请求以恒定速率流出,超过流出速率的请求会被缓冲或丢弃。
  4. 令牌桶算法:系统按固定速率生成令牌,请求到达时需要消耗一个令牌。没有令牌时,新的请求会被拒绝或排队等待。

四、应用案例

假设一个在线视频平台在某次热门直播期间流量激增,可以采取以下综合措施:

  1. 限流:对进入直播页面的请求进行限流,确保系统不会因过载而崩溃。
  2. 降级:禁用实时弹幕和评论功能,仅保留视频播放功能,以降低系统压力。
  3. 熔断:如果推荐服务或用户信息服务不可用,触发熔断机制,直接返回缓存数据或默认值,确保用户能正常观看直播。

五、小结

通过实施熔断、降级和限流策略,系统能够更好地应对各种异常情况,保持高可用性和稳定性。在实际应用中,应根据系统的具体需求和特点,灵活选择和组合这些策略,以实现最佳的效果。

推荐阅读

  1. 构建安全稳定的应用:Spring Security 实用指南
  2. 深入探究 Spring Boot Starter:从概念到实践
  3. 深入理解 Java 中的 volatile 关键字
  4. Spring 三级缓存
  5. 深入了解 MyBatis 插件:定制化你的持久层框架

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1902626.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux wget报未找到命令

wget报未找到命令需要安装wget 1、下载wget安装文件,本次于华为云资源镜像下载 地址:https://mirrors.huaweicloud.com/centos-vault/7.8.2003/os/x86_64/Packages/ 2、下载后上传到安装服务器/install_package,执行命令安装 rpm -ivh /i…

idea创建的maven项目pom文件引入的坐标报红原因

如下所示 我们在引入某些依赖坐标的时候,即使点击了右上角的mavne刷新之后还是报红。 其实这是正常现象,实际上是我们的本地仓库当中没有这些依赖坐标,而idea就会通过报红来标记这些依赖来说明在我们的本地仓库是不存在的。 那有的同学就会…

JavaScript主要用途和方向

JavaScript是一种广泛使用的编程语言,可以用于开发各种类型的应用程序,包括Web应用程序、桌面应用程序、移动应用程序和游戏等。以下是博主整理的JavaScript可以做的一些事情: 1. Web开发: JavaScript是Web开发的核心语言之一&…

接口自动化测试思路和实战(5):【推荐】混合测试自动化框架(关键字+数据驱动)

混合测试自动化框架(关键字数据驱动) 关键字驱动或表驱动的测试框架 这个框架需要开发数据表和关键字。这些数据表和关键字独立于执行它们的测试自动化工具,并可以用来“驱动"待测应用程序和数据的测试脚本代码,关键字驱动测试看上去与手工测…

构建滑块组件_第 2 部分

本篇我们继续学习滑块组件,让我们把滑块组件构建的更好; ● 首先,我们想要获取组件的三个点,首先在获取到他的HTML元素 const dotContainer document.querySelector(.dots);● 接着遍历 slides 数组,并在动态创建 元…

系统测试-缺陷管理学习

目录 1、什么是缺陷 2、缺陷的类型 3、缺陷的交付物 4、缺陷报告的基本格式 1、什么是缺陷 就是软件最终的功能实现跟需求不一致的现象就是缺陷 2、缺陷的类型 做少了,做错了,做多了,做差了 3、缺陷的交付物 缺陷报告:也叫…

贝尔曼方程(Bellman Equation)

贝尔曼方程(Bellman Equation) 贝尔曼方程(Bellman Equation)是动态规划和强化学习中的核心概念,用于描述最优决策问题中的价值函数的递归关系。它为状态值函数和动作值函数提供了一个重要的递推公式,帮助我们计算每个状态或状态-动作对的预期回报。 贝尔曼方程的原理 …

冯诺依曼体系结构与操作系统(Linux)

文章目录 前言冯诺依曼体系结构(硬件)操作系统(软件)总结 前言 冯诺依曼体系结构(硬件) 上图就是冯诺依曼体系结构图,主要包括输入设备,输出设备,存储器,运算…

基于机器学习(支持向量机,孤立森林,鲁棒协方差与层次聚类)的机械振动信号异常检测算法(MATLAB 2021B)

机械设备异常检测方法流程一般如下所示。 首先利用传感器采集机械运行过程中的状态信息,包括,振动、声音、压力、温度等。然后采用合适的信号处理技术对采集到机械信号进行分析处理,提取能够准确反映机械运行状态的特征。最后采用合理的异常决…

计算组的妙用!!页面权限控制

需求描述: 某些特殊的场景下,针对某页看板,需要进行数据权限卡控,但是又不能对全部的数据进行RLS处理,这种情况下可以利用计算组来解决这个需求。 实际场景 事实表包含产品维度和销售维度 两个维度属于同一公司下面的…

Redies基础篇(一)

Redis 是一个高性能的key-value数据库。Redies支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的&#xff…

FreeRTOS——事件标志组

一、事件标志组 前面所介绍的队列、信号量,只能实现与单个任务进行同步。而有时候某个任务可能需要与多个事件或任务进行同步,此时,事件标志组的作用就凸显出来 1.1 事件标志组简介 事件标志位:用一个位,来表示事件是…

【C语言小知识】缓冲区

缓冲区 当我们使用printf()将数据显示在屏幕上,或者使用scanf()函数将数据输入到电脑里,我们是否会产生些许疑问?为何输入的字符会直接显示到屏幕上等等。这里需要介绍一个C语言中的一个关键概念——缓冲区。 当我们使用老式系统进行运行代码…

2024.8月28号杭州电商博览会,在杭州国博举办

2024杭州电商新渠道博览会暨集脉电商节 时间:2024年08月28-30日 地点:杭州国际博览中心(G20) 主办单位:浙江集脉展览有限公司、杭州华维展览有限公司 承办单位:浙江集脉展览有限公司 报名参展&#xf…

Python 编程快速上手——让繁琐工作自动化(第2版)读书笔记01 Python基础快速过关

Python 编程快速上手——让繁琐工作自动化(第2版)读书笔记01 Python基础快速过关 1 python基础概念 Python提供了高效的高级数据结构,还能简单有效地面向对象编程。 python运算符顺序 **——%——//——/——*——-——python中常见的数据…

【Linux】什么是进程间通信?方式有哪些?本质理解?

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

H5 Canvas实现转盘效果,控制指定数字

效果图 实现思路&#xff1a; 用Canvas画圆&#xff0c;然后再画扇形&#xff0c;然后中奖的开始用一张图片代替&#xff0c;点击的时候触发转动效果。 实现代码&#xff1a; <!DOCTYPE html> <html> <head><meta charset"utf-8"><tit…

开源六轴协作机械臂myCobot 280接入GPT4大模型!实现更复杂和智能化的任务

本文已经或者同济子豪兄作者授权对文章进行编辑和转载 引言 随着人工智能和机器人技术的快速发展&#xff0c;机械臂在工业、医疗和服务业等领域的应用越来越广泛。通过结合大模型和多模态AI&#xff0c;机械臂能够实现更加复杂和智能化的任务&#xff0c;提升了人机协作的效率…

孟德尔随机化 --痛风与酒精消耗量

写在前面 最近看了微信公众号&#xff0c;jimmy谈到生信与基础之间&#xff0c;个人觉得生信与基础技术是无高低之分的&#xff0c;本质上都是科研中为了证实结果的一个工具。生信的实质是用计算机分析数据&#xff0c;接触基础比较好&#xff0c;感觉是实验操作。分析上游为实…

ESD管ESD113-B1-02EL(S)国产替代型号ULC0342CDNH,ULC0321CDNH

雷卯型号全&#xff0c;能替代大量infineon型号。具体如下&#xff1a; 应用于3.3V高速信号静电保护器件&#xff0c;infineon的ESD113-B1-02EL(DFN1006)和ESD113-B1-02ELS(DFN0603)&#xff0c;交期长&#xff0c;价格高。已经有很多客户选雷卯的 ULC0342CDNH(DFN1006)&#…