在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
参考: [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实现 熔断器有三种状态:
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 { //记录一下 } })
|
请发表评论