前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >golang 微服务中的断路器 hystrix

golang 微服务中的断路器 hystrix

作者头像
阿兵云原生
发布2023-09-01 08:35:33
1410
发布2023-09-01 08:35:33
举报
文章被收录于专栏:golang云原生newgolang云原生new

之前说到过微服务容错处理,可以使用 断路器

使用断路器的原因是:

当下游的服务因为过载或故障,无法提供服务,我们需要及时的让上游服务知悉,且暂时 熔断 调用方和提供方的调用链,这是为了避免服务雪崩现象的发生

go 里面可以使用什么方式来做断路器 呢?

hystrix-go

go 中有一个项目实现了 这个断路器的功能:

https://github.com/afex/hystrix-go

Hystrix 能够在服务提供者出现故障时,隔离调用者和提供者,防止服务级联失败

并且 Hystrix 还提供失败回滚的逻辑,是系统快速从异常中恢复

为啥要用 Hystrix 来作为断路器?

  • Hystrix 自身完美的是实现了断路器模式
  • 自身可以提供信号量和线程隔离的方式以保护服务调用者的线程资源
  • 对延迟和失败提供了强大的容错能力,为系统提供保护和控制

图解 Hystrix 运行流程

如下是 golang 微服务容错处理是如何做的? 提到的断路器的 三种状态:

结合起来看看 Hystrix 具体流程

上述流程我们可以这样来理解

  • 使用 hystrix 的时候,hystrix 会给每一个远程调用逻辑封装成一个指令,这个指令包含这个远程调用的逻辑和失败回滚逻辑,这个 命令是 hystrix 唯一识别的
  • hystrix 根据 对应的指令获取到对应的断路器,判断断路器是否打开
    • 将执行池请求通行证
    • 执行执行失败回滚逻辑,不直接执行远程调用逻辑,因此此时服务已经熔断了
    • 若打开
    • 若关闭或者是半开状态
  • hystrix 中我们可以配置多个参数,最大并发数量,超时时间,最小请求阈值,超时窗口时间 和 错误比例阈值等等

图中我们可以看到 Metrics 控制器,

当我们的服务执行异常或者下游服务超时的时候, hystrix 命令就会向 Metrics 控制器 上报执行结果,并且 hystrix 命令对应的逻辑会进入到失败回滚逻辑

Metrics 控制器的作用

Metrics 控制器使用滑动窗口的方式统计一段时间内的调用次数,失败次数,超时次数 和 被拒绝的次数,下一篇的案例代码中,有体现如何配置

这个被拒绝的次怎么理解呢?指的是在向执行池子请求通行证的时候,池子已满,故被拒绝

如果这段时间内,执行错误的频率出超过了断路器错误率的阈值,那么断路器就会打开

在重试超时定时器到达之前的请求都会直接进入失败回滚逻辑,拒绝执行真正的远程调用

因此这就可以达到微服务容错的目的

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-05-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 阿兵云原生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • hystrix-go
  • 图解 Hystrix 运行流程
    • Metrics 控制器的作用
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档