【微服务笔记22】微服务组件之Sentinel控制台的使用(Sentinel Dashboard)

这篇文章,主要介绍微服务组件之Sentinel控制台的使用(Sentinel Dashboard)。

目录

一、Sentinel控制台

1.1、下载Dashboard控制台

1.2、搭建测试工程

(1)引入依赖

(2)添加配置信息

(3)运行测试

1.3、实时监控

1.4、簇点监控

1.5、流控规则

(1)QPS流控规则

(2)并发线程数

(3)直连流控模式

(4)关联流控模式

(5)链路流控模式

(6)快速失败(流控效果)

(7)Warm Up(流控效果)

(8)排队等待(流控效果)

1.6、熔断降级规则

(1)慢调用比例

(2)异常比例

(3)异常数

1.7、热点规则

1.8、统一异常处理(BlockException)


一、Sentinel控制台

1.1、下载Dashboard控制台

Sentinel提供了一个Dashboard控制台,通过控制台也可以实现服务熔断、服务降级、流量控制等规则的配置,并且这种可视化界面的配置方式更加的友好,不需要编写任何Java代码,可能这也是Sentinel的强大之处吧。

首先需要去下载Sentinel Dashboard对应的应用程序Jar包【Sentinel控制台下载】,下载完成之后,直接打开CMD窗口,执行【javar -jar】启动应用即可。

启动成功之后,打开浏览器访问【http://localhost:8080/】地址,第一次访问需要先登录,登录的用户名和密码都是【sentinel】。

登录成功之后,就可以进入到控制台首页面。

注意:第一次访问Sentinel控制台的时候,由于还没有访问过任何的微服务应用,所以这个时候就没有相关的微服务监控信息。

1.2、搭建测试工程

这里为了演示Sentinel控制台的使用,需要搭建一个测试工程,测试工程中,需要指定连接的Sentinel控制台的服务地址,这样dashboard控制台中才能监听到微服务的信息。

(1)引入依赖

<!-- 引入 web 依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 引入 sentinel 依赖 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

(2)添加配置信息

在application.yml配置文件中,添加sentinel的配置信息。

server:
  port: 8899
spring:
  application:
    name: alibaba-sentinel-demo
  # 配置 sentinel 控制台
  cloud:
    sentinel:
      transport:
        dashboard: 127.0.0.1:8080 # 指定 sentinel 控制台服务 的地址

(3)运行测试

启动工程,然后随便访问一个接口,刷新dashboard控制台,此时就可以看见对应的微服务监控列表了。

到此,Sentinel控制台环境就搭建好了。

1.3、实时监控

实时监控:可以看到微服务中接口的调用情况。

1.4、簇点监控

簇点监控:展示当前微服务中,所有可用的资源,可以对这些资源进行熔断、降级、流控的相关配置,默认是将controller控制层中的接口作为资源显示出来。

1.5、流控规则

流控规则:对相关的资源设置流量控制规则,一般在高并发流量的场景里面,为了降低系统宕机情况,就会限制访问流量来提高系统的稳定性。哪些场景中,需要使用流量控制呢???

  • 秒杀、下单、订单回流、消息型场景、API网关限流等情况。

(1)QPS流控规则

  • QPS流控规则:限制每秒钟访问的请求数量。

访问demo01接口,当1秒钟超过2个请求时候,超过的请求将返回错误信息。

当然,也可以自己在代码中通过【@SentinelResource】注解,指定流控、降级之后的回调方法。

(2)并发线程数

  • 并发线程数规则:当请求达到设置的最大线程数时候,在这些线程处理响应结束之前,如果此时还有线程到达,那么这个线程就会被流控。

打开两个浏览器,同时访问【demo03】接口(注意:这个接口中写了暂停3秒的逻辑),此时第二个访问的会出现流控。

(3)直连流控模式

直流流控模式:直接对添加流控的资源进行流量限制,默认就是采用这种限流模式。

(4)关联流控模式

关联流控模式:两个资源之间存在关联关系,假设A资源和B资源存在关联关系,对A资源进行流控规则,关联了B资源,那么此时如果A资源满足流控规则后,就会限流B资源,这就是关联流控模式。

  • 这里模拟一下【关联流控模式】,首先由两个资源:【demo04】和【demo05】,给【demo04】添加流控规则,并且关联【demo05】资源。
  • 使用jemeter访问【demo05】资源,访问的过程中,浏览器单独访问【demo04】资源,此时【demo04】资源会发生流控。

打开jemeter,模拟大量请求访问【demo05】接口,之后浏览器访问【demo04】接口,此时可以发现【demo04】发生了流控。

注意:关联流控模式下,只有关联资源才会触发目标资源的流控规则。

(5)链路流控模式

链路流控模式:根据接口的调用链路来实现流量控制,假设:A资源被B、C两个资源调用,也就是存在两个链路:B-->A、C-->A;那么就可以采用链路流控模式,对【B-->A】调用链路进行流控限制。

  • 这里采用【demo06】、【demo07】、【demo】三个资源,其中【demo06】和【demo07】都会调用【demo】资源。
  • 在sentinel控制台中,给【demo】资源添加流控规则,入口资源设置成【demo06】。
  • 这个时候,就会对【demo06】进行限流控制。

打开浏览器,多次刷新页面访问【demo06】接口,此时会触发流控规则,而多次访问【demo07】接口不会触发流控规则。

注意:sentinel默认是不会维护调用链路的,需要我们自己在【application.yml】配置文件中配置。

spring:
  # 配置 sentinel 控制台
  cloud:
    sentinel:
      # 让 sentinel 维护调用链路树
      web-context-unify: false

(6)快速失败(流控效果)

快速失败:当发生流控的时候,直接快速返回失败信息。

(7)Warm Up(流控效果)

Warm Up是【预热流控】的一种机制,所谓的预热流控,是指:当大量请求到达时候,假设一开始只处理3个请求,其他请求全部失败,之后逐渐增加处理更多的请求,例如:3个、6个、10个依次递增。sentinel默认的冷加载因子是3,它会根据【threshold / 3】开始,经过预热之后,逐渐达到阈值threshold。

使用jemeter访问【demo02】接口,查看监控图如下所示。

预热流控一般适用于积分流量场景下,什么是积分流量呢???积分流量是指:在某一段时间内可能出现大量的请求,但是过了那段时间,请求有变得平稳了,这种场景下就适用于预热流控。

(8)排队等待(流控效果)

排队等待:请求在达到设定的阈值时候,多余的请求会在指定的时间里面排队等待被处理,如果在指定时间里面,还没有被执行,那就直接失败。

使用jemeter每隔5秒钟发起10个请求访问【demo02】接口,运行结束之后,查看监控界面。

从上图中就可以看出,使用【排队等待】方式就已经能够很好的解决多余请求的处理问题,而不会出现快速失败的情况。为了验证排队等待的效果,你可以设置一个快速失败的方式,再次测试接口,查看监控界面。

从上图可以看到,快速失败方式下,会出现5个接口调用成功,5个接口调用失败,并且会有一个5秒钟的时间间隔(自己设置的时间间隔),排队等待就是利用这个时间间隔,处理处于等待中的请求,从而实现流控。

1.6、熔断降级规则

熔断降级规则有三种,分别是:慢调用比例、异常比例、异常数。当触发熔断之后,不会去调用微服务接口,是否直接返回快速失败。

(1)慢调用比例

慢调用比例:请求的响应时长超过给定的RT,并且满足【最小请求数】中满调用的占比达到阈值,则触发熔断规则。

打开jemeter,访问【demo03】接口,此时会出发熔断规则。

(2)异常比例

异常比例:在指定的请求数量里面,出现异常的请求达到指定比例,则触发熔断规则。

接口【exception】模拟抛出异常即可,然后使用jemeter调用测试。

(3)异常数

异常数:在最小请求数里面,出现异常的次数满足阈值,则发生熔断。

1.7、热点规则

热点规则:是针对接口请求中的热点参数进行流量控制,什么是热点参数呢???比如:一个查询接口中,根据商品名称查询,有:【手机】、【电脑】,假设用户大部分都查询【手机】,所以【手机】就相当于是一个热点参数,那就可以对针对这个查询参数的接口,进行流量控制。注意:热点参数规则,必须是使用【@SentinelResource】注解定义的资源

  • 编写测试方法。
@SentinelResource(value = "/api/sentinel/dashboard/parameter", blockHandler = "blockMethod")
@GetMapping("/parameter")
public String parameter(@RequestParam("id") String id, @RequestParam("name") String name) {
    System.out.println("parameter接口调用成功.id=" + id + ", name=" + name);
    return "parameter接口调用成功.id=" + id + ", name=" + name;
}

public String blockMethod(String id, String name, BlockException e) {
    return "【" + name + "】触发热点参数流控规则";
}
  • 配置热点参数规则。

  • 浏览器访问【localhost:8899/api/sentinel/dashboard/parameter?id=1&name=手机】,多次刷新,此时就会触发热点参数流控规则。

以上就是热点参数规则的配置。

1.8、统一异常处理(BlockException)

自定义BlockException异常处理,可以针对不同的异常情况,响应不同的结果,当然你也可以不使用统一的异常处理,那就是需要在每一个方法中使用【@SentinelResource】注解定义异常处理方法。

package com.gitcode.demo.exception;

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.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.nio.charset.StandardCharsets;

/**
 * @version 1.0.0
 * @Date: 2023/4/25 20:32
 * @Copyright (C) ZhuYouBin
 * @Description: 统一异常处理【BlockException】
 */
@Component
public class CustomBlockExceptionHandler implements BlockExceptionHandler {

    @Override
    public void handle(HttpServletRequest request, HttpServletResponse response, BlockException e) throws Exception {
        // TODO 在这里就可以自定义返回响应数据
        String msg = "";
        if (e instanceof FlowException) {
            msg = "流控异常";
        } else if (e instanceof DegradeException) {
            msg = "服务降级异常";
        } else if (e instanceof ParamFlowException) {
            msg = "热点参数流控异常";
        } else if (e instanceof SystemBlockException) {
            msg = "触发系统保护规则异常";
        } else if (e instanceof AuthorityException) {
            msg = "授权规则不通过异常";
        }
        // 响应结果
        response.setStatus(500);
        response.setCharacterEncoding(StandardCharsets.UTF_8.toString());
        response.setContentType(MediaType.APPLICATION_JSON_VALUE);
        // 返回JSON数据
        new ObjectMapper().writeValue(response.getWriter(), msg);
    }

}

到此,Sentinel控制台配置相关规则就介绍完啦。

综上,这篇文章结束了,主要介绍微服务组件之Sentinel控制台的使用(Sentinel Dashboard)。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

R语言的基本数学运算

目录 一、对象命名原则 二、基本数学运算 2.1 四则运算 2.2 余数和整除 2.3 次方或平方根 2.4 绝对值 2.5 exp()与对数 2.6 科学符号e 2.7 圆周率与三角函数 2.8 四舍五入函数 2.9 近似函数 2.10 阶乘 三、R语言控制运算的优先级 四、无限大 五、非数字&#xf…

3.7 Linux shell脚本编程(分支语句、循环语句)

目录 分支语句&#xff08;对标C语言中的if&#xff09; 多路分支语句&#xff08;对标C语言中的swich case&#xff09; 分支语句&#xff08;对标C语言中的if&#xff09; 语法结构: if 表达式 then 命令表 fi 如果表达式为真, 则执行命令表中的命令; 否则退出if语句,…

Linxu下性能指标采集工具之nmon工具的使用

前言 近期在测试JefLogTail&#xff0c;由于JefLogTail使用的是轮询的方式来监听文件夹&#xff0c;所以对cpu的消耗可能会高一些&#xff0c;所以在测试的时候着重关注CPU,Linux下查看CPU信息一般采用top命令来实时观察&#xff0c;但是这种对于只是通过观察数据的变化来评估…

Anaconda,CUDA注意事项

2. 呜呜呜&#xff01;&#xff01;&#xff01;用别人的环境&#xff0c;如果他是非GPU版本的TF&#xff0c;你把非GPU版本的TF卸载后安装GPU版本的TF他也装不上。。。会默认给你装非GPU版本的TF&#xff01;&#xff01;&#xff01;大坑比&#xff01;&#xff01;&#xf…

streamlit (python构建web可视化框架)笔记

文章目录 一、安装使用streamlit二、streamlit使用1.展示和数据样式2.dataframe()生成交互表和table()方法生成静态表3.绘制折线图4.绘制地图5.一些组件slider()滑动条 checkbox()确认框 selectbox()选择器6.侧边栏7.布局分列8.多页 三、Steamlit可视化简单应用--冒泡排序可视化…

科学防雷接地和雷电防护方案

说到防雷&#xff0c;可能不少人首先会想到避雷针&#xff0c;而“避雷针”这一概念&#xff0c;很容易让大家对防雷的概念造成误解。 误解1: 避雷针是用来“避雷”的。 其实&#xff0c;避雷针的学名叫“接闪器”&#xff0c;不是用来“避开雷击”的&#xff0c;而是用来“迎…

传统机器学习(七)支持向量机(2)sklearn中的svm

传统机器学习(七)支持向量机(2)sklearn中的svm 2 sklearn中的svm 2.1 LinearSVC及SVC参数详解 2.1.1 SVC参数 class sklearn.svm.SVC(*,C1.0, kernelrbf, degree3, gammascale, coef00.0, shrinkingTrue, probabilityFalse, tol0.001, cache_size200, class_weightNone, ve…

为什么企业要做大规模敏捷?

背景 软件工程里一个重要的指标就是“可用的软件”&#xff0c;敏捷宣言里也同样告诉我们“工作的软件高于详尽的文档”&#xff0c;那“可用的软件”、“工作的软件”意味着什么呢&#xff1f;在我的理解里&#xff0c;可以经历用户 “千锤百炼”的软件就是一个“可用的软件”…

这些vue基本语法,你掌握了吗

文章目录 一、 vue 项目重点概念介绍1. 单页面应用程序2. 单文件组件3.数据驱动视图 二、 vue 基本结构1、template2、script3、style 三、 vue 常用指令介绍1、内容渲染指令&#xff08;1&#xff09;插值表达式 {{xxx}} —常用方式&#xff08;2&#xff09;v-text&#xff0…

912. 排序数组

1.题目&#xff1a; 2.我的代码&#xff1a; C语言&#xff1a; /*** Note: The returned array must be malloced, assume caller calls free().*/ int* sortArray(int* nums, int numsSize, int* returnSize) {//希尔排序int gap numsSize;//多次预排while (gap > 1) {/…

Ansys Zemax | 如何模拟双折射偏振器件

这篇文章介绍了什么是双折射现象、如何在OpticStudio中模拟双折射 (birefringence)、如何模拟双晶体的双折射偏振器以及如何计算偏振器的消光比。&#xff08;联系我们获取文章附件&#xff09; 什么是双折射现象 一般的光学材料都是均匀的各向同性的&#xff0c;也就是说无论光…

STM32物联网实战开发(6)——PWM驱动LED灯

PWM驱动LED灯 之前是使用标准库函数配置引脚输出PWM控制呼吸灯&#xff0c;因为开发板上的蜂鸣器是有源的&#xff0c;所以这次还是用来确定LED灯&#xff0c;这次使用的是HAL库&#xff0c;用CubeMX软件初始化PWM功能 PWM输出原理 Period&#xff1a;周期&#xff0c;单位是秒…

语音处理加窗分帧

语音处理加窗分帧 一、分帧 语音数据和视频数据不同&#xff0c;本没有帧的概念&#xff0c;但是为了传输与存储&#xff0c;我们采集的音频数据都是一段一段 的。为了程序能够进行批量处理&#xff0c;会根据指定的长度(时间段或者采样数)进行分段&#xff0c;结构化为我们编程…

Javaweb | 转发、重定向

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; 转发 转发与页面跳转 转发 转发的作用在服务器端&#xff0c;将请求发送给服务器上的其他资源&#xff0c;以共同完成一次请求的处理 页面跳转 使用forward跳转时&am…

拍卖小程序开发:从需求分析到设计实现

在当今数字时代&#xff0c;拍卖小程序已经成为了一个重要的销售和交易工具。拍卖小程序的开发不仅能够提供高效的销售渠道&#xff0c;还能够为用户提供全新的购物体验。因此&#xff0c;开发一个拍卖小程序成为了许多商家的首要任务。 拍卖小程序的开发可以帮助商家拓展销售…

Linux下实现共享内存的两种机制(附源码)

START Hello 大家好。 今天来讲一下Linux进程通信中重要的通信方式&#xff1a;共享内存作为Linux软件开发攻城狮&#xff0c;进程间通信是必须熟练掌握的重要技能&#xff0c;而共享内存是在程序开发中常用的也是重要的一种进程间通信方式。 下面我们就来聊一聊Linux下进程间…

pytest自动化框架之allure测试报告的用例描述设置

allure测试报告的用例描述相关方法&#xff1b;如下图 allure标记用例级别severity 在做自动化测试的过程中&#xff0c;测试用例越来越多的时候&#xff0c;如果执行一轮测试发现了几个测试不通过&#xff0c;我们也希望能快速统计出缺陷的等级。 pytest结合allure框架可以对…

每日学术速递4.26

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.AutoNeRF: Training Implicit Scene Representations with Autonomous Agents 标题&#xff1a;AutoNeRF&#xff1a;使用自主代理训练隐式场景表示 作者&#xff1a;Pierre Marz…

SaaS云HIS系统源码功能介绍

SaaS云HIS首页功能&#xff1a;包括工作计划、预警、主功能菜单、医院机构公告。 一、工作计划 1.值班概况&#xff1a;值班日期、值班时间、值班科室&#xff08;内科、外科等&#xff09; 2.待处理患者&#xff1a;内科人数、外科人数等 病历统计&#xff1a;入院病历、出…

华为面试题:1+4=5,2+5=12,3+6=21,问8+11=?网友:幼儿园级别

面试&#xff0c;一直都是职场人士绕不过去的坎&#xff0c;对于有的人来说&#xff0c;或许更擅长日常的工作&#xff0c;在面试环节可谓是自己的薄弱环节&#xff0c;但对于有的人来说&#xff0c;相比于工作&#xff0c;更擅长应付面试&#xff01; 最近&#xff0c;有一位…