mark一篇CSEJavaSDK熔断、隔离判断逻辑的帖子,同样适用于ServiceComb-Java-Chassis。
原文链接: https://bbs.huaweicloud.com/forum/thread-12790-1-1.html
[技术交流]CSE重试和隔离如何判断错误?
简单的描述:
- 网络错误 + 503错误码等情况可以触发重试。
- 网络错误 + 503错误码 + 超时等错误可以触发隔离。
细节内容可以参考代码。
负载均衡模块能力
LB模块具备请求重试和实例隔离能力。
- 请求重试的条件参考
org.apache.servicecomb.loadbalance.DefaultRetryExtensionsFactory
- 实例隔离的条件参考
org.apache.servicecomb.loadbalance.LoadbalanceHandler#isFailedResponse
- 实例隔离状态恢复的逻辑参考
org.apache.servicecomb.loadbalance.filter.IsolationDiscoveryFilter#allowVisit
- Java-Chassis定期ping机制会在某实例近期没有被调用时定时去检查其状态,该检查如果失败会产生和调用失败一样的错误计数,但是检查成功不会触发实例隔离恢复,相关逻辑在
org.apache.servicecomb.loadbalance.ServiceCombLoadBalancerStats#timer
的定时任务中。
熔断隔离模块能力
CSE还提供了bizkeeper模块,这个模块集成了Hystrix的隔离仓等能力,这个隔离能力是针对微服务或者接口级别的,在实际业务系统中,发挥作用比较少。 这个模块也有判读错误条件:
- consumer: 490异常。比如网络操作、超时等。 参考
org.apache.servicecomb.bizkeeper.ConsumerBizkeeperCommand#isFailedResponse
- provider: 590异常。比如业务处理抛出的未知RuntimeException等。 参考
org.apache.servicecomb.bizkeeper.ProviderBizkeeperCommand#isFailedResponse
软件技术 CSE microservice ServiceComb-Java-Chassis
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!