美文网首页
Soul的限流断路器的使用和流程

Soul的限流断路器的使用和流程

作者: 赵镇 | 来源:发表于2021-01-28 22:59 被阅读0次

    Soul的限流断路器的使用和流程

    由于之前并没有使用过Hystrix,Resilience4j和sentinel中的任何一种,此处仅对三种流控和断路器插件做一个流程分析

    Soul中Hystrix的使用和操作流程

    • 关于soul中插件的流程前文已经说过多次了,在此不在赘述。
    • 根据规则的具体选择方式。Soul构建了两个不同的操作类HystrixCommandOnThread和HystrixCommand。两个类的不同是HystrixCommandOnThread为拦截的接口建立了自己的线程池,实现了线程池的隔离。而HystrixCommand只是实现了短路器的基本功能。使用了线程池隔离之后。可以针对不同的线程使用不同的线程池配置。既区分了不同的接口和自定义配置解决不同并发程度所造成的压力。也解决了不同接口之间造成影响的问题。这两个类基本就是@HystrixCommand的各大属性的集合,Soul通过界面配置的方式实现了断路器的零侵入性。这样来说,比Hystrix直接嵌入客户端更加方便
    file
    • 另外在具体的断路执行run过程中使用了RxReactiveStreams.toObservable的监听来实现具体的异步监听的情况。同时追踪Hystrix源码可以看到Hystrix使用了RxJava
    • Hystrix插件的使用中综合使用了建造者模式,命令模式,观察者模式。以及RxReactiveStreams响应式流式编程。

    Soul中Resilience4j的使用和操作流程

    • 在Resilience4JPlugin中的执行方法中可以看到
        protected Mono<Void> doExecute(final ServerWebExchange exchange, final SoulPluginChain chain, final SelectorData selector, final RuleData rule) {
            final SoulContext soulContext = exchange.getAttribute(Constants.CONTEXT);
            assert soulContext != null;
            Resilience4JHandle resilience4JHandle = GsonUtils.getGson().fromJson(rule.getHandle(), Resilience4JHandle.class);
            if (resilience4JHandle.getCircuitEnable() == 1) {
                return combined(exchange, chain, rule);
            }
            return rateLimiter(exchange, chain, rule);
        }
    

    根据CircuitEnable属性的值来决定只是做流控还是同时同时做流控和断流两个方向。但是这个规则的配置是基于数字配置的。是不是可以优化为boolean类型的,这可能是个可以优化的方向


    file
    • 最后通过代理工厂Resilience4JRegistryFactory来执行断流和流控的具体控制,相对来说比直接配置和代码来控制简单了很多

    Soul中sentinel插件的使用和流程

    • 在SentinelPlugin中并没有看到直接执行sentinel的内容,而是直接重载了PluginDataHandler的重载方法里
    • 在重载方法中 FlowRuleManager.loadRules(flowRules)和DegradeRuleManager.loadRules(degradeRules)将sentinel都加载到了Sentinel中,由sentinel进行控制

    三个断路器的控制基本就是这样, 后续对三个断路器有了使用经验再来具体进行对比。

    欢迎关注和点赞,以及总结的分类面试题https://github.com/zhendiao/JavaInterview

    相关文章

      网友评论

          本文标题:Soul的限流断路器的使用和流程

          本文链接:https://www.haomeiwen.com/subject/bgrftltx.html