ZhYB
2019-06-26
看到第一个留言问熔断粒度的,您回复的是服务粒度,这个错了吧,应该是接口粒度的吧。另外,相关方面你文中说在半断开后通过ping来探活,这个也不行吧,探活是成功的,不代表被熔断的那个接口是活的。说白了,还是觉得您对熔断粒度理解有点偏差,不是服务粒度的。因为一个服务会暴露多个接口,每个接口有不同的计算逻辑和依赖不同的依赖,一个接口挂不代表别的接口也挂。
2
11
曾凡伟
2018-03-16
请问熔断的最小粒度,是针对每个单一请求,还是针对整个应用来实施呢
作者回复: 服务的粒度
6
多米
2018-03-17
可惜更新有点慢~
3
李顺翔
2018-09-06
@Adrian 极客好像非作者不能回复,专门留言回复你。。
首先下游服务可以分为第三方服务跟微服务,第三方服务没见过谁直接调用某个服务节点的,都是通过网关去负载均衡,所以服务不可用即代表了网关服务不可用,对上游服务来说,跟集群不可用没有区别,而微服务的话,调用的时候单节点不可用会自动给你负载到可用服务节点,除非服务提供者全部挂了(网络波动导致连不通也算),否则不会触发这个断路器,设置了超时时间的断路另说
2
edisonhuang
2019-07-10
熔断设计受保险丝设计的启发,可以保证系统在出问题是客户端及时停止调用而非一直失败重试。
熔断的设计会涉及三种状态,闭合状态,半开状态和打卡状态,三种状态可以由一个状态机来转换。
熔断设计还需要考虑的几个重要问题包括错误类型的区分,日志监控,允许手动恢复的设置,并发问题等
1
Sunshine
2019-05-22
陈老师,基于滑动时间窗口进行调用(success & fail)的统计,底层的数据结构有什么好的推荐吗?目前在使用逻辑环形数组
1
slark
2018-08-01
弹性设计相关,看一看 spring微服务实战 很有帮助。或者把spring cloud的组件,背景了解一下,对于微服务为什么要这样做就有谱了。大型互联网公司里在没有通用组件前都会有自研的类似组件,比如负载均衡,通用网关,鉴权,流水日志等。有一定经历,再来看微服务的设计会觉得他们其实非常相似。java在这方面有成熟组件,实在是非常有利于开发
1
xpisme
2020-01-18
保险丝 类比恰到好处,生动形象,容易理解。
熔断主要有三个状态 close half-open open
close时 会有错误计数器,假设超过一定得阈值就切换至open状态(直接返回错误),那也不能一直是open状态,open状态跟不能用一样一样的,得从open切换至half-open状态,检测下是否OK了,若OK了,就切换至close状态,继续提供服务。
需要考虑啥
从业务出发会有很多的错误码,注意错误的类型。
并发,这个防止熔断是性能的瓶颈。
探活,就是ping下是否OK了
日志的监控 能更详细的看是否有问题
提供人工操作的入口,人工可操作是否熔断
展开
Geek_Heiko
2020-01-13
#day 14#弹力设计之"熔断设计"
什么是熔断设计?类比于家用电器的中的过载保护装置(如保险丝),我个人的理解是,熔断设计是赋能系统中的服务自我保护的一种机制,表现为: 让在运行着的系统中的出现”问题“的服务,脱离其所在的系统环境一段时间,这样一来,一方面可以使得该服务避免"带病工作",全力进行自我恢复,从而更好地适应当时的环境继续正常地提供服务;另一方面,系统也可以很清楚地知道该服务现在还无法提供正常的服务,在一段时间内或不会再向其发送服务请求,进一步地谨慎处理相关请求,避免相关获取到不正确的数据或状态在系统中流动、蔓延。从一定程度上说,熔断是服务为了保护好自己,从而最终也很好地保护了其所在的系统。
更为具体地,我们将熔断设计看作是一个熔断器的设计。一般而言,熔断器就断开和闭合两种状态,对应的是服务脱离或连接着系统,但我们想做得更好一些,于是就有了一种"半闭合",顾名思义,这是一种闭合到断开的过渡状态,其在触发熔断机制时,仍"藕断丝连",允许一定数量的请求去调用该服务,如果是调用成功的,则可认为之前导致该问题的已经得到修正,继续切换回闭合状态,反之,则完全断开切换到断开状态。当然,实际具体到实际的系统中引入熔断机制,从其触发到其状态的管理,切换并不是一件简单的事情,熔断触发的条件往往多方面一定时间内的积累的结果,个人觉得一个熔断器的考量指标应该是包含其对于熔断触发的"敏感程度"的。其主要考虑一下几个方面:
1. 熔断的准备。
各式各样的"错误"是熔断机制触发的必要条件,但是,有些错误我们是可以通过重试机制就能解决的,而有些错误只能通过触发熔断机制才能是错误能够得到解决的可能。所以,在熔断器的前端需要有日志监控功能和配套的错误类型识别,以便在合适的实际触发熔断机制,也在一定程度上便于调试熔断器的"敏感度"。
2. 熔断的时机。
服务脱离系统前会有一段时间的半熔断过渡期,即半熔断状态,在这个时期,我们仍然有可能通过继续一定数量的测试服务是否可用,来使熔断器从半熔断切换到闭合状态的,即并不真正触发熔断状态。
3. 熔断的粒度。
对于某一块业务,系统中的服务往往是通过数据库或消息队列等进行相互依赖的,某个服务的脱离,必然会对整体业务造成影响,为避免尽可能减少其负面影响。往往需要通过资源分区来限定熔断的粒度,然后只对出现问题的分区进行熔断,而不是整体。
4. 后熔断时期。
展开
夜空咏叹调
2020-01-09
熔断设计是一种容错机制,避免某些错误持续发生导致服务器性能降低,因此使用熔断器去控制,降低服务器负载。
熔断器主要有三种状态:闭合状态,断开状态,半闭合状态。
知行合一
2020-01-05
熔断需要用状态机来实现,根据各种情况来转换状态,在不同状态下做不同的行为。要做好熔断设计还真不容易,需要考虑各种细节。
文刂 氵共 超
2019-12-24
坚持学习,学习笔记 https://mubu.com/colla/6ikyl7br9NM
又双叒叕是一年啊
2019-06-24
理论总结的挺好,应该多一些实际的落地方案便于理解。要不有些抽象
拉欧
2019-06-04
设计熔断器的关键,在于维护三个状态(open,half-open,close)之间的流转,以及接口(is
Allowed, timeout, fail, success)的正确响应逻辑
godtrue
2019-01-30
熔断是否可认为切断对服务的依赖不再依赖了,是降级的升级版。
2
Geek_fb3db2
2018-12-06
服务都是多实例部署的 一个服务不可用就熔断 但是其他同样服务是可用的 这个怎么处理
欧星星
2018-07-12
如果服务A的一个功能依赖服务B和服务C,当服务B出现问题触发熔断的时候这时候这个熔断有必要吗?
Adrian
2018-03-21
“一些错误是远程服务挂掉,恢复时间比较长;这种错误不必走重试,可以直接打开熔断策略”,这句话感觉说的有些绝对,如果下游服务只是单机挂掉了,上游系统监测不可恢复异常,如果非超时类耗费机器资源的异常,如果直接熔断,会导致正常的服务也不可用,必然导致业务有损,毕竟下游集群部分机器可能还是正常工作的
1
shufang
2018-03-15
以前一直觉得是高大上的东西,现在越看越明白,谢谢老师~
我们在线,来聊聊吧
✕
您好,当前有专业客服人员在线,让我们来帮助您吧。
我们在线,来聊聊吧