背景
类似上文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就抛异常了,不会走到下游,快速失败
网友评论