spring-cloud alibaba Sentinel介绍 以及整合springboot使用

官方文档:介绍 · alibaba/Sentinel Wiki · GitHubhttps://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D

项目地址:https://github.com/alibaba/Sentinel随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

 熔断 降级 限流 区别

 1、Sentinel具有以下特征:

丰富的应用场景:Sentinel承接了阿里巴巴近10年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。

完备的实时监控:Sentinel同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至500台以下规模的集群的汇总运行情况。

广泛的开源生态:Sentinel提供开箱即用的与其它开源框架/库的整合模块,例如与SpringCloud、Dubbo、gRPC的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入Sentinel。

完善的SPI扩展点:Sentinel提供简单易用、完善的SPI扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。

 2、Hystrix与Sentinel比较

 3、Sentinel介绍

Sentinel 分为两个部分:

核心库(Java 客户端)不依赖任何框架/库,能够运行于所有 Java 运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。
控制台(Dashboard)基于 Spring Boot 开发,打包后可以直接运行,不需要额外的 Tomcat 等应用容器。

 重要规则定义 具体参考官方文档

 4、SpringBoot整合Sentinel

4-1 添加启动器

  <!--sentinel 场景启动器-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>

 4-2 控制台下载(使用文档)

Sentinel/sentinel-dashboard at master · alibaba/Sentinel · GitHub

本文核心包使用 1.6.3 版本,控制台也下载一样 

下载地址找相应版本

Releases · alibaba/Sentinel · GitHub

4-3 启动jar包 访问控制台

java -jar sentinel-dashboard-1.6.3.jar --server.port=8333

账号密码都是 sentinel

 4-4 配置控制台信息

这里的 spring.cloud.sentinel.transport.port 端口配置会在应用对应的机器上启动一个 Http Server,该 Server 会与 Sentinel 控制台做交互。比如 Sentinel 控制台添加了一个限流规则,会把规则数据 push 给这个 Http Server 接收,Http Server 再将规则注册到 Sentinel 中。

#连接sentinel 控制台
spring.cloud.sentinel.transport.dashboard=localhost:8333
#sentinel传输端口
spring.cloud.sentinel.transport.port=8719

4-5 整合 Endpoint 支持

在使用 Endpoint 特性之前需要在 Maven 中添加 spring-boot-starter-actuator 依赖,并在配置中允许 Endpoints 的访问。

        <!--actuator Endpoint 支持-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
  • Spring Boot 2.x 中添加配置 management.endpoints.web.exposure.include=*。暴露的 endpoint 路径为 /actuator/sentinel

  •  Sentinel Endpoint 里暴露的信息非常有用。包括当前应用的所有规则信息、日志目录、当前实例的 IP,Sentinel Dashboard 地址,Block Page,应用与 Sentinel Dashboard 的心跳频率等等信息。

  • 新增流控规则

  •  限制1秒一个 ,超过访问次数后,如下

  • 图:sentinel会有默认返回。

  • 自定义sentinel的返回

/**
 * <简述>自定义阻塞返回方法
 * <详细描述>
 * @author syf
 * @date 2023/4/24 15:26
 * @return null
 */
@Configuration
public class GulimallSeckillSentinelConfig {

    public GulimallSeckillSentinelConfig() {

        WebCallbackManager.setUrlBlockHandler(new UrlBlockHandler() {
            @Override
            public void blocked(HttpServletRequest request, HttpServletResponse response, BlockException ex) throws IOException {
                R error = R.error(BizCodeEnum.TO_MANY_REQUEST.getCode(), BizCodeEnum.TO_MANY_REQUEST.getMsg());
                response.setCharacterEncoding("UTF-8");
                response.setContentType("application/json");
                response.getWriter().write(JSON.toJSONString(error));

            }
        });

    }

}

设置完QPS后,自定义返回如下

 4-6 流量控制

地址 : 流量控制 · alibaba/Sentinel Wiki · GitHubhttps://github.com/alibaba/Sentinel/wiki/%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6

 4-6 -1浏览控制有三种方式   直接、链路、关联

链路是基于调用入口的控制如图  ,只有 /helllo 进来的请求才会限制

 4-6-2关联:

限制资源的争抢,A 服务read ,B 服务wirte ,如果限制A服务数量100,b压力大时就会限制A,B压力不大则不会限制A

4-7 流控效果  快速失败 、warm up、 排队等如图

4-7-1 快速失败   

不用说,就是直接放弃

4-7-2 warm up  热启动模式

如上图,单机阈值 100 ,预热时常10。 服务会慢慢的将请求增长到 100. 比如前一秒 1个请求,后一秒 3个请求,10秒内达到100请求

4-7-3 排队等待 

如上图,单机阈值 100 ,超时常10。进来 150请求,先放100请求,剩下50 排队,超过10s放弃掉

spring-cloud-starter-alibaba-sentinel是一款用于微服务架构中实现流量控制、熔断降级、系统负载保护等功能的API库。 首先,它可以实现流量控制,通过设置限流规则,对微服务进行限制,避免大量请求进入服务,导致服务不可用或资源耗尽。可以设置QPS、线程数、并发数等限制条件,对请求进行控制,保障系统的稳定性。 其次,它还支持熔断降级功能。当微服务出现异常或超时时,它会根据预设的熔断规则,将服务降级,避免故障的扩散。可以通过设置异常比例、异常数等规则,对服务进行自动降级,保障系统的可用性。 另外,它还支持系统负载保护功能。通过设置系统负载的阈值,当系统负载超过一定限制时,它会自动出发保护机制,拒绝服务请求,保护系统免受过载的影响。可以设置CPU使用率、内存使用率等指标来判断系统负载情况,保持系统的稳定运行。 此外,spring-cloud-starter-alibaba-sentinel还提供了实时监控、统计和报警功能,可以通过可视化的控制台查看服务的运行状态和性能指标,及时发现问题并进行相应的调整和优化。 总之,spring-cloud-starter-alibaba-sentinel是一款功能强大的API库,可以帮助开发人员在微服务架构中实现流量控制、熔断降级、系统负载保护等功能,确保系统的稳定性和可用性。它可以有效地保护系统不受高流量、异常情况和系统负载的影响,提高系统的弹性和可扩展性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

syfjava

请博主喝杯蜜雪冰城

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值