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


    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

    file
    file

  • 相关阅读:
    小div在大div中垂直居中方式
    sublime中Vue高亮插件安装
    vue脚手架创建项目(推荐)
    搭建Vue脚手架
    html解决空格显示问题
    css3实现半圆和圆效果
    MySQL通过 LOAD DATA INFILE 批量导入数据
    jQuery ajax 提交表单图片
    Sqlserver风格规范
    前端代码风格规范总结
  • 原文地址:https://www.cnblogs.com/zhendiao/p/14342485.html
Copyright © 2020-2023  润新知