为了账号安全,请及时绑定邮箱和手机立即绑定

Sentinel初识教程:新手入门指南

概述

本文详细介绍了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. 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. Sentinel控制台使用

4.1 如何启动控制台

Sentinel 控制台是一个 Web 应用,可以通过 Maven 或者自行打包后启动。以下是通过 Maven 启动控制台的步骤:

  1. 在命令行中执行以下命令下载并启动控制台:
    mvn clean install -DskipTests
    cd sentinel-dashboard
    mvn jetty:run
  2. 访问 http://localhost:8080,默认用户名密码为 sentinel。

4.2 控制台的功能介绍及使用

Sentinel 控制台提供了多种功能,主要包括:

  • 资源管理:管理所有的资源,可以查看、修改资源的定义。
  • 规则管理:管理所有的规则,可以查看、修改规则的配置。
  • 监控和报警:实时监控系统的状态,当系统出现问题时,可以自定义报警规则。
  • 历史数据查看:查看系统的历史监控数据,以便进行回溯分析。

4.2.1 资源管理

在控制台中,可以查看所有资源的定义,以及这些资源的实时调用情况。

  1. 在控制台首页,点击“资源管理”。
  2. 在资源列表中,可以查看每个资源的详细信息,包括资源名、调用次数、成功次数等。

4.2.2 规则管理

在控制台中,可以管理所有的规则,包括流控规则、熔断降级规则、系统保护规则等。

  1. 在控制台首页,点击“规则管理”。
  2. 在规则列表中,可以查看每个规则的详细信息,包括规则名、规则类型、规则参数等。
  3. 可以根据需要添加、修改、删除规则。

4.2.3 实时监控和报警

在控制台中,可以实时监控系统的状态,当系统出现问题时,可以自定义报警规则。

  1. 在控制台首页,点击“实时监控”。
  2. 在实时监控页面,可以查看系统的实时数据,包括流量、RT、成功率等。
  3. 在控制台首页,点击“报警规则”。
  4. 在报警规则页面,可以查看所有的报警规则,以及这些规则的触发情况。
  5. 可以根据需要添加、修改、删除报警规则。

4.2.4 历史数据查看

在控制台中,可以查看系统的历史监控数据,以便进行回溯分析。

  1. 在控制台首页,点击“历史数据”。
  2. 在历史数据页面,可以查看过去的监控数据,包括流量、RT、成功率等。
5. Sentinel进阶功能

5.1 API网关流量控制

Sentinel 支持 API 网关流量控制,可以通过 Sentinel 控制台或者编程方式来配置 API 网关的流量控制规则。

  1. 在控制台中,进入 API 网关流量控制页面,点击“添加 API 网关流量控制规则”。
  2. 在规则列表中,可以查看每个规则的详细信息,包括规则名、规则类型、规则参数等。
  3. 可以根据需要添加、修改、删除规则。

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 控制台或者编程方式来配置数据中心的集成规则。

  1. 在控制台中,进入数据中心集成页面,点击“添加数据中心集成规则”。
  2. 在规则列表中,可以查看每个规则的详细信息,包括规则名、规则类型、规则参数等。
  3. 可以根据需要添加、修改、删除规则。

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 控制台或者编程方式来配置自定义规则和扩展。

  1. 在控制台中,进入自定义规则和扩展页面,点击“添加自定义规则和扩展规则”。
  2. 在规则列表中,可以查看每个规则的详细信息,包括规则名、规则类型、规则参数等。
  3. 可以根据需要添加、修改、删除规则。

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 社区可以获取更多帮助:

在开发过程中遇到问题,可以参考官方文档或加入社区寻求帮助。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消