七、Spring Cloud Alibaba Sentinel简介

随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。

一、特性

丰富的场景:Sentinel支持阿里巴巴双11购物节的关键场景超过10年,如秒杀(即控制突然爆发的流量,使其在系统容量的可接受范围内)、消息负载转移、不可靠的下游应用断路。

全面的实时监控:Sentinel提供实时监控功能。您可以以秒为单位查看服务器的监控数据,甚至可以查看节点少于500个的集群的总体运行时状态。

广泛的开源生态系统:Sentinel提供开箱即用的模块,可以轻松地与其他开源框架/库集成,如Spring Cloud、Dubbo和gRPC。要使用Sentinel,您只需要引入相关的依赖项并进行一些简单的配置。

完善的SPI扩展:Sentinel提供易于使用的完善的SPI扩展接口。您可以使用SPI扩展快速定制逻辑,例如,您可以定义自己的规则管理,或者适应特定的数据源。

二、使用Sentinel Dashboard

Sentinel仪表板是一个轻量级控制台,提供机器发现、单服务器资源监控、集群资源数据概述以及规则管理等功能。需要下载Sentinel Dashboard jar包。下载地址是:https://github.com/alibaba/Sentinel/releases 。下载完成后,用以下命令启动:

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

这里选择的端口是9000。sentinel-dashboard版本是1.8.4。

 

启动成功后,访问http://localhost:9000/,默认登陆的用户名和密码是sentinel/sentinel
 

 

三、资源与规则

的资源,可以是任何东西,服务,服务里的方法,甚至是一段代码。使用 Sentinel 来进行资源保护,主要分为几个步骤:

  1. 定义资源
  2. 定义规则
  3. 检验规则是否生效

先把可能需要保护的资源定义好,之后再配置规则。也可以理解为,只要有了资源,我们就可以在任何时候灵活地定义各种流量控制规则。在编码的时候,只需要考虑这个代码是否需要保护,如果需要保护,就将之定义为一个资源。

 

定义资源有很多方式,可以参考 https://sentinelguard.io/zh-cn/docs/basic-api-resource-rule.html 。最方便可能是使用@SentinelResource注解,通过 @SentinelResource 注解定义资源并配置 blockHandler 和 fallback 函数来进行限流之后的处理。注意 blockHandler 函数会在原方法被限流/降级/系统保护的时候调用,而 fallback 函数会针对所有类型的异常。

规则的种类

Sentinel 的所有规则都可以在内存态中动态地查询及修改,修改之后立即生效。同时 Sentinel 也提供相关 API,供您来定制自己的规则策略。

Sentinel 支持以下几种规则:流量控制规则、熔断降级规则、系统保护规则、来源访问控制规则 和 热点参数规则。

四、简单使用

要在Spring Cloud Alibaba中使用Sentinel,只需要加入依赖:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

这里用Consumer模块做演示。启动nacos和Sentinel Dashboard并加入依赖后在application.properties配置:

spring.cloud.sentinel.transport.port=8719
spring.cloud.sentinel.transport.dashboard=localhost:9000

spring.cloud.sentinel.transport.dashboard配置Sentinel Dashboard的ip和端口,spring.cloud.setinel.transport.port中指定的端口号将在应用程序的相应服务器上启动HTTP服务器,该服务器将与sentinel仪表板交互。例如,如果在Sentinel仪表板中添加了流控规则,则规则数据将被推送到HTTP服务器并由其接收,然后HTTP服务器将规则注册到Sentinel。

 

在HelloConsumer增加:

@RequestMapping("/index")
@SentinelResource("HelloConsumer-index")
public String index() {
    return "index";
}

指定资源名是HelloConsumer-index。启动后访问Sentinel Dashboard,如果看不到Consumer,可以访问http://localhost:7001/consumer/index,重启Sentinel Dashboard或Consumer:
 

 
看到簇点链路什么都没有,在浏览器访问http://localhost:7001/consumer/index,再看Sentinel Dashboard:
 

 

现在看到记录了。

 

设置HelloConsumer-index的流控规则:
 

 

 

设置QPS为10。用jmeter访问,设置QPS为20,访问后:
 

 

看到异常率是45%。流控已生效。

posted @ 2023-06-20 21:59  shigp1  阅读(19)  评论(0编辑  收藏  举报