springCloud之Sentinel流量路由、流量控制、流量整形、熔断降级

简介: springCloud之Sentinel流量路由、流量控制、流量整形、熔断降级

官网

https://sentinelguard.io/zh-cn/docs/introduction.html

一、Sentinel介绍

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

二、监控端安装

1、下载地址

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

2、直接启动或者使用IDEA指定端口启动

3、登录(接口按照自己的写)

http://localhost:8858/#/login

账号密码均为:sentinel


三、客户端配置sentinel

1、引入依赖

<!--流量控制-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>

2、修改配置文件

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/cloudstudy
    username: root
    password: 123456
  cloud:
    sentinel:
      transport:
        # 添加监控页面地址即可
        dashboard: localhost:8858
      # 关闭Context收敛,这样被监控方法可以进行不同链路的单独控制
      web-context-unify: false
      # 将刚刚编写的请求映射设定为限流页面
      block-page: /blocked

3、启动客户端调用接口

http://localhost:8301/borrow1/1

刷新控制台,查看实时监控

四、流控、熔断、热点

详情查看官方文档

https://sentinelguard.io/zh-cn/docs/flow-control.html

部分测试代码

 
 
import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.alibaba.fastjson.JSONObject;
import com.minos.entity.UserBorrowDetail;
import com.test.service.BorrowService;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
 
import javax.annotation.Resource;
import java.io.IOException;
 
@RestController
public class BorrowController {
 
    @Resource
    BorrowService service;
 
    @RequestMapping("/borrow1/{uid}")
    UserBorrowDetail findUserBorrows(@PathVariable("uid") int uid) {
        return service.getUserBorrowDetailByUid(uid);
    }
 
    @RequestMapping("/borrow2/{uid}")
    UserBorrowDetail findUserBorrows2(@PathVariable("uid") int uid) {
        return service.getUserBorrowDetailByUid(uid);
    }
    @RequestMapping("/borrow3/{uid}")
    String findUserBorrows3(@PathVariable("uid") int uid) throws InterruptedException {
        Thread.sleep(1000);
        return "findUserBorrows3";
    }
    @RequestMapping("/borrow4/{uid}")
    String findUserBorrows4(@PathVariable("uid") int uid) throws InterruptedException {
       throw new RuntimeException("异常了");
    }
 
    @RequestMapping("/blocked")
    JSONObject blocked() {
        JSONObject object = new JSONObject();
        object.put("code", 403);
        object.put("success", false);
        object.put("massage", "您的请求频率过快,请稍后再试!");
        return object;
    }
 
    @RequestMapping("/test")
    @SentinelResource("test")
        //注意这里需要添加@SentinelResource才可以,用户资源名称就使用这里定义的资源名称
    String test(@RequestParam(value = "a", required = false) String a,
                @RequestParam(value = "b", required = false) String b,
                @RequestParam(value = "c", required = false) String c) {
        return "请求成功!a = " + a + ", b = " + b + ", c = " + c;
    }
 
    @RequestMapping("/test2")
    @SentinelResource(value = "test2",
            fallback = "except",    //fallback指定出现异常时的替代方案
            blockHandler = "black",//blockHandler执行位于except之前
            exceptionsToIgnore = IOException.class)
        //忽略那些异常,也就是说这些异常出现时不使用替代方案
    String test2() {
        return "test2";
    }
 
    //替代方法必须和原方法返回值和参数一致,最后可以添加一个Throwable作为参数接受异常
    String except(Throwable t) {
        return "except";
    }
 
    String black(BlockException t) {
        return "Block";
    }
}
- 直接:只针对于当前接口。
- 关联:当其他接口超过阈值时,会导致当前接口被限流。
- 链路:更细粒度的限流,能精确到具体的方法。

热点数据进行精准限流,比如在某一时刻,不同参数被携带访问的频率是不一样的:
 
- http://localhost:8301/test?a=10  访问100次
- http://localhost:8301/test?b=10  访问0次
- http://localhost:8301/test?c=10  访问3次

相关文章
|
2月前
|
XML 监控 Java
Spring Cloud全解析:熔断之Hystrix简介
Hystrix 是由 Netflix 开源的延迟和容错库,用于提高分布式系统的弹性。它通过断路器模式、资源隔离、服务降级及限流等机制防止服务雪崩。Hystrix 基于命令模式,通过 `HystrixCommand` 封装对外部依赖的调用逻辑。断路器能在依赖服务故障时快速返回备选响应,避免长时间等待。此外,Hystrix 还提供了监控功能,能够实时监控运行指标和配置变化。依赖管理方面,可通过 `@EnableHystrix` 启用 Hystrix 支持,并配置全局或局部的降级策略。结合 Feign 可实现客户端的服务降级。
159 23
|
2月前
|
监控 Java API
谷粒商城笔记+踩坑(25)——整合Sentinel实现流控和熔断降级
先简单介绍熔断、降级等核心概念,然后阐述SpringBoot整合Sentinel的实现方式,最后介绍Sentinel在本项目中的应用。
谷粒商城笔记+踩坑(25)——整合Sentinel实现流控和熔断降级
|
3月前
|
负载均衡 监控 Java
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
|
4月前
|
负载均衡 Java Spring
Spring cloud gateway 如何在路由时进行负载均衡
Spring cloud gateway 如何在路由时进行负载均衡
488 15
|
4月前
|
监控 Java 应用服务中间件
SpringCloud面试之流量控制组件Sentinel详解
SpringCloud面试之流量控制组件Sentinel详解
229 0
|
4月前
|
监控 Java 开发者
Spring Cloud中的服务熔断与降级
Spring Cloud中的服务熔断与降级
|
4月前
|
负载均衡 Java API
Spring Cloud中的服务路由与过滤
Spring Cloud中的服务路由与过滤
|
4月前
|
监控 算法 Java
高并发架构设计三大利器:缓存、限流和降级问题之配置Sentinel的流量控制规则问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之配置Sentinel的流量控制规则问题如何解决
|
4月前
|
Java API 网络架构
Spring Cloud中的服务路由与过滤技术实现
Spring Cloud中的服务路由与过滤技术实现
|
3月前
|
Java UED Sentinel
微服务守护神:Spring Cloud Sentinel,让你的系统在流量洪峰中稳如磐石!
【8月更文挑战第29天】Spring Cloud Sentinel结合了阿里巴巴Sentinel的流控、降级、熔断和热点规则等特性,为微服务架构下的应用提供了一套完整的流量控制解决方案。它能够有效应对突发流量,保护服务稳定性,避免雪崩效应,确保系统在高并发下健康运行。通过简单的配置和注解即可实现高效流量控制,适用于高并发场景、依赖服务不稳定及资源保护等多种情况,显著提升系统健壮性和用户体验。
83 1