超详细springcloud sentinel教程~

news2024/11/17 1:33:35

基础

介绍

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

基本概念

资源

资源是 Sentinel 的关键概念。它可以是 Java 应用程序中的任何内容
可以理解我们平常的接口就是资源了

规则

围绕资源的实时状态设定的规则,可以包括流量控制规则、熔断降级规则以及系统保护规则。所有规则可以动态实时调整。

工作机制

  • 对主流框架提供适配或者显示的 API,来定义需要保护的资源,并提供设施对资源进行实时统计和调用链路分析。
  • 根据预设的规则,结合对资源的实时统计信息,对流量进行控制。同时,Sentinel 提供开放的接口,方便您定义及改变规则。
  • Sentinel 提供实时的监控系统,方便您快速了解目前系统的状态。

在 Sentinel 里面,所有的资源都对应一个资源名称以及一个 Entry。Entry 可以通过对主流框架的适配自动创建,也可以通过注解的方式或调用 API 显式创建;每一个 Entry 创建的时候,同时也会创建一系列功能插槽(slot chain)

插槽的职责:

  • **NodeSelectorSlot **负责收集资源的路径,并将这些资源的调用路径,以树状结构存储起来,用于根据调用路径来限流降级;
  • **ClusterBuilderSlot **则用于存储资源的统计信息以及调用者信息,例如该资源的 RT, QPS, thread count 等等,这些信息将用作为多维度限流,降级的依据;
  • **StatisticSlot **则用于记录、统计不同纬度的 runtime 指标监控信息;
  • **FlowSlot **则用于根据预设的限流规则以及前面 slot 统计的状态,来进行流量控制;
  • **AuthoritySlot **则根据配置的黑白名单和调用来源信息,来做黑白名单控制;
  • **DegradeSlot **则通过统计信息以及预设的规则,来做熔断降级;
  • **SystemSlot **则通过系统的状态,例如 load1 等,来控制总的入口流量;

总体框架
image.png

控制台

Sentinel 提供一个轻量级的开源控制台,它提供机器发现以及健康情况管理、监控(单机和集群),规则管理和推送的功能

功能

  • 查看机器列表以及健康情况:收集 Sentinel 客户端发送的心跳包,用于判断机器是否在线。
  • 监控 (单机和集群聚合):通过 Sentinel 客户端暴露的监控 API,定期拉取并且聚合应用监控信息,最终可以实现秒级的实时监控。
  • 规则管理和推送:统一管理推送规则。
  • 鉴权:生产环境中鉴权非常重要。这里每个开发者需要根据自己的实际情况进行定制。

安装

1、下载

方式一:公众号获取
关注I am Walker回复sentinel控制台即可获取jar包

方式二:github下载
https://github.com/alibaba/Sentinel/releases

2、启动

  • 记得需要先安装jdk,至少是8以上
  • 进入到该jar包的路径下
java -Dserver.port=9088 -Dcsp.sentinel.dashboard.server=localhost:9088 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.6.jar&

这里的端口可以进行更改

image.png
启动成功,之后可以访问host:port
image.png
默认账号密码都是sentinel

使用场景

账号密码配置

java -Dserver.port=9088 -Dcsp.sentinel.dashboard.server=localhost:9088 -Dproject.name=sentinel-dashboard -Dsentinel.dashboard.auth.username=sentinel -Dsentinel.dashboard.auth.password=123456 -Dserver.servlet.session.timeout=7200 -jar sentinel-dashboard-1.8.6.jar&
  • -Dsentinel.dashboard.auth.username=sentinel 用于指定控制台的登录用户名为 sentinel;
  • -Dsentinel.dashboard.auth.password=123456 用于指定控制台的登录密码为 123456;如果省略这两个参数,默认用户和密码均为 sentinel;
  • -Dserver.servlet.session.timeout=7200 用于指定 Spring Boot 服务端 session 的过期时间,如 7200 表示 7200 秒;60m 表示 60 分钟,默认为 30 分钟;

功能场景

springcloud简单整合,实现流控

前提条件

  • 启动dashboard

1、添加依赖

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

2、配置yaml

server:
  port: 10111
  servlet:
    context-path: /order

spring:
  application:
    name: walker-order
  cloud:
    sentinel:
      transport:
      # dashboard的ip和端口 
        dashboard: localhost:9088



3、调用接口

package com.walker.order.controller;

import com.alibaba.csp.sentinel.annotation.SentinelResource;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
import java.util.Map;

@RestController
@RequestMapping("/test")
public class TestController {


    @GetMapping("/get")
    public String get(HttpServletRequest request){
        return "you get order";
    }

}

调用接口
image.png
调用之后,就可以看到出现的服务以及我们刚才调用的接口
image.png

4、流控设置

直接模式
  • 配置流控设置

image.png
我们这里先设置每秒1次,之后点击新增
image.png

  • 测试

多次访问请求地址,之后可以看见返回Blocked by Sentinel (flow limiting)
翻译:Sentinel堵塞(限流)
image.png
可以看到,返回的Status Code是429
image.png

关联模式

这个代表,如果关联的接口超过阈值了,那么本接口也会被控制

  • 编写/A、/B接口
package com.walker.order.controller;

import com.alibaba.csp.sentinel.annotation.SentinelResource;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
import java.util.Map;

@RestController
@RequestMapping("/test")
public class TestController {


    @GetMapping("/A")
    public String A(){
        return "A";
    }
    @GetMapping("/B")
    public String B(){
        return "B";
    }


}

  • 访问/A /B接口 显示链路

image.png

  • 对/test/A 流控设置

image.png
这里对/test/B设置单机阈值为1,也就是当/test/B访问的qps=1时,/test/A会被限流

  • 测试

先执行/test/B
image.png
再执行/test/A
image.png

因为没有使用jmeter进行并发测试,所以手速可以快一些

链路模式

只记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阈值,就进行限流)【API级别的针对来源】

熔断设置

先看一下新增熔断规则的相关字段
image.png

熔断策略
主要分为:

  • 慢调用比例
  • 异常比例
  • 异常数

慢调用比例

慢调用比例 (SLOW_REQUEST_RATIO):
选择以慢调用比例作为阈值,需要设置允许的慢调用 RT(即最大的响应时间),请求的响应时间大于该值则统计为慢调用。
当单位统计时长(statIntervalMs)内请求数目大于设置的最小请求数目,并且慢调用的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。
经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求响应时间小于设置的慢调用 RT 则结束熔断,若大于设置的慢调用 RT 则会再次被熔断。

实践

1、接口编写

    @GetMapping("/slow")
    public String slow() throws InterruptedException {
        Thread.sleep(1000);
        return "ok";
    }

2、规则设定
image.png
规则代表着,统计时长2s内,如果有2个请求数,且有0.5的比例响应时长超过500ms的,则熔断5s
3、测试
第一次调用
image.png
再次调用,则被熔断了
image.png

异常比例

异常比例 (ERROR_RATIO)
当单位统计时长(statIntervalMs)内请求数目大于设置的最小请求数目,并且异常的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。异常比率的阈值范围是 [0.0, 1.0],代表 0% - 100%。

实践

1、controller编写

    @GetMapping("/errorPercent")
    public String errorPercent(){
        int i=1/0;
        return "ok";
    }

2、熔断规则
image.png
代表着2s内如果请求数量大于2条,且有0.1的比例是异常的,那么将熔断5s

3、测试
快速调用2次,都能获取到
image.png
调用两次之后,就出现了5s的熔断了
image.png

异常数

异常数 (ERROR_COUNT):当单位统计时长内的异常数目超过阈值之后会自动进行熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。

实践
  • 编写接口
package com.walker.order.controller;

import com.alibaba.csp.sentinel.annotation.SentinelResource;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
import java.util.Map;

@RestController
@RequestMapping("/test")
public class TestController {


    @GetMapping("/fusing")
    public String fusing(){
        // 报错
        int a=1/0;
        return "fusing";
    }


}

  • 请求获取链路

image.png

  • 设置链路规则

image.png
熔断策略有3种,这里选择异常数进行测试
image.png

  • 测试 请求多次

image.png
就会出现阻断的信息了

热点key

介绍

首先先看看控制台上的新增热点规则,下面进行各个字段的介绍
image.png

资源:
资源名就是我们的路径了,也可以在代码中使用注解@SentinelResource进行备注
image.png

限流方式:这里只支撑QPS
参数索引:代表的是我们接口中使用的参数的下标
例如我们要对下面的接口k1有值的时候进行限流,那么参数索引就填写0,如果对k2进行限制,那么就填1
image.png

**单机阈值:**代表的是当QPS达到多少的时候,进行限流
**统计窗口时长:**代表的是链路被限流的时长

实践

1、controller编写
	/**
    * 热点key
    */
@GetMapping("/hotkey")
@SentinelResource(value = "hotkey",blockHandler = "hotkeyHandler")
public String hotkey(String k1,String k2){
    return "hotkey";
}

public String hotkeyHandler(String k1, String k2, BlockException exception){
    return "该热点key已经被限流";
}

**hotkeyHandler:**阻断处理器,可以自定义阻断的时候,对链路进行拦截,返回需要的信息,或者进行记录之类的

2、热点规则编写

image.png
这里设置了参数0,QPS达到1s请求数=1的时候,进行5s的窗口时长

3、测试

测试k1有值的时候
第一次请求是没有问题的
image.png
之后再请求就被限流了
image.png
测试k2
发现如何调用都没有影响,因为没有进行限制
image.png

自定义流控返回信息

使用@SentinelResource的blockHandler属性,然后编写方法
image.png

统一处理异常信息

1、配置BlockExceptionHandler

package com.walker.order.config;

import com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.BlockExceptionHandler;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.alibaba.csp.sentinel.slots.block.authority.AuthorityException;
import com.alibaba.csp.sentinel.slots.block.degrade.DegradeException;
import com.alibaba.csp.sentinel.slots.block.flow.FlowException;
import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowException;
import com.alibaba.csp.sentinel.slots.system.SystemBlockException;
import com.alibaba.fastjson.JSON;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Slf4j
@Component
// 1、实现BlockExceptionHandler
public class MyBlockExceptionHandler implements BlockExceptionHandler {


    // 2、重写handle方法
    @Override
    public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, BlockException e) throws Exception {

        String msg="";

        if(e instanceof FlowException)
            msg="接口限流";
        else if(e instanceof DegradeException)
            msg="服务降级了";
        else if(e instanceof ParamFlowException)
            msg="参数限流了";
        else if(e instanceof AuthorityException)
            msg="权限规则不通过";
        else if(e instanceof SystemBlockException)
            msg="系统保护";

        httpServletResponse.setContentType("application/json;charset=utf-8");
        httpServletResponse.getWriter().write(JSON.toJSONString(msg));

    }
}

2、测试
设置过程便省略了,这边可以自己配置哈
image.png

问题

接口请求之后控制台没有监控数据

原因:
因为我的dashboard是部署在云服务上的,然后我的微服务放在本地,
但是本地和云服务器的网络不同,导致失败
可以查看sentinel-dashboard的日志
image.png
打通网络就可以了

参考

https://blog.csdn.net/qq_51409098/article/details/126068253
https://sentinelguard.io/zh-cn/docs/introduction.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1012258.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

灰度变换原理//test later

灰度变换原理 图像灰度变换变换原理&#xff1a;通过变换函数T将原图像像素灰度值r映射为灰度值s&#xff1a; 2、灰度反转 2.1原理 灰度反转&#xff1a;将图像亮暗对调&#xff0c;可以增强图像中暗色区域细节 &#xfffd;&#xfffd;(&#xfffd;)&#xfffd;−1−…

无版权素材集合

一、无版权视频素材 1.pixabay 网址: https://pixabay.com/zh/videos/ 特点:没错&#xff0c;还是这个网站&#xff0c;除了图片&#xff0c;还有大量免费正版高清无水印视频素材&#xff0c;无需注册即可直接下载&#xff0c;支文搜索。你可以在任何地方使用 pixabay 的免费…

深度干货:制造进销存国内现状如何?2023年五大制造进销存最新盘点!

制造进销存是什么&#xff1f;制造进销存的发展如何&#xff1f;制造进销存的优势在哪里&#xff1f;制造进销存都能为企业提供什么&#xff1f;本文将带大家深入浅出的聊聊制造进销存&#xff0c;全面剖析制造进销存的前世今生&#xff0c;并且为大家提供2023年十大制造进销存…

WebGL 视图矩阵、模型视图矩阵

目录 立方体由三角形构成 视点和视线 视点、观察目标点和上方向 视点&#xff1a; 观察目标点&#xff1a; 上方向&#xff1a; 在WebGL中&#xff0c;观察者的默认状态应该是这样的&#xff1a; 视图矩阵程序&#xff08;LookAtTriangles.js&#xff09; 实际上&…

红巨星粒子插件 Red Giant Trapcode Suite for mac 2024

Red Giant Trapcode Suite是一款用于在After Effects中模拟和建模3D粒子和效果的软件&#xff0c;由Red Giant Software公司开发。 该软件包包含11种不同的工具&#xff0c;可以帮助用户模拟火、水、烟、雪等粒子效果&#xff0c;以及创建有机视觉效果和3D元素。它还支持在AE与…

机器学习(15)---代价函数、损失函数和目标函数详解

文章目录 一、各自定义二、各自详解三、代价函数和损失函数区别四、例题理解 一、各自定义 1. 代价函数&#xff1a;代价函数&#xff08;Cost Function&#xff09;是定义在整个训练集上的&#xff0c;是所有样本误差的平均&#xff0c;也就是损失函数的平均。它用于衡量模型在…

langchain主要模块(五):Agent以及Wandb

langchain2之Agent以及Wandb langchain1.概念2.主要模块模型输入/输出 (Model I/O)数据连接 (Data connection)链式组装 (Chains)代理 (Agents)内存 (Memory)回调 (Callbacks) 3.AgentAction Agent&#xff1a;Plan-and-Execute-Agent&#xff1a;搜索工具 4.wandb1.注册2.安装…

第七版教材下的PMP考试有多难?

难度没有上升多少的&#xff0c;毕竟新考纲已经考过几轮考试了&#xff0c;如果报了培训班&#xff0c;那是没多大难度&#xff0c;如果自学&#xff0c;也只是难在理解第七版教材&#xff0c;会比第六版难以理解很多&#xff0c;而且第六版的知识也仍然有用&#xff0c;只是相…

Python基础学习笔记1(AI Studio)

地址&#xff1a;飞桨AI Studio星河社区-人工智能学习与实训社区 课程地址&#xff1a;飞桨AI Studio星河社区-人工智能学习与实训社区 课程地址&#xff1a;飞桨AI Studio星河社区-人工智能学习与实训社区 课程地址&#xff1a;飞桨AI Studio星河社区-人工智能学习与实训…

FE_Vue学习笔记 - 数据代理

Vue中的数据代理是一种机制&#xff0c;通过它&#xff0c;Vue实例&#xff08;vm&#xff09;可以代理其数据对象&#xff08;data&#xff09;中的属性操作。这种代理的原理主要是通过Object.defineProperty()方法&#xff0c;将data对象的每个属性都添加到vm对象上&#xff…

2023年8月京东洗衣机行业品牌销售排行榜(京东数据挖掘)

鲸参谋监测的京东平台8月份洗衣机市场销售数据已出炉&#xff01; 根据鲸参谋平台的数据显示&#xff0c;8月份&#xff0c;京东平台上洗衣机的销量共计117万&#xff0c;环比增长约5%&#xff0c;同比下降约8%&#xff1b;销售额为18亿&#xff0c;环比下降约2%&#xff0c;同…

使用SimpleDateFormat类的示例文档

以下是Java中使用SimpleDateFormat类的示例文档&#xff1a; 示例 import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date;public class Main {public static void main(String[] args) {String dateStr…

遥感数据与作物模型同化应用:PROSAIL模型、DSSAT模型、参数敏感性分析、数据同化算法、模型耦合、精度验证等主要环节

查看原文>>>遥感数据与作物模型同化实践技术应用 基于过程的作物生长模拟模型DSSAT是现代农业系统研究的有力工具&#xff0c;可以定量描述作物生长发育和产量形成过程及其与气候因子、土壤环境、品种类型和技术措施之间的关系&#xff0c;为不同条件下作物生长发育及…

【C++】哈希表的实现

哈希是什么理解哈希哈希所用的容器计算key值方法哈希的插入和查找解决哈希冲突闭散列也叫开放寻址法开散列 哈希闭散列实现闭散列结构闭散列结构插入闭散列查找闭散列删除 哈希开散列实现&#xff08;链表式&#xff09;开散列结构开散列结构插入开散列结构查找开散列结构删除 …

事件循环,还在微任务宏任务?过时了,快看看新版浏览器事件循环event loop(message loop)

浏览器的进程模型 进程&#xff1a;程序运⾏需要有它⾃⼰专属的内存空间&#xff0c;可以把这块内存空间简单的理解为进程。每个应⽤⾄少有⼀个进程&#xff0c;进程之间相互独⽴&#xff0c;即使要通信&#xff0c;也需要双⽅同意。 线程&#xff1a;有了进程&#xff0c;就…

【机器学习习题】估计一个模型在未见过的数据上的性能

您提到的不等式是统计学中的泛化误差界&#xff08;generalization error bound&#xff09;&#xff0c;它用于估计一个模型在未见过的数据上的性能。这个不等式是由Hoeffding不等式和Union Bound组合而成的。在这个不等式中&#xff0c;我们有以下符号&#xff1a; - P[|E_i…

Linux安装JDK1.8并配置环境变量

Linux安装JDK并配置环境变量Linux安装JDK并配置环境变量Linux安装JDK并配置环境变量 一、查询已有JAVA环境版本信息 java -version 二、下载Oracle JDK安装包 https://www.oracle.com/java/technologies/downloads/archive/ 三、安装 配置JDK 以下方式适用于安装各版本JDK&…

第一届电子纸产业创新应用论坛

自从2004年索尼推出全球首款电子纸的应用产品——电纸书阅读器以来&#xff0c;20年间&#xff0c;在各个领域&#xff0c;涌现出众多优秀的电子纸的创新应用&#xff0c;如电子价签、手写本、手机、笔记本、显示器、电子公交站牌等&#xff0c;形成电子纸产业持续蓬勃发展的强…

Java“牵手”义乌购商品详情数据,义乌购商品详情接口,义乌购API接口申请指南

义乌购隶属浙江义乌购电子商务有限公司旗下网站。该平台定位为依托实体市场&#xff0c;服务实体市场&#xff0c;以诚信为根本&#xff0c;将7万网上商铺与实体商铺一一对应绑定&#xff0c;为采购商和经营户提供可控、可信、可溯源的交易保障。 义乌购平台现有商铺商品、市场…

Jmeter系列-控制器Controllers的介绍(8)

Controllers 简介 JMeter是一款功能强大的性能测试工具&#xff0c;而控制器是JMeter中非常重要的一个组件。控制器用于控制测试计划的执行流程&#xff0c;可以根据需求来控制线程的启动、停止、循环等操作。 Jmeter有两种类型的控制器&#xff1a;Samplers&#xff08;取样…