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次限流:

测试结果:

快速刷新访问后返回:

相关推荐
鸽鸽程序猿13 小时前
【JavaEE】【SpringCloud】注册中心_nacos
java·spring cloud·java-ee
递归尽头是星辰16 小时前
Spring Cloud Alibaba 核心理论体系:Nacos、Sentinel、Seata深度解析
spring cloud·nacos·sentinel·seata·微服务治理
lpfasd12316 小时前
springcloud docker 部署问题排查与解决方案
spring·spring cloud·docker
蓝眸少年CY17 小时前
(第七篇)spring cloud之Hystrix断路器
spring·spring cloud·hystrix
蓝眸少年CY19 小时前
(第八篇)spring cloud之zuul路由网关
后端·spring·spring cloud
码出财富1 天前
SpringBoot 内置的 20 个高效工具类
java·spring boot·spring cloud·java-ee
daladongba1 天前
Spring Cloud Gateway
java·spring cloud·gateway
梁bk2 天前
[spring cloud] Seata分布式事务管理
分布式·spring·spring cloud
张二狗和苗翠花2 天前
Spring Cloud Nacos + @RefreshScope + @Value实现配置项动态刷新
spring·spring cloud
资生算法程序员_畅想家_剑魔2 天前
Java常见技术分享-分布式篇-SpringCloud-01-基础组件
java·分布式·spring cloud