小麦带你学服注册体系七

简介: 断路器笔记

断路器

熔断机制是应对雪崩效应的一种微服务链路保护机制。当链路的某个微服务出错不可用或者响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,快速返回错误的响应信息。当检测到该节点微服务调用响应正常后,恢复调用链路。服务断路器的设计架构图如下:

断路器状态

服务调用方为每一个调用服务 (调用路径) 维护一个状态机,在这个状态机中有3种状态:

  • CLOSED:默认状态。断路器观察到请求失败比例没有达到阈值,断路器认为被代理服务状态良好
  • OPEN:断路器观察到请求失败比例已经达到阈值,断路器认为被代理服务故障,打开开关,请求不再到达被代理的服务,而是快速失败
  • HALF OPEN:断路器打开后,为了能自动恢复对被代理服务的访问,会切换到半开放状态,去尝试请求被代理服务以查看服务是否已经故障恢复。如果成功,会转成CLOSED状态,否则转到OPEN状态

熔断策略

  • 指定时间内失败率超过指定阈值
  • 指定时间内失败次数超过指定阈值
  • 可根据熔断等级,适当调整熔断超时时间

恢复策略

  • 指定时间内失败率低于指定阈值
  • 指定时间内失败次数低于指定阈值

拒绝策略

  • 直接抛出指定异常
  • 调用降级策略进行处理

常见问题

使用断路器需要考虑一些问题:

  • 针对不同的异常,定义不同的熔断后处理逻辑
  • 设置熔断的时长,超过这个时长后切换到HALF OPEN进行重试
  • 记录请求失败日志,供监控使用
  • 主动重试,比如对于connection timeout造成的熔断,可以用异步线程进行网络检测,比如telenet,检测到网络畅通时切换到HALF OPEN进行重试
  • 补偿接口,断路器可以提供补偿接口让运维人员手工关闭
  • 重试时,可以使用之前失败的请求进行重试,但一定要注意业务上是否允许这样做

使用场景

  • 服务故障或者升级时,让客户端快速失败
  • 失败处理逻辑容易定义
  • 响应耗时较长,客户端设置的read timeout会比较长,防止客户端大量重试请求导致的连接、线程资源不能释放
相关文章
需求分析有点难,ChatGPT来帮你
使用ChatGPT辅助进行论坛Web页面搜索功能需求分析,生成PRD文档,包括改进搜索算法、高级搜索选项、搜索结果页面改进和响应时间优化。在分析阶段,关注了每个需求的细节,如关键词匹配、个性化推荐、用户界面设计和性能优化。作为测试工程师,提炼出测试点,包括异常场景测试,确保系统在各种条件下稳定运行。实践中强调明确需求、拆分任务、修正回复和角色定位。
|
前端开发 JavaScript 开发者
React:JSX语法入门
React:JSX语法入门
223 0
|
SQL 存储 API
SqlAlchemy 2.0 中文文档(四)(3)
SqlAlchemy 2.0 中文文档(四)
330 3
|
小程序 前端开发 Android开发
微信小程序(van-tabs) 去除横向滚动条样式(附加源码解决方案+报错图)
微信小程序(van-tabs) 去除横向滚动条样式(附加源码解决方案+报错图)
999 1
纯虚函数和抽象类
纯虚函数和抽象类
139 0
|
设计模式 数据库
java23种设计模式(1)-单例模式
java23种设计模式(1)-单例模式
171 0
Python基础笔记2-ruamel.yaml读写yaml文件
上一篇笔记记录了Python中的pyyaml库对yaml文件进行读写,但了解到ruamel.yaml也能对yaml文件进行读写,于是想尝试一下它的用法。
|
3天前
|
存储 JavaScript 前端开发
JavaScript基础
本节讲解JavaScript基础核心知识:涵盖值类型与引用类型区别、typeof检测类型及局限性、===与==差异及应用场景、内置函数与对象、原型链五规则、属性查找机制、instanceof原理,以及this指向和箭头函数中this的绑定时机。重点突出类型判断、原型继承与this机制,助力深入理解JS面向对象机制。(238字)