go hystrix熔断器的使用

95 阅读2分钟

1 熔断原理

熔断器像“保险丝”一样,它作为一个开关,遇到下游服务有问题时,可以打开熔断器断开服务;服务恢复后,又可以关闭熔断器,重新调用服务。它的作用主要有以下两点:

  1. 当所依赖的服务不稳定时,能够起到快速失败的目的。
  2. 快速失败后,能够用一定的算法动态探测所依赖对象是否恢复。

熔断器实现主要是设置一个阙值,这个阙值可以是最大并发数或请求错误率百分比,超过这个阙值就进行熔断。还会设置一个尝试恢复时间。

熔断器有3种状态:

  • CLOSED:默认状态。熔断器计算数(最大请求数、请求错误百分比等)没有达到设置的阙值,熔断器就认为被代理服务状态良好。
  • OPEN:熔断器计算数计算数(最大请求数、请求错误百分比等)已经达到阙值,熔断器就认为被代理的服务已经故障了,打开熔断器开关,请求不再代理服务,而是快速失败。
  • HALF OPEN:熔断器打开后,为了能自动恢复被代理服务的访问,会切换到半开放状态,去尝试请求被代理服务以查看服务故障是否已经恢复了。如果恢复了,会转为 CLOSED 状态;否则转到 OPEN 状态。

2 具体使用

2.1 Go 语言开发的熔断框架

github.com/afex/hystri…

2.2 hystrix配置参数说明

hystrix.ConfigureCommand(RedisCommand, hystrix.CommandConfig{
    Timeout:                3000,                       // 执行命令的超时时间
    MaxConcurrentRequests:  1000000, // 允许的最大并发请求数
    ErrorPercentThreshold:  80,                         // 错误率阈值,当错误率达到这个值,熔断器打开
    SleepWindow:            5000,                       // 重试间隔
    RequestVolumeThreshold: 100,                          // 请求阈值 每10秒
})

Timeout:

执行的命令超过此设置时间,则直接跳过。

MaxConcurrentRequests、ErrorPercentThreshold、RequestVolumeThreshold:

  是否熔断的判断条件主要为以下两点:

  1. 10秒内达到RequestVolumeThreshold这个请求数,则开始检测,并且如果错误比例达到ErrorPercentThreshold则熔断。
  2. 如果请求数并发数大于MaxConcurrentRequests则熔断。

SleepWindow:

当熔断器打开后,每经过SleepWindow的时间,熔断器会进入HALF OPEN状态,去尝试请求被代理服务以查看服务故障是否已经恢复了。如果恢复了,会转为 CLOSED 状态;否则转到 OPEN 状态。