Sentinel

1、熔断降级限流

熔断

A服务调用B服务的某个功能,由于网络不稳定、B服务卡机等问题,导致功能时间超长。如果这样子的次数太多,我们就可以直接将B断路(A不再请求B接口),凡是调用B服务的直接返回降级数据,不必等待B的超长执行。这样B的故障问题就不会级联影响到A。

降级

整个网站处于流量高峰期,服务器压力剧增,根据当前业务情况及流量,对一些服务和页面进行有策略的降级(停止服务,所有的调用直接返回降级数据)。以此缓解服务器资源的压力,以保证核心业务的正常运行,同时也保持了客户和大部分客户得到正确的响应。

相同点:

1、为了保证集群大部分服务的可用性和可靠性,防止崩溃,牺牲小我

2、用户最终都是体验到某个功能不可用

不同点:

1、熔断是被调用方故障,触发的系统主动规则

2、降级是基于全局考虑,停止一些正常的服务,释放资源

限流

对进入服务的请求流量进行控制,使服务能够承担不超过自己的流量压力。

2、Sentinel简介

官方文档:https://github.com/ailbaba/Sentinel/wiki

项目地址:https://github.com/alibaba/Sentinel

随着微服务的流行,服务与服务之间的稳定性变得越来越来重要。Sentinel以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

2.1 Sentinel与Hystrix

|---------|---------------------|----------------|
| 功能 | Sentinel | Hystrix |
| 隔离策略 | 信号量隔离(并发线程数限流) | 线程池隔离、信号量隔离 |
| 熔断降级策略 | 基于响应时间、异常比率、异常数 | 基于异常比率 |
| 实时统计表现 | 滑动窗口(LeapArray) | 滑动窗口(基于RxJava) |
| 动态规则配置 | 支持多种数据源 | 支持多种数据源 |
| 扩展性 | 多个扩展点 | 插件形式 |
| 基于注解的支持 | 支持 | 支持 |
| 限流 | 基于QPS,支持基于调用关系的限流 | 有限的支持 |
| 流量整形 | 支持预热模式、匀速器模式、预热排队模式 | 不支持 |
| 系统自适应保护 | 支持 | 不支持 |
| 控制台 | 可配置规则、查看秒级监控、机器发现等 | 简单的监控查看 |

2.2 Sentinel-定制网关流控返回

XML 复制代码
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
</dependency>
java 复制代码
@Configuration
public class SentinelGatewayConfig {

    public SentinelGatewayConfig() {
        GatewayCallbackManager.setBlockHandler(new BlockRequestHandler() {
            // 响应式编码,网关限流了请求就会调用此回调
            @Override
            public Mono<ServerResponse> handleRequest(ServerWebExchange serverWebExchange, Throwable throwable) {
                R error = R.error(BizCodeEnum.BLOCK_EXCEPTION.getCode(), BizCodeEnum.BLOCK_EXCEPTION.getMsg());
                String errJson = JSON.toJSONString(error);

                return ServerResponse.ok().body(Mono.just(errJson), String.class);
            }
        });
    }

}
相关推荐
东阳马生架构4 小时前
Sentinel源码—4.FlowSlot实现流控的原理
sentinel
东阳马生架构18 小时前
Sentinel源码—3.ProcessorSlot的执行过程二
sentinel
东阳马生架构1 天前
Sentinel源码—3.ProcessorSlot的执行过程
sentinel
东阳马生架构2 天前
Sentinel源码—2.Context和处理链的初始化
sentinel
东阳马生架构3 天前
Sentinel源码—1.使用演示和简介一
sentinel
东阳马生架构3 天前
Sentinel源码—1.使用演示和简介二
sentinel
西岭千秋雪_4 天前
Sentinel核心算法解析の滑动窗口算法
分布式·算法·spring cloud·微服务·中间件·sentinel
張萠飛5 天前
Redis哨兵模式下执行sentinel failover mymaster命令可能导致什么风险,如何避免
redis·bootstrap·sentinel
小马爱打代码6 天前
Spring Cloud Alibaba微服务治理实战:Nacos+Sentinel深度解析
微服务·架构·sentinel