Sentinel入门学习和使用

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控制台为该接口资源新增限流或熔断时需要用到
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值