Sentinel入门学习和使用

导读:本篇文章讲解 Sentinel入门学习和使用,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

Sentinel入门学习和使用

一,介绍

随着分布式系统变得越来越流行,服务之间的可靠性变得比以往任何时候都更加重要。Sentinel 以“流”为切入点,在流控流量整形熔断系统自适应保护等多个领域开展工作,保障微服务的可靠性和弹性。

Sentinel具有以下特定:

  • 丰富的应用场景:Sentinel在阿里巴巴广泛使用,几乎覆盖了近10年双11购物节的所有核心场景,比如“秒杀”需要限制突发流量满足系统容量、消息削峰填谷、下游不可靠服务断路、集群流量控制等。
  • 实时监控:Sentinel 还提供实时监控能力。可以实时查看单机运行时信息,500节点以下集群运行时信息汇总。
  • 广泛的开源生态系统:Sentinel 提供与 Spring Cloud、Dubbo 和 gRPC 等常用框架和库的开箱即用集成。您只需将适配器依赖项添加到您的服务即可轻松使用 Sentinel。
  • 多语言支持:Sentinel 提供了对 Java、GoC++的原生支持。
  • 多种SPI扩展:Sentinel提供易用的SPI扩展接口,让您可以快速自定义您的逻辑,例如自定义规则管理、适配数据源等。

Sentinel分为两个部分:

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

二,安装和使用

2.1 安装Dashboard

到 https://github.com/alibaba/Sentinel/releases/ 下载java客户端。(本人下载的是v1.8.4)

下载到本地目录下后,直接运行

java -jar sentinel-dashboard-1.8.0.jar

到浏览器访问 localhost:8858,到达登录页面,输入账号/密码:sentinel/sentinel进行登录

也可以通过如下参数进行配置

  • -Dsentinel.dashboard.auth.username=sentinel 用于指定控制台的登录用户名为 sentinel
  • -Dsentinel.dashboard.auth.password=123456 用于指定控制台的登录密码为 123456;如果省略这两个参数,默认用户和密码均为 sentinel
  • -Dserver.servlet.session.timeout=7200 用于指定 Spring Boot 服务端 session 的过期时间,如 7200 表示 7200 秒;60m 表示 60 分钟,默认为 30 分钟;

同样也可以直接在 Spring properties 文件中进行配置。

2.2 Java客户端引入(SpringCloud)

在这里我使用之前的tools-provider作为例子,引入sentinel依赖。tools-provider服务在 https://gitee.com/lmchh/lmc-tools

2.2.1 引入依赖

在pom.xml中引入依赖:

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
            <version>2021.1</version>
        </dependency>

2.2.2 配置文件

在bootstrap-dev.yml中引入以下:

spring:
  cloud:
    sentinel:
      transport:
        dashboard: localhost:9006
      #取消控制台懒加载
      eager: true

在这里我修改了sentinel-dashboard-1.8.0.jar的配置文件,将默认端口改成9006了

2.2.3 测试

在这里已经部署完毕,此时启动tools-provider,再重新刷新 localhost:9006,可以看到tools-provider已经在控制台出现

在这里插入图片描述

然后随意访问tools-provider的某个接口,例如 http://localhost:9003/provider/test/value01,然后再点击【簇点链路】,可以看到tools-provider的接口列表信息

在这里插入图片描述

此时我们可以通过右边栏对我们的接口资源进行操作

流控即流量控制,具体操作可参考Sentinel官方资料:https://github.com/alibaba/Sentinel/wiki/%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6

降级即熔断降级,具体操作可参考Sentinel官方资料:https://github.com/alibaba/Sentinel/wiki/%E7%86%94%E6%96%AD%E9%99%8D%E7%BA%A7
官网的操作说明非常详细,在这里我就不详细展开。

2.2.4 自定义限流和熔断

在以上配置中,如果访问量出现超出流量限制或者接口出现熔断,都是使用Sentinel默认的输出,即:

Blocked by Sentinel (flow limiting)

但实际需求中,我们可能会自定义自己的限流和熔断机制。

此时,我们可以通过@SentinelResource注解来实现

@SentinelResource 定义了sentinel中的一种资源,以及对这种资源的熔断降级处理方式,优先级高于全局熔断限流,常用属性:
  value:资源名称(默认方法名),用于sentinel的后台配置策略
  blockHandler: 限流策略
  fallback: 熔断降级策略
注意,熔断限流策略的参数名称和返回值要和资源名称对应

使用举例:

@RestController
@RequestMapping("/test")
public class TestController {

    @RequestMapping("/sample01")
    @SentinelResource(value = "tools2-provider/test/sample01", blockHandler = "blockHandler_sample01", fallback = "fallback_sample01")
    public String sample01() {
        int i = 10/0;
        return "sample011";
    }
  
    //限流策略
    public String blockHandler_sample01(BlockException exception) {
        return "接口tools2-provider/test/sample01熔断:" + exception.getMessage();
    }

    //熔断策略
    public String fallback_sample01(Throwable throwable) {
        return "接口tools2-provider/test/sample01熔断:" + throwable.getMessage();
    }
}

注意:

  • 注解@SentinelResource的blockHandler值是该接口限流策略的方法名,而且该方法要和接口写在同一个类中。fallback的值是该接口熔断策略的方法名,而且该方法也要和接口写在同一个类中。
  • value的值是资源名称,在Sentinel控制台为该接口资源新增限流或熔断时需要用到

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/81603.html

(0)
小半的头像小半

相关推荐

半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!