服务治理 - 降级机制,百分比控制下游调用

2019-02-28  本文已影响7人  赤子心_d709

背景

类似上文ACL机制是下游限制上游,这里同样有场景上游限制下游调用
服务调用的链路中,如果上游想要禁止某一个下游的调用(下游扛不住了,不稳定等,或者服务治理上的其他考量),需要平台上有相关功能
这里降级就叫degradation

定义

degradation是以client端视角进行配置的
例如A调用B的方法b,则当A对B的方法b进行降级时(限制一部分的流量),则框架会根据设置的比例对RPC请求进行丢弃。
当发生丢弃行为时,框架会抛出特定异常;

实体名称

upstream:上游
downstream:下游
methodName:方法名

上游可以根据需要更加细化,比如包含cluster名称等

实现

配置降级,写配置

即用一个分布式服务框架,如zk等,写一个特定key
如/degradation/upstream/downstream/methodName

值为[0,100]某个值
为100则代表upstream调用downstream的methodName这个方法时,100%抛异常
为0代表正常调用下游

配置生效,读配置

框架上用middleware,切面等方式(我是以py的django框架为基础,其他语言也有自己的框架),该中间件的处理在upstream调用下游的时候

比如upstream在调用downstream的方法methodName的时候,
会去访问分布式配置的key “/downstream/upstream/downstream/methodName”

并且随机一个[0,100]的值
如果随机值<=设定值,代表这部分请求被降级,抛异常,业务层自行处理
否则正常调用

思考

1.和上次ACL什么关系

区别

从配置的角度上面考量,一个是client配置,一个是server配置
一个是配开关代表0,1,一个是配置[0,100]代表百分比

关系

真正降级或者ACL,都是上游走到特定切面或者middleware就抛异常了,不会走到下游,快速失败
上一篇下一篇

猜你喜欢

热点阅读