SpringCloud Day12---SpringCloud Alibaba Sentinel 服务熔断与限流(一)

简介: SpringCloud Day12---SpringCloud Alibaba Sentinel 服务熔断与限流(一)

15. SpringCloud Alibaba Sentinel实现熔断与限流


15.1 概述


15.1.1 官网


英文: https://github.com/alibaba/Sentinel

中文: https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D


15.1.2 介绍


96e4e1d87882c91ebadb741f151c6ed1.png


7cefad6e249b9d2cc551d300963984d5.png



一句话解释,之前我们讲解过的Hystrix


15.1.3 去哪下


https://github.com/alibaba/Sentinel/releases


ad719bfb2303025956eab86f1948913e.png



15.1.4 能干嘛


7c851f7763f70d5c25a9ab278910e069.png

15.1.5 怎么玩


官网:https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html#_spring_cloud_alibaba_sentinel


服务使用中的各种问题:


  • 服务雪崩
  • 服务降级
  • 服务熔断
  • 服务限流


15.2 安装Sentinel控制台

15.2.1 sentinel组件由2部分构成


0c839bc6b2b7844944c7b07059d6cb4d.png

15.2.2 安装步骤


1.下载


https://github.com/alibaba/Sentinel/releases


ab99a18ee64c21b2a45232aa3144402d.png



2.运行命令


前提:


  • java8环境OK
  • 8080端口不能被占用,sentinel内部有Tomcat…


启动:

java -jar sentinel-dashboard-1.7.0.jar

如果端口被占用可以: java -Dserver.port=8888 -jar sentinel-dashboard-1.7.0.jar


1aadb3142b18ebcdcc446b8366c57fa7.png


3.访问sentinel管理界面

访问: http://localhost:端口号 ,登录账号密码均为sentinel

ff96e5a8bc5658d04bc35e97139e9bbb.png



15.3 初始化演示工程


15.3.1 前提条件


启动Nacos,访问http://192.168.174.128:8848/nacos/#/login 访问成功


15.3.2 建立sentinel8041


建Module—cloudalibaba-sentinel-service8401

POM

<dependencies>
    <!--SpringCloud ailibaba nacos -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <!--SpringCloud ailibaba sentinel-datasource-nacos 后续做持久化用到-->
    <dependency>
        <groupId>com.alibaba.csp</groupId>
        <artifactId>sentinel-datasource-nacos</artifactId>
    </dependency>
    <!--SpringCloud ailibaba sentinel -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    </dependency>
    <!--openfeign-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    <!-- SpringBoot整合Web组件+actuator -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <!--日常通用jar包配置-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>cn.hutool</groupId>
        <artifactId>hutool-all</artifactId>
        <version>4.6.3</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>
  • YML
server:
  port: 8401
spring:
  application:
    name: cloudalibaba-sentinel-service
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.174.128:8848 #Nacos服务注册中心地址
    sentinel:
      transport:
        dashboard: localhost:8080 #配置Sentinel dashboard地址
        port: 8719 #默认8719端口,假如被占用会自动从8719开始依次+1扫描,直至找到未被占用的端口
management:
  endpoints:
    web:
      exposure:
        include: '*'
  • 主启动
@EnableDiscoveryClient
@SpringBootApplication
public class MainApp8401
{
    public static void main(String[] args) {
        SpringApplication.run(MainApp8401.class, args);
    }
}
  • 业务类FlowLimitController
@RestController
public class FlowLimitController
{
    @GetMapping("/testA")
    public String testA()
    {
        return "------testA";
    }
    @GetMapping("/testB")
    public String testB()
    {
        return "------testB";
    }
}

15.3.3 测试结果


  • 启动Sentinel8888
  • 启动微服务8401
  • 启动8401微服务,查看sentienl控制台


空空如也,啥都没有


87df57ffa35fda2cd982e1fb8f329375.png



原因在于:Sentinel采用的懒加载

执行一次访问即可: 访问http://localhost:8401/testA 和http://localhost:8401/testB

00a7d8a5d186abdc5d98925ce4695da8.png


结论:sentinel8080正在监控微服务8401


15.4 流控规则

15.4.1 基本介绍

0011eb1133cdcd89ee1f60e3a9ab726a.png

进一步说明

d18e0cffc384c63ea1a152ebc89eaf67.png


QPS和线程数的区别


31b859cb4dffc0f118e2d7e78a605c64.png



QPS:御敌于国门之外,即一次只能有QPS个请求数.

线程数:进来之后关门打狗,一次只能有线程数个任务被处理,多余的不进行处理…


15.4.2 流控模式


1.直接(默认)

直接->快速失败

  • 配置及说明:

表示1秒钟内查询1次就是OK,若超过次数1,就直接-快速失败,报默认错误


image.png


测试:

快速点击访问http://localhost:8401/testA


结果:Blocked by Sentinel (flow limiting)


思考

直接调用默认报错信息,技术方面OK。 but,是否应该有我们自己的后续处理?类似有个fallback的兜底方法?


2.关联


是什么

当关联的资源达到阈值时,就限流自己


当与A关联的资源B达到阀值后,就限流A自己


B惹事,A挂了,如:支付接口达到阈值限制下订单的接口


配置A


当关联资源/testB的qps阀值超过1时,就限流/testA的Rest访问地址,当关联资源到阈值后限制配置好的资源名


image.png



postman模拟并发密集访问testB


正常访问testB成功


image.png



postman里新建多线程集合组


image.png


将访问地址添加进新新线程组

8e3818069c919aa4884e8301e7263182.png

RUN


a0148d972afb6ed2d8541bb24dd5fe4e.png



  • 点击访问http://localhost:8401/testA ,进行测试

结果:由于大批量线程高并发访问B,发现testA挂了



3e95df1767fcf7b905afe8285fe1479b.png



3.链路.

多个请求调用了同一个微服务…

相关文章
|
18天前
|
监控 虚拟化 Docker
Sentinel监测到了服务,但是实时监控不显示曲线图,应该怎么解决这个问题?
在虚拟机(VMware,IP:192.168.175.100)中部署了Sentinel,使用Docker运行,端口映射为8858。服务的`application.properties`配置指向Sentinel仪表盘(192.168.175.100:8858),客户端IP为物理机IP(192.168.2.2)。然而,cart-service在Sentinel中显示失联且无曲线图,而sentinel-dashboard自身监控正常。
|
6天前
|
人工智能 SpringCloudAlibaba 自然语言处理
SpringCloud Alibaba AI整合DeepSeek落地AI项目实战
在现代软件开发领域,微服务架构因其灵活性、可扩展性和模块化特性而受到广泛欢迎。微服务架构通过将大型应用程序拆分为多个小型、独立的服务,每个服务运行在其独立的进程中,服务与服务间通过轻量级通信机制(通常是HTTP API)进行通信。这种架构模式有助于提升系统的可维护性、可扩展性和开发效率。
56 1
|
2月前
|
人工智能 安全 Java
AI 时代:从 Spring Cloud Alibaba 到 Spring AI Alibaba
本次分享由阿里云智能集团云原生微服务技术负责人李艳林主讲,主题为“AI时代:从Spring Cloud Alibaba到Spring AI Alibaba”。内容涵盖应用架构演进、AI agent框架发展趋势及Spring AI Alibaba的重磅发布。分享介绍了AI原生架构与传统架构的融合,强调了API优先、事件驱动和AI运维的重要性。同时,详细解析了Spring AI Alibaba的三层抽象设计,包括模型支持、工作流智能体编排及生产可用性构建能力,确保安全合规、高效部署与可观测性。最后,结合实际案例展示了如何利用私域数据优化AI应用,提升业务价值。
200 4
|
3月前
|
存储 SpringCloudAlibaba Java
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论。
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
|
2月前
|
人工智能 自然语言处理 Java
Spring Cloud Alibaba AI 入门与实践
本文将介绍 Spring Cloud Alibaba AI 的基本概念、主要特性和功能,并演示如何完成一个在线聊天和在线画图的 AI 应用。
425 7
|
6月前
|
SpringCloudAlibaba API 开发者
新版-SpringCloud+SpringCloud Alibaba
新版-SpringCloud+SpringCloud Alibaba
|
3月前
|
SpringCloudAlibaba 负载均衡 Dubbo
【SpringCloud Alibaba系列】Dubbo高级特性篇
本章我们介绍Dubbo的常用高级特性,包括序列化、地址缓存、超时与重试机制、多版本、负载均衡。集群容错、服务降级等。
【SpringCloud Alibaba系列】Dubbo高级特性篇
|
3月前
|
SpringCloudAlibaba JavaScript Dubbo
【SpringCloud Alibaba系列】Dubbo dubbo-admin安装教程篇
本文介绍了 Dubbo-Admin 的安装和使用步骤。Dubbo-Admin 是一个前后端分离的项目,前端基于 Vue,后端基于 Spring Boot。安装前需确保开发环境(Windows 10)已安装 JDK、Maven 和 Node.js,并在 Linux CentOS 7 上部署 Zookeeper 作为注册中心。
【SpringCloud Alibaba系列】Dubbo dubbo-admin安装教程篇
|
3月前
|
SpringCloudAlibaba Dubbo Java
【SpringCloud Alibaba系列】Dubbo基础入门篇
Dubbo是一款高性能、轻量级的开源Java RPC框架,提供面向接口代理的高性能RPC调用、智能负载均衡、服务自动注册和发现、运行期流量调度、可视化服务治理和运维等功能。
【SpringCloud Alibaba系列】Dubbo基础入门篇
|
3月前
|
Java Nacos Sentinel
Spring Cloud Alibaba:一站式微服务解决方案
Spring Cloud Alibaba(简称SCA) 是一个基于 Spring Cloud 构建的开源微服务框架,专为解决分布式系统中的服务治理、配置管理、服务发现、消息总线等问题而设计。
570 13
Spring Cloud Alibaba:一站式微服务解决方案