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

服务熔断是指什么?你知道吗?

来源: 责编: 时间:2024-03-19 09:24:23 286观看
导读微服务领域里有个词叫服务熔断,你知道这是啥不?
故事要从我读大学那会说起。
因为功率问题,很多寝室都是不让用吹风筒和热水壶的。
但我那时候头铁,不仅用,而且还同时开了两个热水壶和一个吹风筒。直接给寝室电路来了个压

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

微服务领域里有个词叫服务熔断,你知道这是啥不?
故事要从我读大学那会说起。
因为功率问题,很多寝室都是不让用吹风筒和热水壶的。
但我那时候头铁,不仅用,而且还同时开了两个热水壶和一个吹风筒。直接给寝室电路来了个压测。
不出意外的出了意外,寝室直接停电。
一时间,隔壁寝室灯火通明,我们寝室一片漆黑。
作为本科专业电气工程的靓仔,我们意识到,这妥妥是电路过载导致断路器跳闸了。
于是我们趁社管阿姨不注意,偷偷摸进配电房,手动将断路器开关复位,寝室就来电了。Jfl28资讯网——每日最新资讯28at.com

是真的有惊无险。
如果没有这个断路器,寝室总电路怕是得因为过载全部烧掉,我们几个妥妥会提前进入社会大学。
我能毕业,全靠这个断路器!
看到这里,我们知道了断路器的作用,就是在电路出问题的时候及时断开电路,避免过载,从而保护电路。
在微服务领域,我们也可以借鉴断路器的思路,引入了服务熔断的概念。Jfl28资讯网——每日最新资讯28at.com

服务熔断是什么

服务熔断,也就是 Circuit Breaker,本质上是一种软件设计模式,用于在分布式系统中处理服务调用失败的情况。Jfl28资讯网——每日最新资讯28at.com

假设有个 A 服务调用 B 服务的场景,如果 B 服务已经出现频繁失败的情况,A 继续调用只会加剧 B 服务的负担,严重的时候,有可能导致 B 服务崩溃,甚至出现 B 服务重启后立马被打崩的情况。因此,最好的做法是,在一段时间内先不要再频繁调用 B 服务。Jfl28资讯网——每日最新资讯28at.com

为了实现这个保护效果,我们可以在 A 和 B 之间加一个熔断器。当 B 服务频繁失败时,熔断器可以防止 A 继续频繁调用 B 服务,相当于阻断服务间的请求,并且还能在 B 服务恢复正常之后,恢复 A 对 B 的调用。Jfl28资讯网——每日最新资讯28at.com

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

熔断器的作用Jfl28资讯网——每日最新资讯28at.com

工作原理也和上文提到的宿舍电路里的断路器类似。当服务调用失败的次数超过某个阈值时,熔断器会自动“打开”(Open),阻止进一步的服务调用,防止不断报错重试导致压垮被调用服务。Jfl28资讯网——每日最新资讯28at.com

然后在在一段时间之后,熔断器开始尝试允许少量的请求通过,以检查服务是否已经恢复,也就是所谓的“半打开”(HalfOpen)。Jfl28资讯网——每日最新资讯28at.com

如果这些请求成功,熔断器会“关闭”(Close),系统恢复正常的服务调用;但如果调用还是失败,那熔断器会继续再次回到“打开”(Open)状态。Jfl28资讯网——每日最新资讯28at.com

上面提到的三个状态Open,HalfOpen和Close是服务熔断中非常重要的三个状态。Jfl28资讯网——每日最新资讯28at.com

  •  Closed(关闭):这是熔断器的初始状态。在这种状态下,可以进行服务间调用,熔断器会跟踪服务调用的成功和失败情况。如果失败调用次数,到了某个配置的阈值,熔断器就会切换到 Open(打开)状态。

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

熔断器关闭Jfl28资讯网——每日最新资讯28at.com

  • HalfOpen(半开):保持 Open 状态一段时间后,熔断器会尝试进入 HalfOpen 状态。这个状态下,熔断器会尝试放几个请求通过,看下被调用服务是否已经恢复。如果这些请求成功,熔断器就会回到 Closed 状态;如果失败,那它会退回到 Open 状态。

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

熔断器半打开Jfl28资讯网——每日最新资讯28at.com

  •  Open(打开):当熔断器检测到服务调用连续失败时,它会切换到 Open 状态。在这种状态下,熔断器会阻止所有对服务的调用,直到超时时间过后,或者在 HalfOpen 状态下的探测请求成功。

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

熔断器打开Jfl28资讯网——每日最新资讯28at.com

它们的状态流转关系就像下图这样。Jfl28资讯网——每日最新资讯28at.com

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

熔断状态机Jfl28资讯网——每日最新资讯28at.com

怎么使用熔断器?

可以看出,熔断器的逻辑其实很简单,而且这么通用的功能,必然有现成的库可以直接拿来用。
比如阿里开源的sentinel-golang
使用也比较简单。只需要三步。Jfl28资讯网——每日最新资讯28at.com

1.引入 circuitbreaker 库

"github.com/alibaba/sentinel-golang/core/circuitbreaker"

2.声明熔断规则

通过circuitbreaker.LoadRules加载对应的熔断规则。Jfl28资讯网——每日最新资讯28at.com

_, err = circuitbreaker.LoadRules([]*circuitbreaker.Rule{        // Statistic time span=5s, recoveryTimeout=3s, maxErrorRatio=40%        {            Resource:                     "api_url",            Strategy:                     circuitbreaker.ErrorRatio,            RetryTimeoutMs:               3000,            MinRequestAmount:             10,            StatIntervalMs:               5000,            StatSlidingWindowBucketCount: 10,            Threshold:                    0.4,        },    })

这里面有几个需要注意的地方:Jfl28资讯网——每日最新资讯28at.com

  •  Resource 是想要保护的资源名称,也就是上面提到的 B 服务,这里可以直接使用被调用方的 url。
  •  Strategy 是指熔断策略,示例代码里展示的是错误率,也就是说服务达到 xx 比例的错误率时就会触发熔断。同时这里还支持填其他策略,比如从错误率换成错误次数或者是慢调用的比例个数。
  •  RetryTimeoutMs 是指熔断器打开后经过多长时间后进行重试。在熔断器 Open 期间,请求会被直接拒绝,不会发送到后端 Resource(B 服务)。在指定的超时时间之后,熔断器将尝试发送一个请求以检查后端资源的可用性。
  •  MinRequestAmount 表示在进行熔断之前必须满足的最小请求数量。只有当请求的数量达到或超过这个阈值时,熔断器才会生效。这个参数可以用来避免在系统启动时就触发熔断。
  •  StatIntervalMs 表示统计信息的时间间隔,以毫秒为单位。在这个时间间隔内,熔断器将收集请求的统计信息,用于计算错误率。
  •  Threshold:表示错误率的阈值。当错误率超过这个阈值时,熔断器将触发熔断,停止发送请求到后端资源。

3.加入熔断保护

在需要进行熔断保护的地方,加入下面的代码:Jfl28资讯网——每日最新资讯28at.com

e, b := sentinel.Entry("api_url")        if b == nil {            // 通过检测,不需要熔断,直接执行api调用            err := api_call()            if err != nil {                sentinel.TraceError(e, err)            }            // 保证执行完之后退出资源            e.Exit()        }

上面的 sentinel.Entry()方法内部会自动检测"api_url"这个资源是否需要打开熔断器,如果 api 调用报错了,可以通过 sentinel.TraceError 记录下来,sentinel 内部会根据报错去计算报错率,自动判断要不要熔断。Jfl28资讯网——每日最新资讯28at.com

到这里,就算使用上熔断器的能力啦。Jfl28资讯网——每日最新资讯28at.com

总结

  • 服务熔断是一种软件设计模式,用于分布式系统中处理服务调用失败的情况,可以防止被调用服务因为频繁失败被压垮。它借鉴了电路中的断路器原理,通过监控服务调用的失败率等条件来决定是否阻止进一步的调用,以保护系统免受过载。
  • 服务熔断器有三个主要状态:关闭(Closed)、半开(HalfOpen)和打开(Open),分别对应不同的保护策略。当服务调用失败次数超过阈值时,熔断器打开,阻止服务调用。在一定时间后,熔断器尝试半开状态,允许少量请求通过以测试服务恢复情况。如果服务恢复,熔断器关闭;如果失败,熔断器保持打开状态。
  • 在 go 语言里可以使用 sentinel-golang 库实现熔断功能。

本文链接:http://www.28at.com/showinfo-26-77684-0.html服务熔断是指什么?你知道吗?

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

上一篇: GaussDB WDR分析之集群报告篇

下一篇: 历史上那些臭名昭著的编程错误

标签:
  • 热门焦点
  • 红魔电竞平板评测:大屏幕硬实力

    前言:三年的疫情因为要上网课的原因激活了平板市场,如今网课的时代已经过去,大家的生活都恢复到了正轨,这也就意味着,真正考验平板电脑生存的环境来了。也就是面对着这种残酷的
  • 之家push系统迭代之路

    前言在这个信息爆炸的互联网时代,能够及时准确获取信息是当今社会要解决的关键问题之一。随着之家用户体量和内容规模的不断增大,传统的靠"主动拉"获取信息的方式已不能满足用
  • 在线图片编辑器,支持PSD解析、AI抠图等

    自从我上次分享一个人开发仿造稿定设计的图片编辑器到现在,不知不觉已过去一年时间了,期间我经历了裁员失业、面试找工作碰壁,寒冬下一直没有很好地履行计划.....这些就放在日
  • 使用Webdriver-manager解决浏览器与驱动不匹配所带来自动化无法执行的问题

    1、前言在我们使用 Selenium 进行 UI 自动化测试时,常常会因为浏览器驱动与浏览器版本不匹配,而导致自动化测试无法执行,需要手动去下载对应的驱动版本,并替换原有的驱动,可能还
  • 零售大模型“干中学”,攀爬数字化珠峰

    文/侯煜编辑/cc来源/华尔街科技眼对于绝大多数登山爱好者而言,攀爬珠穆朗玛峰可谓终极目标。攀登珠峰的商业路线有两条,一是尼泊尔境内的南坡路线,一是中国境内的北坡路线。相
  • iQOO Neo8 Pro真机谍照曝光:天玑9200+和V1+旗舰双芯加持

    去年10月,iQOO推出了iQOO Neo7系列机型,不仅搭载了天玑9000+,而且是同价位唯一一款天玑9000+直屏旗舰,一经上市便受到了用户的广泛关注。在时隔半年后,
  • SN570 NVMe SSD固态硬盘 价格与性能兼具

    SN570 NVMe SSD固态硬盘是西部数据发布的最新一代WD Blue系列的固态硬盘,不仅闪存技术更为精进,性能也得到了进一步的跃升。WD Blue SN570 NVMe SSD的包装外
  • 上海举办人工智能大会活动,建设人工智能新高地

    人工智能大会在上海浦江两岸隆重拉开帷幕,人工智能新技术、新产品、新应用、新理念集中亮相。8月30日晚,作为大会的特色活动之一的上海人工智能发展盛典人工
  • 北京:科技教育体验基地开始登记

      北京“科技馆之城”科技教育体验基地登记和认证工作日前启动。首批北京科技教育体验基地拟于2023年全国科普日期间挂牌,后续还将开展常态化登记。  北京科技教育体验基
Top