本文详细介绍了Sentinel初识教程,涵盖Sentinel的基本概念、作用及应用场景。文章还提供了环境搭建和规则配置的详细步骤,帮助读者快速上手。此外,还包括Sentinel控制台的使用方法及进阶功能的介绍。
Sentinel初识教程:新手入门指南 1. Sentinel简介1.1 什么是Sentinel
Sentinel 是阿里巴巴开源的一款微服务保护神,致力于提供一站式的流量控制、熔断降级、系统保护等功能,以实现服务的高可用和稳定。Sentinel 通过简单的配置,可以保护应用免受流量洪峰和系统崩溃的影响,同时还能在出现问题时快速响应并采取保护措施。
1.2 Sentinel的作用和应用场景
Sentinel 主要用于以下几个方面:
- 流量控制:控制进入系统的请求流量,避免系统因为流量过高而崩溃。
- 熔断降级:当某个微服务出现故障时,Sentinel 可以自动熔断该服务,防止故障扩散到整个系统。
- 系统保护:提供多个维度的系统保护,例如 CPU、内存、线程池等,防止系统过载。
- 参数校验:对请求参数进行校验,确保请求的合法性。
Sentinel 的应用场景包括但不限于:
- 高并发流量控制:在双11、618等大促期间,通过 Sentinel 控制请求流量,确保系统在高并发下仍然稳定。
- 服务熔断降级:在服务出现故障时,及时熔断故障服务,并降级处理,确保整个系统的可用性。
- 系统资源保护:通过监控系统资源使用情况,实时调整策略,确保系统资源不会被耗尽。
1.3 Sentinel的核心概念和术语
Sentinel 使用一些核心概念和术语来描述它的功能和配置方式:
- 资源:资源是一段代码逻辑,可以是一个方法、一个接口等。资源是Sentinel进行流量控制、熔断降级等操作的基本单位。
- 规则:规则是Sentinel进行流量控制、熔断降级等操作的依据。规则可以分为流控规则、熔断降级规则、系统保护规则等。
- 流控:流控是指控制请求的流量,防止流量过大导致系统崩溃。流控规则分为直接流控、链路流控、关联流控等。
- 熔断降级:熔断降级是指在服务出现问题时,自动熔断该服务,并降级处理。熔断降级规则可以设置为单机熔断、集群熔断、慢调用比例等。
- 系统保护:系统保护是指监控系统的资源使用情况,防止系统资源被耗尽。系统保护规则可以监控 CPU、内存、线程池等。
- 控制台:控制台是Sentinel的管理界面,可以查看系统的实时状态,配置规则,进行监控和报警。
2.1 快速入门:本地环境搭建
Sentinel 支持多种语言和框架,这里以 Java-Spring Boot 为例进行环境搭建。
首先,添加 Sentinel 相关依赖到你的项目中,例如 Maven 项目的 pom.xml
文件中添加以下依赖:
<!-- Spring Boot Starter Sentinel -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
接下来,配置 Sentinel 以启用监控和规则管理功能。在 application.properties
中添加以下配置:
# 启用 Sentinel 监控
spring.cloud.sentinel.transport.dashboard=localhost:8080
spring.cloud.sentinel.transport.port=8719
启动 Spring Boot 应用后,就可以通过 Sentinel 控制台来管理和监控应用了。
2.2 常用依赖与配置
除了上述的基本配置外,你还可以添加更多依赖来增强功能,例如:
<!-- Sentinel Degrade 规则依赖 -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-mybatis</artifactId>
<version>1.8.2</version>
</dependency>
配置文件 application.properties
中可以添加更多配置项,如:
# 启用 Sentinel Dashboard
spring.cloud.sentinel.dashboard.server=localhost:8080
# 启用 Degrade 规则
spring.cloud.sentinel.degrade.enabled=true
# 启用系统保护规则
spring.cloud.sentinel.system-enabled=true
这些配置将会帮助你更好地管理和优化你的应用。
3. Sentinel规则配置3.1 资源定义
资源定义是 Sentinel 进行流量控制、熔断降级等操作的基础。资源定义可以通过编程方式或者 Sentinel 控制台来定义。
3.1.1 编程方式定义资源
在 Spring Boot 中,可以使用 @SentinelResource
注解来定义资源:
import com.alibaba.csp.sentinel.annotation.SentinelResource;
@RestController
public class HelloController {
@GetMapping("/hello")
@SentinelResource("hello")
public String hello() {
return "Hello, Sentinel!";
}
}
上述代码中,hello
方法被定义为一个资源,资源名为 hello
。
3.1.2 控制台定义资源
在 Sentinel 控制台中,进入资源管理页面,点击“新建资源”,输入资源名,比如 hello
,然后保存即可。
3.2 流控规则配置
流控规则用于控制进入系统的请求流量,防止系统因流量过大而崩溃。
3.2.1 流控规则类型
流控规则可以分为以下几种类型:
- 直接流控:适用于所有请求,可以根据 IP、参数等条件进行过滤。
- 链路流控:适用于由多个服务组成的微服务架构,可以控制服务间的流量。
- 关联流控:适用于由多个服务组成的服务链,可以控制服务链上的流量。
3.2.2 流控规则配置示例
在控制台中,进入流控规则管理页面,选择或新建一个资源,点击“添加流控规则”。
以直接流控为例,可以设置以下参数:
- 资源名:
hello
- 流控模式:
链路
,表示按接口流量控制 - 阈值类型:
QPS
,表示每秒请求数量 - 阈值:
10
,表示每秒最多允许 10 个请求 - 流控行为:
快速失败
,表示超出阈值时直接返回错误信息
3.3 熔断降级规则配置
熔断降级规则用于在服务出现问题时,自动熔断该服务,并降级处理。
3.3.1 熔断降级规则类型
熔断降级规则可以分为以下几种类型:
- 单机熔断:适用于单个服务节点,可以根据服务调用的响应时间、异常比例等条件进行熔断。
- 集群熔断:适用于由多个节点组成的服务集群,可以根据服务调用的响应时间、异常比例等条件进行熔断。
- 慢调用比例:适用于服务之间相互调用的情况,可以根据调用时间百分位数进行熔断。
3.3.2 熔断降级规则配置示例
在控制台中,进入熔断降级规则管理页面,选择或新建一个资源,点击“添加熔断降级规则”。
以单机熔断为例,可以设置以下参数:
- 资源名:
hello
- 熔断模式:
慢调用比例
,表示根据调用时间百分位数进行熔断 - 统计模式:
单机
,表示在单个服务节点上进行统计 - 慢调用比例:
90
,表示当请求响应时间超过90%阈值时触发熔断 - 熔断阈值:
5
,表示连续5次调用超过阈值时触发熔断
3.4 系统保护规则配置
系统保护规则用于监控系统的资源使用情况,防止系统资源被耗尽。
3.4.1 系统保护规则类型
系统保护规则可以监控以下资源:
- CPU:监控 CPU 使用率
- 内存:监控 JVM 内存使用情况
- 线程池:监控线程池的活跃线程数、排队等待线程数等
3.4.2 系统保护规则配置示例
在控制台中,进入系统保护规则管理页面,点击“添加系统保护规则”。
以 CPU 保护为例,可以设置以下参数:
- 资源名:
hello
- 监控类型:
CPU
,表示监控 CPU 使用情况 - 阈值类型:
使用率
,表示监控 CPU 使用率 - 阈值:
90
,表示当 CPU 使用率超过90%时触发保护 - 控制效果:
快速失败
,表示当触发保护时直接返回错误信息
4.1 如何启动控制台
Sentinel 控制台是一个 Web 应用,可以通过 Maven 或者自行打包后启动。以下是通过 Maven 启动控制台的步骤:
- 在命令行中执行以下命令下载并启动控制台:
mvn clean install -DskipTests cd sentinel-dashboard mvn jetty:run
- 访问 http://localhost:8080,默认用户名密码为 sentinel。
4.2 控制台的功能介绍及使用
Sentinel 控制台提供了多种功能,主要包括:
- 资源管理:管理所有的资源,可以查看、修改资源的定义。
- 规则管理:管理所有的规则,可以查看、修改规则的配置。
- 监控和报警:实时监控系统的状态,当系统出现问题时,可以自定义报警规则。
- 历史数据查看:查看系统的历史监控数据,以便进行回溯分析。
4.2.1 资源管理
在控制台中,可以查看所有资源的定义,以及这些资源的实时调用情况。
- 在控制台首页,点击“资源管理”。
- 在资源列表中,可以查看每个资源的详细信息,包括资源名、调用次数、成功次数等。
4.2.2 规则管理
在控制台中,可以管理所有的规则,包括流控规则、熔断降级规则、系统保护规则等。
- 在控制台首页,点击“规则管理”。
- 在规则列表中,可以查看每个规则的详细信息,包括规则名、规则类型、规则参数等。
- 可以根据需要添加、修改、删除规则。
4.2.3 实时监控和报警
在控制台中,可以实时监控系统的状态,当系统出现问题时,可以自定义报警规则。
- 在控制台首页,点击“实时监控”。
- 在实时监控页面,可以查看系统的实时数据,包括流量、RT、成功率等。
- 在控制台首页,点击“报警规则”。
- 在报警规则页面,可以查看所有的报警规则,以及这些规则的触发情况。
- 可以根据需要添加、修改、删除报警规则。
4.2.4 历史数据查看
在控制台中,可以查看系统的历史监控数据,以便进行回溯分析。
- 在控制台首页,点击“历史数据”。
- 在历史数据页面,可以查看过去的监控数据,包括流量、RT、成功率等。
5.1 API网关流量控制
Sentinel 支持 API 网关流量控制,可以通过 Sentinel 控制台或者编程方式来配置 API 网关的流量控制规则。
- 在控制台中,进入 API 网关流量控制页面,点击“添加 API 网关流量控制规则”。
- 在规则列表中,可以查看每个规则的详细信息,包括规则名、规则类型、规则参数等。
- 可以根据需要添加、修改、删除规则。
5.1.1 编程方式配置示例
在代码中,可以通过编程方式来配置 API 网关的流量控制规则:
import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;
public class GatewayFlowRuleConfig {
public static void initGatewayRules() {
List<FlowRule> rules = new ArrayList<>();
FlowRule rule = new FlowRule();
rule.setResource("example-api");
rule.setGrade(FlowRuleManager.FLOW_GRADE_QPS);
rule.setCount(10);
rule.setThresholdType(FlowRuleManager.THRESHOLD_TYPE_REQUEST);
rules.add(rule);
FlowRuleManager.loadRules(rules);
}
}
5.2 数据中心(DataCenter)集成
Sentinel 支持数据中心集成,可以通过 Sentinel 控制台或者编程方式来配置数据中心的集成规则。
- 在控制台中,进入数据中心集成页面,点击“添加数据中心集成规则”。
- 在规则列表中,可以查看每个规则的详细信息,包括规则名、规则类型、规则参数等。
- 可以根据需要添加、修改、删除规则。
5.2.1 编程方式配置示例
在代码中,可以通过编程方式来配置数据中心的集成规则:
import com.alibaba.csp.sentinel.datasource.ConfigService;
import com.alibaba.csp.sentinel.datasource.FileDataSource;
import com.alibaba.csp.sentinel.init.InitFunc;
import com.alibaba.csp.sentinel.slots.block.RuleManager;
import com.alibaba.csp.sentinel.slots.datasource.DataChangedEvent;
import com.alibaba.csp.sentinel.slots.datasource.IDatasource;
public class DataSourceConfig implements InitFunc {
private static final String DATA_PATH = "/path/to/your/config.json";
@Override
public void init() {
IDatasource<String> dataSource = new FileDataSource(DATA_PATH, new ConfigService() {
@Override
public void onRefresh(String content, DataChangedEvent event) {
RuleManager.loadRules(JSON.parseArray(content, FlowRule.class));
}
});
dataSource.init();
}
}
5.3 Sentinel自定义规则和扩展
Sentinel 支持自定义规则和扩展,可以通过 Sentinel 控制台或者编程方式来配置自定义规则和扩展。
- 在控制台中,进入自定义规则和扩展页面,点击“添加自定义规则和扩展规则”。
- 在规则列表中,可以查看每个规则的详细信息,包括规则名、规则类型、规则参数等。
- 可以根据需要添加、修改、删除规则。
5.3.1 编程方式配置示例
在代码中,可以通过编程方式来配置自定义规则和扩展规则:
import com.alibaba.csp.sentinel.Entry;
import com.alibaba.csp.sentinel.Sentinel;
import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
@RestController
public class CustomRuleController {
@GetMapping("/custom")
@SentinelResource(value = "customRule", blockHandler = "handleBlock")
public String customRule() {
Entry entry = null;
try {
entry = Sentinel.getEntry("customRule");
// Do something...
return "Custom Rule";
} catch (BlockException e) {
return "Block";
} finally {
if (entry != null) {
entry.exit();
}
}
}
public String handleBlock(BlockException e) {
return "Block";
}
}
6. 常见问题解答与社区资源
6.1 常见问题与解决方案
6.1.1 问题1:如何查看系统的实时状态?
在 Sentinel 控制台中,点击“实时监控”标签页,可以查看系统的实时状态,包括流量、RT、成功率等。
6.1.2 问题2:如何配置报警规则?
在 Sentinel 控制台中,点击“报警规则”标签页,可以配置报警规则,当系统出现问题时,可以自定义报警规则。
6.1.3 问题3:如何配置自定义规则?
在 Sentinel 控制台中,可以配置自定义规则,也可以通过编程方式来配置自定义规则。
6.1.4 问题4:如何配置数据中心集成?
在 Sentinel 控制台中,可以配置数据中心集成,也可以通过编程方式来配置数据中心集成。
6.2 获取更多帮助:官方文档与社区资源
更多关于 Sentinel 的信息可以在 官方文档 中找到。
加入 Sentinl 社区可以获取更多帮助:
在开发过程中遇到问题,可以参考官方文档或加入社区寻求帮助。
共同学习,写下你的评论
评论加载中...
作者其他优质文章