服务降级:一般是从整体负荷考虑。就是当某个服务熔断之后,服务器将不再被调用,此时客户端可以自己准备一个本地的fallback回调,返回一个缺省值。
降级与熔断
1.1、降级
降级也就是服务降级,当我们的服务器压力剧增,为了保证核心功能的可用性,可以选择性的降低一些功能的可用性,或者直接关闭该功能。典型的弃车保帅! 就比如贴吧类型的网站,当服务器吃不消的时候,可以选择把发帖功能关闭,注册功能关闭,改密码,改头像这些都关了,为了确保登录和浏览帖子这种核心的功能。
1.2、熔断
降级一般而言是我们自身的系统出现了故障而降级。而熔断一般是指依赖的外部接口出现故障,断绝和外部接口之间的关联。
例如你的A服务里面的一个功能依赖B服务,这时候B服务出问题了,返回的很慢。这种情况可能会因为这么一个功能而拖慢了A服务里面的所有功能,因此我们这时候就需要熔断!即当发现A要调用这B时就直接返回错误(或者返回其他默认值啊啥的),就不去请求B了。
1.3、熔断状态机
三种状态:
Close 关闭状态,熔断器的初始化状态,允许请求通过
Open 开放状态,即熔断状态,不允许请求通过
HalfOpen 半开放状态,允许部分请求通过
1.4、hystrix包详解
hystrix是Netflix的开源库,go版本是hystrix-go。
主要以下几个模块:setting,hystrix,circuit,metrics,pool和eventstream。
1.4.1、settings
setting 用来管理熔断器的配置,包括存储,新增和读取。
map+读写锁实现多个circuit的配置。
Timeout: 执行command的超时时间。默认时间是1000毫秒
MaxConcurrentRequests:command的最大并发量 默认值是10
SleepWindow:当熔断器被打开后,SleepWindow的时间就是控制过多久后去尝试服务是否可用了。默认值是5000毫秒
RequestVolumeThreshold: 一个统计窗口10秒内请求数量。达到这个请求数量后才去判断是否要开启熔断。默认值是20
ErrorPercentThreshold:错误百分比,请求数量大于等于RequestVolumeThreshold并且错误率到达这个百分比后就会启动熔断 默认值是50
1.4.2、circuit
circuit 用来管理熔断器的状态变更。
除此之外,circuit还上报事件给统计器
创建circuit的时候,会根据配置创建相应的metric和exePool
1.4.3、metrics
metrics用来统计和计算请求的响应情况。
每一个Command都会有一个默认统计控制器,当然也可以添加多个自定义的控制器。 默认的统计控制器DefaultMetricCollector保存着熔断器的所有状态,调用次数,失败次数,被拒绝次数等等。
在执行newMetricExchange的时候会启动一个协程 go m.Monitor()去监控Updates的数据,然后上报给metricCollectors 保存执行的信息数据比如前面提到的调用次数,失败次数,被拒绝次数等等。
1.4.3、pool
pool 用来管理请求池,控制请求池最大数目以及请求ticket的发放和回收。
1.4.4、hystrix
hystrix 是熔断器的主要部分,对外提供同步和异步的方法,对内上报请求事件以及fallback降级处理。
func GoC(ctx context.Context, name string, run runFuncC, fallback fallbackFuncC) chan error
参考:https://cloud.tencent.com/developer/article/1478016
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)