编辑
2024-11-08
实用工具
00
请注意,本文编写于 146 天前,最后修改于 146 天前,其中某些信息可能已经过时。

目录

简介
sentinel的特征
sentinel的主要优势和特性
使用
核心库
引入依赖
埋点
sentinel控制台
启动控制台
引入依赖
yml配置
nacos配置

简介

随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

官网

sentinel的特征

  • 丰富的应用场景: Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等
  • 完备的实时监控: Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况
  • 广泛的开源生态: Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel
  • 完善的 SPI 扩展点: Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等

sentinel的主要优势和特性

  • 轻量级,核心库无多余依赖,性能损耗小
  • 方便接入,开源生态广泛
  • 丰富的流量控制场景
  • 易用的控制台,提供实时监控、机器发现、规则管理等能力
  • 完善的扩展性设计,提供多样化的 SPI 接口,方便用户根据需求给 Sentinel 添加自定义的逻辑

Sentinel和Hystrix对比

SentinelHystrix
隔离策略信号量隔离线程池隔离/信号量隔离
熔断降级策略基于响应时间或失败比率基于失败比率
实时指标实现滑动窗口滑动窗口(基于 RxJava)
规则配置支持多种数据源支持多种数据源
扩展性多个扩展点插件的形式
基于注解的支持支持支持
限流基于 QPS,支持基于调用关系的限流有限的支持
流量整形支持慢启动、匀速器模式不支持
系统负载保护支持不支持
控制台开箱即用,可配置规则、查看秒级监控、机器发现等不完善
常见框架的适配Servlet、Spring Cloud、Dubbo、gRPC 等Servlet、Spring Cloud Netflix

使用

Sentinel 分为两个部分:

核心库(Java 客户端)不依赖任何框架/库,能够运行于所有 Java 运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。

控制台(Dashboard)基于 Spring Boot 开发,打包后可以直接运行,不需要额外的 Tomcat 等应用容器。

核心库

引入依赖

<dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-core</artifactId> <version>1.8.6</version> </dependency>

埋点

将需要限流的使用entry = SphU.entry("HelloWorld")进行包裹,initFlowRules()进行初始化限流规则

java
public static void main(String[] args) { initFlowRules(); while (true) { Entry entry = null; try { entry = SphU.entry("HelloWorld"); /*您的业务逻辑 - 开始*/ System.out.println("hello world"); /*您的业务逻辑 - 结束*/ } catch (BlockException e1) { /*流控逻辑处理 - 开始*/ System.out.println("block!"); /*流控逻辑处理 - 结束*/ } finally { if (entry != null) { entry.exit(); } } } }

也可以直接使用注解的方式@SentinelResource

java
//每秒最多只能通过 20 个请求 private static void initFlowRules(){ List<FlowRule> rules = new ArrayList<>(); FlowRule rule = new FlowRule(); rule.setResource("HelloWorld"); rule.setGrade(RuleConstant.FLOW_GRADE_QPS); // Set limit QPS to 20. rule.setCount(20); rules.add(rule); FlowRuleManager.loadRules(rules); }

详细文档

sentinel控制台

github下载

启动控制台

java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar

其中 -Dserver.port=8080 用于指定 Sentinel 控制台端口为 8080。

默认账号密码都是sentinel

提示

windows启动时请使用CMD,如果使用powershell可能会提示找不到port

访问localhost:8080

引入依赖

gateway服务引入以下依赖

xml
<!-- SpringCloud Alibaba Sentinel --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency> <!-- SpringCloud Alibaba Sentinel Gateway --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId> </dependency> <!-- Sentinel Datasource Nacos --> <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-datasource-nacos</artifactId> </dependency>
  1. spring-cloud-starter-alibaba-sentinel:

这个依赖是 Spring Cloud Alibaba Sentinel 的核心依赖,它提供了 Sentinel 与 Spring Cloud 集成的基本功能。

它允许你在 Spring Cloud 应用中使用 Sentinel 提供的流量控制、熔断、系统自适应保护等能力。 通过这个依赖,你可以定义规则来控制进入你应用的流量,比如限流规则、熔断规则等,以保护你的服务不被过载。

  1. spring-cloud-alibaba-sentinel-gateway:

这个依赖是 Sentinel 与 Spring Cloud Gateway 的集成模块。

它允许你在 Spring Cloud Gateway 中使用 Sentinel 的流量控制功能,从而在网关层面对流量进行控制和保护。 通过这个依赖,你可以在网关层面定义全局的流量控制规则,或者为特定的路由定义特定的规则。

  1. sentinel-datasource-nacos:

这个依赖提供了 Sentinel 与 Nacos 配置中心的集成。

它允许你将 Sentinel 的规则存储在 Nacos 中,从而实现动态规则配置和集中管理。 通过这个依赖,你可以在 Nacos 中动态地修改 Sentinel 的规则,而不需要重新部署或重启应用,这使得规则管理更加灵活和实时。

yml配置

yml
spring: cloud: nacos: sentinel: # 取消控制台懒加载 eager: true transport: # 控制台地址 dashboard: 127.0.0.1:8718 # nacos配置持久化 datasource: ds1: nacos: server-addr: 127.0.0.1:8848 dataId: sentinel-haowee-gateway groupId: DEFAULT_GROUP data-type: json rule-type: gw-flow

nacos配置

文件名

json
[ { "resource": "haowee-auth", "count": 500, "grade": 1, "limitApp": "default", "strategy": 0, "controlBehavior": 0 }, { "resource": "haowee-system", "count": 1000, "grade": 1, "limitApp": "default", "strategy": 0, "controlBehavior": 0 }, { "resource": "haowee-gen", "count": 200, "grade": 1, "limitApp": "default", "strategy": 0, "controlBehavior": 0 }, { "resource": "haowee-job", "count": 300, "grade": 1, "limitApp": "default", "strategy": 0, "controlBehavior": 0 } ]

其他服务只引入spring-cloud-starter-alibaba-sentinel这一个依赖即可

本文作者:Weee

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!