Spring Cloud 之 Sentinel简介与GATEWAY整合实现

简介

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

熔断

微服务架构的系统通常会包含多个微服务,各个微服务可能部署在不同的机器上并通过网络进行通信,那么就不可避免会遇到 "网络请求超时" 、"微服务不可用" 等问题,这就会进一步引起依赖它的微服务不可用,这样不断引发服务故障的现象称为『雪崩效应』,最终的结果是整个应用系统瘫痪。
为了解决上述问题,编程领域提出了熔断器:
使用熔断器模式,如果请求出现异常,所有请求都会直接返回,而不会等待或阻塞,这样可以减少资源的浪费。
熔断器所造成的这种现象也叫『快速失败(fast fall)』。

流控

限流功能指的是 Sentinel(类似于过滤器、拦截器的效果)在收到请求后,拒绝请求的放行(至 Controller),而是直接返回,从而减少对 Controller,乃至 Service 的触发执行。
熔断和限流的区别在于,熔断是确确实实发生了错误,而限流是人为(根据设置)强行让一部分请求被打回

Sentinel实现限流

Spring Cloud Alibaba Sentinel 可以分别用在服务的 "请求发起方" 和 "请求被调方"一般实现方式为:
在服务发起方,Sentinel 整合 OpenFeign 实现熔断功能;
在服务被调方,Sentinel 整合 Spring MVC 实现限流功能。
总结:流控针对provider,熔断降级针对consumer

Sentinel监控平台

下载地址:

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


下载后使用java -jar xxx.jar 命令启动服务,Sentinel默认端口为8080,默认账号 :sentinel 默认密码:sentinel

gateway配置:

gateway中pom引入配置已有配置参见Spring Cloud 之 GateWay简介及简单DEMO的搭建):

bash 复制代码
<!--引入sentinel进行服务降级熔断-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
             <version>2.2.7.RELEASE</version>
        </dependency>
        <!--gateway网关整合sentinel进行限流降级-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
            <version>2.2.6.RELEASE</version>
        </dependency>

bootstrap.yml追加sentinel配置;

bash 复制代码
server:
  port: 8081
spring:
  profiles:
    active: dev
  application:
    name: tt-sc-gateway
  cloud:
    #sentinel看板相关配置
    sentinel:
      eager: true
      transport:
        dashboard: 192.168.10.107:8080
        #SpringBoot项目与控制台做交互的端口,默认8719
        port: 8719
      #配置限流后响应内容
      scg:
        fallback:
          #两种模式:一种是response返回文字提示信息,一种是redirect,重定向跳转,同时配置跳转路径
          mode: response
          #配置响应状态码
          response-status: 555
          #响应体
          response-body: '{"code":555,"message":"你被限流了"}'

gateway启动成功后,可在sentinel监控平台中找到网关服务。

sentinel流控控制配置:

资源名:路由id的名字Spring Cloud 之 Feign 简介及简单DEMO的搭建

流量 QPS(每秒查询率),每秒访问次数超过1次限流:

测试结果:

快速刷新访问后返回:

相关推荐
lang2015092814 分钟前
Sentinel熔断降级规则管理详解
sentinel
楠枬39 分钟前
负载均衡 -LoadBalance
后端·spring·spring cloud·负载均衡
今天你TLE了吗1 小时前
Java:基于注解实现去重表消息防止重复消费
java·spring boot·分布式·spring cloud·幂等
不会写程序的未来程序员1 小时前
Redis 哨兵(Sentinel)原理
数据库·redis·sentinel
lang2015092811 小时前
Sentinel流控规则检查源码级分析
sentinel
A Mr Yang17 小时前
JAVA 对比老、新两个列表,找出新增、修改、删除的数据
java·开发语言·spring boot·后端·spring cloud·mybatis
lang2015092817 小时前
Sentinel限流核心:ThrottlingController设计详解
服务器·网络·sentinel
梵得儿SHI20 小时前
SpringCloud - 核心组件精讲:Nacos 深度解析(服务注册 + 配置中心一站式实现)
java·spring boot·spring cloud·nacos·微服务架构的核心组件·服务注册发现与配置管理·nacos的核心原理与实战应用
中国胖子风清扬1 天前
Spring AI 深度实践:在 Java 项目中统一 Chat、RAG、Tools 与 MCP 能力
java·人工智能·spring boot·后端·spring·spring cloud·ai