Sentinel入门学习和使用
文章目录
一,介绍
随着分布式系统变得越来越流行,服务之间的可靠性变得比以往任何时候都更加重要。Sentinel 以“流”为切入点,在流控、 流量整形、熔断、系统自适应保护等多个领域开展工作,保障微服务的可靠性和弹性。
Sentinel具有以下特定:
- 丰富的应用场景:Sentinel在阿里巴巴广泛使用,几乎覆盖了近10年双11购物节的所有核心场景,比如“秒杀”需要限制突发流量满足系统容量、消息削峰填谷、下游不可靠服务断路、集群流量控制等。
- 实时监控:Sentinel 还提供实时监控能力。可以实时查看单机运行时信息,500节点以下集群运行时信息汇总。
- 广泛的开源生态系统:Sentinel 提供与 Spring Cloud、Dubbo 和 gRPC 等常用框架和库的开箱即用集成。您只需将适配器依赖项添加到您的服务即可轻松使用 Sentinel。
- 多语言支持:Sentinel 提供了对 Java、Go和C++的原生支持。
- 多种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