spring-cloud限流降级熔断

2021-05-29  本文已影响0人  Wu杰语

限流降级熔断确保服务高可用的必要手段,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满则阻塞,处理的速率就看服务的处理能力了。通过这种限流的方式,有效的限制了空间大小,让服务始终保持在一个平稳高效的状态。

上一篇 下一篇

猜你喜欢

热点阅读