Spring Cloud Alibaba Sentinel 初体验

sentinel 启动配置项 阅读详情

Sentinel介绍

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

Sentinel具有以下特征:

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

Sentinel 的主要特性:

Sentinel 分为两个部分:

  • 核心库(Java 客户端)不依赖任何框架/库,能够运行于所有 Java 运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。
  • 控制台(Dashboard)基于 Spring Boot 开发,打包后可以直接运行,不需要额外的 Tomcat 等应用容器。

Sentinel 和 Hystrix 对比

快速开始

下载启动控制台

Sentinel 控制台提供了一系列规则配置,如果不需要控制就要自己在代码里面写规则了,比较麻烦,所以有还是最好的。 下载地址:github.com/alibaba/Sen… 找到这个jar包下载就行

Sentinel 控制台本身就是一个springboot的jar包 启动命令如下:

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

其中 -Dserver.port=8080 用于指定 Sentinel 控制台端口为 8080。 从 Sentinel 1.6.0 起,Sentinel 控制台引入基本的登录功能,默认用户名和密码都是 sentinel。 访问http://localhost:8080/#/login,进入Sentinel 管理页面

登录成功后首页

示例代码

  1. 新建一个springboot项目sentinel-provider,引入依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

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

spring-boot-starter-web 是必须要有的,Sentinel配置 需要在Servlet 环境才生效。

  1. 配置文件
server.port=8085
# 服务名
spring.application.name=SentinelProvider

spring.cloud.sentinel.transport.port=8719
# dashboard 地址
spring.cloud.sentinel.transport.dashboard=localhost:8080

配置的意思在后面会说到。

  1. 创建测试类

TestServiceImpl.java

@Service
public class TestServiceImpl implements TestService{

    // 原函数
    @SentinelResource(value = "sayHello", blockHandler = "exceptionHandler", fallback = "helloFallback")
    public String sayHello(String name) throws Exception {

        if ("throws".equals(name)) {
            throw new Exception("exceptionHandler 生效了");
        }
        return "Hello, " + name;
    }

    // Fallback 函数,函数签名与原函数一致或加一个 Throwable 类型的参数.
    public String helloFallback(String name) {
        System.out.println("helloFallback 生效,params = "+name);
        return "helloFallback 生效,params = "+name;
    }

    // Block 异常处理函数,参数最后多一个 BlockException,其余与原函数一致.
    public String exceptionHandler(String name , BlockException ex) {
        // Do some log here.
        ex.printStackTrace();
        return "exceptionHandler起作用了,params="+name;
    }
}

SentinelProviderController.java

@RestController
@RequestMapping("/provider")
public class SentinelProviderController {

    @Autowired
    private TestService service;

    @GetMapping(value = "/hello/{name}")
    public String apiHello(@PathVariable String name) throws Exception {
        return service.sayHello(name);
    }
}

  1. 测试 启动sentinel-provider,启动之后访问sentinel控制台就能看到该服务,

  1. 先通过浏览器访问进行一个正常的测试:

  1. 再进行一个抛异常的测试:

  1. 最后再通过控制台进行一个降级测试:
    • 在簇点链路下找到我们使用了@SentinelResource的资源,只有先调用接口之后才能在簇点链路找到对应的资源

*   在流控中进行配置流控规则 为了简单测试一下,我们就将QPS单机阈值设置为1![](https://upload-images.jianshu.io/upload_images/28070583-48cbc6629c8808e9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


     在流控规则列表中可以看到我们配置的规则:

降级测试: 多刷新几个调用就会看到如下页面

这样一个简单的测试就结束了,至于@SentinelResource注解是什么意思,请接着往下看。

@SentinelResource 介绍

注意:注解方式埋点不支持 private 方法。

@SentinelResource 用于定义资源,并提供可选的异常处理和 fallback 配置项。 @SentinelResource 注解包含以下属性:

  • value:资源名称,必需项(不能为空)
  • entryType:资源调用的流量类型,配置是入口流量(EntryType.IN)还是出口流量(EntryType.OUT),注意系统规则只对 IN 生效,可选项(默认为 EntryType.OUT)
  • blockHandler / blockHandlerClass: 在原方法被限流/降级/系统保护的时候调用,blockHandler 对应处理 BlockException 的方法名称,可选项。blockHandler 方法访问范围需要是 public,返回类型需要与原方法相匹配,参数类型需要和原方法相匹配并且最后加一个额外的参数,类型为 BlockException。blockHandler 方法默认需要和原方法在同一个类中。若希望使用其他类的方法,则可以指定 blockHandlerClass 为对应的类的 Class 对象,注意对应的方法必需为 static方法,否则无法解析。
  • fallback / fallbackClass:fallback 方法名称,可选项,用于在抛出异常的时候提供 fallback 处理逻辑。fallback 方法可以针对所有类型的异常(除了 exceptionsToIgnore 里面排除掉的异常类型)进行处理。fallback 方法签名和位置要求:
    • 返回值类型必须与原方法返回值类型一致;
    • 方法参数列表需要和原方法一致,或者可以额外多一个 Throwable 类型的参数用于接收对应的异常。
    • fallback方法默认需要和原方法在同一个类中。若希望使用其他类的方法,则可以指定 fallbackClass 为对应的类的 Class 对象,注意对应的方法必需为 static方法,否则无法解析。
  • defaultFallback(since 1.6.0):默认的 fallback 方法名称,可选项,通常用于通用的 fallback 逻辑(即可以用于很多服务或方法)。默认 fallback 方法可以针对所有类型的异常(除了 exceptionsToIgnore 里面排除掉的异常类型)进行处理。若同时配置了 fallback 和 defaultFallback,则只有 fallback 会生效。defaultFallback 方法签名要求:
    • 返回值类型必须与原方法返回值类型一致;
    • 方法参数列表需要为空,或者可以额外多一个 Throwable 类型的参数用于接收对应的异常。
    • defaultFallback方法默认需要和原方法在同一个类中。若希望使用其他类的方法,则可以指定 fallbackClass 为对应的类的 Class 对象,注意对应的方法必需为 static 方法,否则无法解析。
  • exceptionsToIgnore(since 1.6.0):用于指定哪些异常被排除掉,不会计入异常统计中,也不会进入 fallback 逻辑中,而是会原样抛出。

原方法 是指使用了 @SentinelResource注解的方法,1.8.0 版本开始,defaultFallback 支持在类级别进行配置。

注:1.6.0 之前的版本 fallback 函数只针对降级异常(DegradeException)进行处理,不能针对业务异常进行处理。

特别地,若 blockHandler 和 fallback 都进行了配置,则被限流降级而抛出 BlockException 时只会进入 blockHandler 处理逻辑。若未配置 blockHandler、fallback 和 defaultFallback,则被限流降级时会将 BlockException 直接抛出(若方法本身未定义 throws BlockException 则会被 JVM 包装一层 UndeclaredThrowableException)。

名词解释

  • 资源:可以是任何东西,服务,服务里的方法,甚至是一段代码。使用 Sentinel 来进行资源保护,主要分为几个步骤:
  1. 定义资源
  2. 定义规则
  3. 检验规则是否生效

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

配置项

Spring Cloud Alibaba Sentinel 提供了这些配置选项:

配置项含义默认值
spring.application.name or project.nameSentinel项目名
spring.cloud.sentinel.enabledSentinel自动化配置是否生效true
spring.cloud.sentinel.eager是否提前触发 Sentinel 初始化false
spring.cloud.sentinel.transport.port应用与Sentinel控制台交互的端口,应用本地会起一个该端口占用的HttpServer8719
spring.cloud.sentinel.transport.dashboardSentinel 控制台地址
spring.cloud.sentinel.transport.heartbeat-interval-ms应用与Sentinel控制台的心跳间隔时间
spring.cloud.sentinel.transport.client-ip此配置的客户端IP将被注册到 Sentinel Server 端
spring.cloud.sentinel.filter.orderServlet Filter的加载顺序。Starter内部会构造这个filterInteger.MIN_VALUE
spring.cloud.sentinel.filter.url-patterns数据类型是数组。表示Servlet Filter的url pattern集合/*
spring.cloud.sentinel.filter.enabledEnable to instance CommonFiltertrue
spring.cloud.sentinel.metric.charsetmetric文件字符集UTF-8
spring.cloud.sentinel.metric.file-single-sizeSentinel metric 单个文件的大小
spring.cloud.sentinel.metric.file-total-countSentinel metric 总文件数量
spring.cloud.sentinel.log.dirSentinel 日志文件所在的目录
spring.cloud.sentinel.log.switch-pidSentinel 日志文件名是否需要带上 pidfalse
spring.cloud.sentinel.servlet.block-page自定义的跳转 URL,当请求被限流时会自动跳转至设定好的 URL
spring.cloud.sentinel.flow.cold-factorWarmUp 模式中的 冷启动因子3
spring.cloud.sentinel.zuul.order.preSentinelZuulPreFilter 的 order10000
spring.cloud.sentinel.zuul.order.postSentinelZuulPostFilter 的 order1000
spring.cloud.sentinel.zuul.order.errorSentinelZuulErrorFilter 的 order-1
spring.cloud.sentinel.scg.fallback.modeSpring Cloud Gateway 流控处理逻辑 (选择 redirect or response)
spring.cloud.sentinel.scg.fallback.redirectSpring Cloud Gateway 响应模式为 'redirect' 模式对应的重定向 URL
spring.cloud.sentinel.scg.fallback.response-bodySpring Cloud Gateway 响应模式为 'response' 模式对应的响应内容
spring.cloud.sentinel.scg.fallback.response-statusSpring Cloud Gateway 响应模式为 'response' 模式对应的响应码429
spring.cloud.sentinel.scg.fallback.content-typeSpring Cloud Gateway 响应模式为 'response' 模式对应的 content-typeapplication/json

NOTE: 请注意,这些配置只有在 Servlet 环境下才会生效,RestTemplate 和 Feign 针对这些配置都无法生效

32.微服务之间的调用方式RestTemplate和FeignClient SpringCloud服务间的调用有两种方式:RestTemplate和FeignClient。不管是什么方式,他都是通过REST接口调用服务的http接口,参数和结果默认都是通过jackson序列化和反序列化。因为Spring MVC的RestController定义的接口,返回的数据都是通过Jackson序列化成JSON数据。一、RestTemplate使用这种方式,只需要定义一个RestTe... 阅读详情

相关推荐

Spring Cloud Alibaba Sentinel 整合 Feign 的设计实现

前段时间 Hystrix 宣布不再维护之后(Hystrix 停止开发。。。Spring Cloud 何去何从?),Feign 作为一个跟 Hystrix 强依赖的组件,必然会有所担心后续的使用。 作为 Spring Cloud Alibaba 体系中的熔断器 Sentinel,Sentinel 目前整合了 Feign Feign 是什么? Feign 是一个 Java 实现的 Http 客户...

二十同学 8万+

神器!Alibaba Sentinel,功能真心强大!

大家好,我是老赵!最近公司准备上微服务了,限流打算用阿里的Sentinel,但网上资料实在太少了,学习压力还是蛮大的,无意中发现了一本专门讲解Sentinel的好书:《实战Alibaba Sentinel:深度解析微服务高并发流量治理》(文末附本书详细介绍),写的太好了,让我真正学习到了Sentinel,项目实战中也起到了关键作用。强烈推荐一波!Sentinel简介背景分...

公众号-老炮说Java 1607

Spring Cloud Alibaba Sentinel 限流实例

什么是Sentinel Sentinel是阿里巴巴开源的分布式系统的流量防卫组件,Sentinel 把流量作为切入点,从流量控制,熔断降级,系统负载保护等多个维度保护服务的稳定性。 Sentinel 具有以下特征 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游...

程序猿老王的博客 4017

Sentinel流量控制熔断降级

Spring Cloud Alibaba Sentinel Sentinel 介绍 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 Sentinel具有以下特征: 丰富的应用场景: Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、实时熔断下游不可用应用等。 完备的实时监控: Sentinel 同时...

MYC19891010的专栏 1555

Alibaba Spring Cloud 十五 Sentinel

在微服务架构下,可靠性是核心问题之一,而Sentinel恰恰能够帮助我们在限流、熔断与系统稳定性方面提供一整套完整而灵活的解决方案。结合 Spring Cloud Alibaba 的 Starter 进行使用,可以大幅减少集成成本,同时借助可视化的 Sentinel 控制台,对系统运行状况和配置管理一目了然。如果你打算在 Spring Cloud 或者其他 Java 微服务应用中落地流控、熔断、系统自适应保护等功能,Sentinel 会是一个非常不错的选择。

空 1036

Spring Cloud与Spring Cloud Alibaba:全面解析与核心要点

Spring Cloud是一系列框架的集合,它基于Spring Boot构建,为分布式系统开发提供了一站式解决方案。它提供了诸如服务发现与注册、配置中心、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话等多种功能组件,极大地简化了分布式系统的开发难度。Spring Cloud Alibaba是阿里巴巴结合自身在分布式系统开发中的实践经验,对Spring Cloud进行的扩展和增强。

恩爸编程 1914

Spring Cloud Alibaba Sentinel - - >流控规则初体验

Sentinel 可以简单的分为 Sentinel 核心库 (sentinel-core依赖) 和 Dashboard (Sentinel控制台)。核心库不依赖 Dashboard,但是结合 Dashboard 可以取得最好的效果 (因为通过Sentinel控制台,我们可以更方便的设置规则,不仅效率提高了,还能进行实时监控,而无需编写java代码来设置规则)。

想好了就去做吧 即便失败了 至少这条路上留下了你的脚印 637

Spring Cloud Alibaba Sentinel用nacos配置规则

Nacos存储限流规则 sentinel自身就支持了多种不同的数据源来持久化规则配置,目前包括以下几种方式: 文件 nacos zookeeper apollo 本文将使用Spring Cloud Alibaba的中整合的配置中心Nacos存储限流规则。 下面我们将同时使用到Nacos和Sentinel Dashboard,所以可以先把Nacos和Sentinel Dashboard...

qq_28341873的博客 1798

Spring Cloud Alibaba Sentinel 网关流量控制之Spring Cloud Gateway实战

学习本篇文章之前如果你还没有了解过Sentinel是什么的话,请先学习一下分布式系统的流量防卫兵Sentinel-入门指南。这样就这轻松学习Spring Cloud Alibaba Sentinel的使用。 1.如何使用 Sentinel 如果要在您的项目中引入 Sentinel,使用 group ID 为com.alibaba.cloud 和 artifact ID 为 spring-cloud...

东子的博客 细节决定成败,点滴铸就辉煌。 4万+

spring cloud alibaba系列(二)Sentinel应用的限流管理

限流组件Sentinel Sentinel是把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 默认支持 Servlet、Feign、RestTemplate、Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。 自带控台动态修改限流策略。但是每次服务重启后就丢失了。所以它也支持...

u010391342的博客 7632

【springcloud 微服务】Spring Cloud Alibaba整合Sentinel详解

Spring Cloud Alibaba整合Sentinel详解

congge_study的博客 6853

Spring Cloud Alibaba 快速学习之 Sentinel

在微服务系统中,一个对外的业务功能可能会涉及很长的服务调用链路。当其中某个服务出现异常,如果没有服务调用保护机制可能会造成该服务调用链路上大量相关服务直接或间接调用的服务器仍然持续不断发起请求,最终导致相关的所有服务资源耗尽产生异常发生雪崩效应。限流和降级分别作为在流量控制和服务保护方面的两个重要手段,可以有效地应对此类问题。Sentinel以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。本章将快速讲解Sentinel的简单应用,阅读前需要先了解前置章节。

D_J_Dragon的博客 1802

Spring Cloud Alibaba 之 Sentinel

Sentinel 是由阿里巴巴中间件团队开发的开源项目,是一种面向分布式微服务架构的轻量级高可用流量控制组件。 Sentinel 主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度帮助用户保护服务的稳定性。

Java 技术专栏,从入门到精通,熟悉企业级开发 8660

【Spring Cloud Alibaba】Sentinel(一)

Sentinel 是阿里巴巴开源的分布式系统的流量防护组件,主要用来做流量控制、熔断降级、系统保护。它的定位类似于Hystrix,但更侧重在流量治理上。目前在微服务、服务网关、大型分布式系统中广泛使用,Spring Cloud Alibaba 体系中也自带集成。🌟 Sentinel 的核心功能1.流量控制(限流)可以针对 QPS(每秒请求数)、并发线程数、调用关系等维度设置阈值。支持 匀速排队、预热模式、冷启动模式 等策略,避免突发流量冲击。2.熔断降级。

Blue_Pepsi_Cola的博客 826

Spring Cloud Alibaba系列教程——Spring Cloud Alibaba开篇

随着Spring Cloud Alibaba的发展,Spring Cloud Alibaba的相关组件逐渐的成熟,对于它的学习和研究已经是java开发人员的趋势。这篇博文主要内容是介绍什么是Spring Cloud Alibaba,Spring Cloud 与Spring Cloud Alibaba的关系,以及我们为什么要学习它,以及畅想Spring Cloud Alibaba未来发展。

努力+坚持,而且还很年轻 6654

运算放大器 VS 仪表放大器

运算放大器(Operational Amplifier, 简称 Op Amp)和仪表放大器(Instrumentation Amplifier, 简称INA)在电子电路设计中都有非常广泛的应用,但两者在结构、特性以及应用场景上都有明显的区别。以下是它们之间主要的差异:运算放大器(Op Amp)仪表放大器(INA)运算放大器仪表放大器运算放大器仪表放大器运算放大器仪表放大器运算放大器仪表放大器总之,运算放大器是通用型放大元件,需要设计者自己做额外的电路配置;而仪表放大器则是针对高精度测量差分信号而生,内部匹配

chinahongjiang的博客 1347

Alibaba Sentinel spring-cloud-starter-alibaba-sentinel基本使用

1、下载Sentinel控制台 下载地址:https://github.com/alibaba/Sentinel/releases 启动 : java -jar sentinel-dashboard-1.6.3.jar 默认端口为8080 或 java -Dserver.port=8088-jar sentinel-dashboard-1.6.3.jar...

... 1万+

在MacBook M1/M2上,手把手教你打包包含嵌入模型的RagFlow Docker镜像(避坑指南)

本文详细指导如何在MacBook M1/M2上构建ARM64架构的RagFlow Docker镜像,涵盖环境准备、依赖处理、镜像构建及性能优化全流程。特别针对Apple Silicon芯片的兼容性问题提供解决方案,帮助开发者高效完成本地开发环境搭建。

weixin_26908317的博客 242
上一篇: 国内多位架构大牛强烈推荐的大型分布式手册
下一篇: MyBatis是什么?使用它作为持久层框架有什么优点?
Java技术那些事儿
博客等级 码龄5年 2306粉丝 2584原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值