-
Notifications
You must be signed in to change notification settings - Fork 8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
add half-open and fix degrade-bug #553
Conversation
Codecov Report
@@ Coverage Diff @@
## master #553 +/- ##
============================================
+ Coverage 39.09% 40.39% +1.29%
- Complexity 1223 1293 +70
============================================
Files 275 279 +4
Lines 8674 8925 +251
Branches 1159 1194 +35
============================================
+ Hits 3391 3605 +214
+ Misses 4855 4852 -3
- Partials 428 468 +40
Continue to review full report at Codecov.
|
For reviewers: some previous discussions can be found here: #525 |
CarpenterLee大佬还是建议不要剔除这些数据。我目前想到的一种做法是这些记录不剔除,但是会记录下来,逻辑判断的时候做逻辑删除。直到该时间统计的窗口过期。基于秒基于分钟。都需要做统计。有点儿重。 |
还有另一种做法,就是,既然统计数据要保证百分百的准确性,那么OK,熔断这里自己备份一份数据,需要记录qps,异常数,异常比率。达到熔断的时候和Hy一样进行直接reset。这样两者之间互不相关。 |
Thanks for your contribution! For the reasons listed in #525, I agree that it's necessary to support HALF-OPEN state. But as for the code, improvement may be needed. Sentinel statistical module is carefully designed. The You could refine the current implementation and explain your design in more detail. And the following principles should be abided:
|
我不是很倾向于单独熔断的数据于此 因为两者虽然从表面上看是一个概念 但是意义完全不一样。我这里统计只是异常的一个数据而言,一个 变量足矣,如果采用滑动窗口的话显得多余且有点儿浪费 所以个人觉得放于StatisticNode更合适,毕竟数据源自于ArrayMetric,但是它属于更上一层的数据统计而非,所以没有必要再给他加一层数据源。或者我这样讲更清楚,我们可以把ArrayMetric当作一个数据源头,那么既然数据源头已经有了,我们在StatisticNode相当于做了一层包装,所以于此我觉得更为合适 |
ping @CalvinKirs |
反向思考下,Sentinel从2012年诞生,在阿里内部使用了4年之久,我觉得这个问题你们应该遇到过了,也想到过半开启模式,但最终为何没采取这种方式呢?能否普及下相关历史,或你们的想法与考量 |
@edwardlee03 Some more details of the circuit breaking statistics should be well designed. Discussions are welcomed! |
|
Resolved in #1490. Thanks for your contribution! |
#154
Describe what this PR does / why we need it
原有的异常数以及异常比例这里会出现问题。位于同一个滑动窗口当降级关闭之后无论如何都会再次进入降级。
您好,目前来看的话限流这里是用总的传递数来进行计算的。 (这样是最合理的而且目前也确实是这样做的)。
基于rt这里也已经完善,是拿最近一次请求的rt与计数进行比较的。另外这里的话清除的话只会清除当前时间窗口的一个异常室温总和,最小为1个RT(经过多个时间窗口,每次刚进入时间窗口进进入准降级状态),最大为5个RT(持续一个窗口的一个准降级-降级的RT总和)。
异常数目这里还是原有的逻辑,降级关闭之后放进一个请求,依赖于这个请求的结果来进行是否开关。降级打开之前会对分钟秒级别的纬度减去各自所属的时间窗口的值。如果是新的时间窗口则不做操作。
我这里觉得降级关闭之后应该是一个新的开始,所以-1个异常数 里是可以接受的。不这么做的话异常数目这里位于同一个时间窗口降级关闭之后始终是要再次打开的。因为数已经达到了阈值,必须去减
Does this pull request fix one issue?
Describe how you did it
Describe how to verify it
ut
Special notes for reviews