导航

  • 一、什么是Sentinel
  • 1.1 Sentinel 的优点
  • 二、整合 Sentinel 演示
  • 三、Sentinel控制台与微服务通信的原理
  • 四、Sentinel 流控演示


一、什么是Sentinel

jedis集成springcloud springcloud sentinel集群_spring

Sentinel 是阿里开源的用于提供微服务架构容错方案的组件。它以流量作为切入点,从流量控制、熔断降级、系统负载保护 这三个主要纬度保证整体服务的稳定性。Sentinel 可分为两部分:核心库(Java 客户端)控制台(dashboard)。核心库不依赖任何框架或类库,运行于所有Java运行时上。控制台基于 Spring Boot 开发,打包后可直接运行。

1.1 Sentinel 的优点

  1. 丰富的应用场景:秒杀、消息削峰填谷、集群流量控制、实时熔断下游。
  2. 完备的实时监控:实时监控功能,例如通过控制台可以看到单节点秒级数据,甚至是500台服务器以下规模的集群汇总运行情况。
  3. 开源生态:提供开箱即用的,可与其他开源框架整合的模块,如 Spring Cloud、Dubbo、gRPC 等。
  4. SPI 扩展点:完善的 SPI 扩展接口,方便快速定制规则,适配动态数据源等。

二、整合 Sentinel 演示

Sentinel 分为两部分,整合 Sentinel 需要在上游微服务中添加相应依赖,例如 order 服务调用 product,就需要在 order 微服务中加入 sentinel starter。

  1. 添加依赖
    shop-order 微服务
<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
  1. 添加测试接口
@Slf4j
@RestController
@RequestMapping("/order")
public class OrderController {

    @GetMapping("/message1")
    public String message1() {
        return "message1";
    }
	// ...
}
  1. 下载 dashboard 控制台
    https://github.com/alibaba/Sentinel/wiki/Dashboard
  2. jedis集成springcloud springcloud sentinel集群_spring_02

  3. 下载后使用如下命令,执行jar包:
java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.2.jar

启动成功后,打开浏览器,访问 localhost:8080 登录名密码都是 sentinel,就可以进入sentinel dashboard:

jedis集成springcloud springcloud sentinel集群_jedis集成springcloud_03

  1. 将 shop-order 微服务实例接入 sentinel
    这一步需要在 配置文件中加入 如下配置:
spring:
  cloud:
    sentinel:
      transport:
        dashboard: localhost:8080 # sentinel dashboard 服务ip和端口地址
        port:9999 # 与sentinel dashboard 传输数据的端口,随意指定一个未使用的端口即可
  1. 测试
    加好配置后,启动微服务 : shop-order ,由于sentinel 是懒加载的,必须调用一次接口之后才能显示在控制台。

三、Sentinel控制台与微服务通信的原理

Sentinel 控制台实际上就是一个 Spring boot 项目。我们需要将应用微服务注册到控制台上,即在微服务中指定控制台的地址,并且还要开启一个跟控制台传递数据的端口。控制台也可以通过此端口调用微服务中的监控程序获取微服务的各种信息。

四、Sentinel 流控演示

简单演示一下 Sentinel 的流控效果。

要求:实现对接口 /order/message1 的流控,限制每秒访问请求最多2个,超出的请求被拦截掉。

打开控制台“流控规则” 设置卡,添加流控规则:

jedis集成springcloud springcloud sentinel集群_java_04

新增后,尝试请求接口:

jedis集成springcloud springcloud sentinel集群_zookeeper_05


频繁刷新后,就会偶尔出现请求被流控调的返回信息,证明 sentinel 流控成功。