美文网首页
spring-cloud限流降级熔断

spring-cloud限流降级熔断

作者: Wu杰语 | 来源:发表于2021-05-29 18:35 被阅读0次

    限流降级熔断确保服务高可用的必要手段,Spring Cloud Hystrix和Spring Cloud sentinel是Spring Cloud完成此功能的两大组件,这两大组件以SDK的方式提供。

    基本原理

    限流的方法有滑动窗口、漏桶、令牌桶等算法。

    • 滑动窗口有静态滑动窗口和动态滑动窗口,其中静态滑动窗口,如果流量都集中在窗口交接处,也会产生不平均现象。而动态滑动窗口实现比较复杂。
    • 漏桶法。固定桶大小,如果桶已满,则流入桶的请求将会被丢弃。可以应对瞬间高流量。
    • 令牌桶。以一个固定的速度产生令牌,服务请求如能拿到令牌则可以继续处理,否则就丢弃。
      这三种方法是限流的主要算法。

    熔断降级主要判断依据为并发线程数和调用时间,基本规则是异常数、异常比例、调用平均时间。

    Hystrix和Sentinel都提供了基本的限流降方式。

    Hystrix

    在Netflix套件中,Openfeign组件集成了hystrix组件,见如下定义

    public @interface FeignClient {
        @AliasFor("name")
        String value() default "";
    
        String contextId() default "";
    
        @AliasFor("value")
        String name() default "";
    
        /** @deprecated */
        @Deprecated
        String qualifier() default "";
    
        String[] qualifiers() default {};
    
        String url() default "";
    
        boolean decode404() default false;
    
        Class<?>[] configuration() default {};
    
        Class<?> fallback() default void.class;
    
        Class<?> fallbackFactory() default void.class;
    
        String path() default "";
    
        boolean primary() default true;
    }
    

    https://docs.spring.io/spring-cloud-openfeign/docs/current/reference/html/#spring-cloud-feign-circuitbreaker中1.5和1.6有相关介绍,其中OpenFeign的fallback就是降级实现。

    sentinel

    sentinel的实现是FlowRule和DegradeRule两个实现,具体使用参见
    https://www.jianshu.com/p/f1f052413d1c
    其中几个块的关系

    image.png
    服务启动时从nacos中拉取规则,并且在运行过程中可以通过nacos随时修改规则,通过sentinel Dashboard查看限流熔断情况。

    另外sentinel提供了集群限流功能。

    小结

    在程序设计的时候,我们一般会从算法角度考虑程序,即空间复杂度和时间复杂度,一般情况下,在高并发系统,都会考虑空间复杂度,如上漏桶设计,就是以时间换空间的一种设计方式。例如说处理消息,使用blockingqueue限制队列大小,消息从MQ拉去,如果blockingqueue满则阻塞,处理的速率就看服务的处理能力了。通过这种限流的方式,有效的限制了空间大小,让服务始终保持在一个平稳高效的状态。

    相关文章

      网友评论

          本文标题:spring-cloud限流降级熔断

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