• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

go笔记-熔断器

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

参考:

[1] https://studygolang.com/articles/13254

[2] https://blog.luojilab.com/2019/12/16/zeroteam/You_have_to_know_the_rate_limit_of_the_series/ 

[3] https://www.cnblogs.com/li-peng/p/11050563.html

区别:(限速器 VS 熔断器)

限速器(limiter)可以限制接口自身被调的频率

熔断器可监控所调用的服务的失败、超时情况,当依赖的下游服务失败过高时,熔断器开启,不再调用下游服务,转向降级策略,从而避免雪崩。

文章[2]中:限流与熔断经常被人弄混,它们最大的区别在于限流主要在server实现,而熔断主要在client实现

熔断器有三种状态:

  • 关闭状态:服务正常,并维护一个失败率统计,当失败率达到阀值时,转到开启状态
  • 开启状态:服务异常,调用 fallback 函数,一段时间之后,进入半开启状态
  • 半开启装态:尝试恢复服务,失败率高于阀值,进入开启状态,低于阀值,进入关闭状态

github.com/afex/hystrix-go,提供了 go 熔断器实现,使用上面也很方便,首先创建一个熔断器

hystrix.ConfigureCommand(
    "addservice", // 熔断器名字,可以用服务名称命名,一个名字对应一个熔断器,对应一份熔断策略
    hystrix.CommandConfig{
        Timeout:                100,  // 超时时间 100ms
        MaxConcurrentRequests:  2,    // 最大并发数,超过并发返回错误
        RequestVolumeThreshold: 4,    // 请求数量的阀值,用这些数量的请求来计算阀值,熔断器是否打开要满足这个条件;这里的设置表示至少有4个请求才进行ErrorPercentThreshold错误百分比计算
        ErrorPercentThreshold:  25,   // 错误率阀值,百分比。达到阀值,启动熔断
        SleepWindow:            1000, // 熔断尝试恢复时间,单位毫秒
    },
)

 

例子:

// SV熔断器
hystrix.ConfigureCommand(
    "SV",
    hystrix.CommandConfig{
        Timeout:                200,          // 超时时间 200ms
        MaxConcurrentRequests:  500,      // 最大并发数,超过并发返回错误
        RequestVolumeThreshold: 100, 
        ErrorPercentThreshold:  3,
        SleepWindow:            1000
    },
)

 

//hystrix.GetCircuit: 获取这次执行的breaker,测试时使用,查看断路器的状态
brker, _, _ := hystrix.GetCircuit("SV")
err := hystrix.Do("SV", func() error {
    //正常处理
}, func(err error) error {
    //兜底处理   
    if brker.AllowRequest() == false {
        //记录一下
    }
})

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap