【微服务】Sentinel(流量控制)

文章目录

    • 1.基本介绍
        • 1.Sentinel是什么
        • 2.Sentinel主要特性
        • 3.Sentinel核心功能
          • 1.流量控制
          • 2.熔断降级
          • 3.消息削峰填谷
        • 4.Sentinel两个组成部分
    • 2.Sentinel控制台显示
        • 1.需求分析
        • 2.下载
        • 3.运行
          • 1.进入cmd
          • 2.输入java -jar sentinel-dashboard-1.8.0.jar
          • 3.查看默认端口8080
        • 4.访问
          • 1.账号和密码都是sentinel
          • 2.登录成功
          • 3.退出就在cmd输入ctrl + c
        • 5.切换端口
          • 1.在启动时携带端口参数 --server.port=8081(端口最大65535)
          • 2.演示
          • 3.netstat -anb | more 查看端口监听情况(空格显示更多)
    • 3.Sentinel监听指定微服务
        • 1.示意图(在10004模块配置)
        • 2.pom.xml引入Sentinel
        • 3.application.yml 配置sentinel与服务端通信
        • 4.测试
          • 1.启动Nacos(启不启动都可以)和Sentinel
          • 2.启动10004微服务
          • 3.nacos查看注册情况
          • 4.浏览器输入 http://localhost:10004/member/get/1
          • 5.http://localhost:8080 查看Sentinel实时监控
        • 5.QPS和Sentinel懒加载
    • 4.Sentinel 流量控制介绍 + QPS实例
        • 1.配置界面
        • 2.基本介绍
        • 3.流量控制实例-QPS
          • 1.需求分析
          • 2.找到/member/get/1的流量控制界面
          • 3.选择QPS,单机阈值设置成1
          • 4.可以查看流控规则
          • 5.点击编辑即可修改
        • 4.测试
          • 1.步骤
          • 2.浏览器快速访问http://localhost:10004/member/get/1,可以看到被限流了
        • 5.流控规则实时生效原因
        • 6.携带参数方式进行限流
          • 1.方式一:修改/member/get/{id} 为/member/get,使用请求参数的形式获取值,限流规则修改为/member/get
            • 1.代码:
            • 2.修改限流规则
            • 3.测试,使用id=2也会被限流
          • 2.方式二:使用URL资源清洗
            • 1.基本介绍
            • 2.com/sun/springcloud/controller/CustomerUrlCleaner.java 将URL进行资源清洗
            • 3.修改限流规则
            • 4.访问测试,成功限流
        • 7.注意事项:Sentinel的流控规则默认没有持久化,只要重启调用API所在模块就没了!
    • 5.Sentinel 流量控制—线程数
        • 1.需求分析
        • 2.修改流控规则
        • 3.浏览器输入http://localhost:10004/member/get/1 并快速刷新
        • 4.为了看到效果,让线程休眠一秒
        • 5.重启10004模块(需要重新配置限流规则),快速发送请求
    • 6.Sentinel 流量控制—关联
        • 1.需求分析
        • 2.com/sun/springcloud/controller/MemberController.java 添加两个接口为t1和t2
        • 3.配置t1的限流规则为关联t2
        • 4.postman模拟高并发测试
          • 1.测试请求t2
          • 2.点击save
          • 3.New Collection
          • 4.命名后创建
          • 5.点击集合右边三个点,然后Run collection
          • 6.选择迭代次数和间隔毫秒数,然后Run test
          • 7.浏览器输入 http://localhost:10004/t1 ,发现被限流
    • 7.Sentinel 流量控制—Warm up
        • 1.基本介绍
        • 2.需求分析
        • 3.具体配置
          • 1.启动Sentinel
          • 2.启动Nacos
          • 3.启动10004微服务,成功注册
          • 4.浏览器先输入 http://localhost:10004/t2 然后查看Sentinel控制台
          • 5.修改流控规则
          • 6.测试
            • 前三秒的QPS为9 / 3 = 3,三秒后的QPS为9
    • 8.Sentinel 流量控制—排队等待
        • 1.基本介绍
        • 2.需求分析
        • 3.具体配置

1.基本介绍

1.Sentinel是什么

image-20240328135400717

2.Sentinel主要特性

image-20240328135431135

3.Sentinel核心功能
1.流量控制

image-20240328140337069

2.熔断降级

image-20240328140327771

3.消息削峰填谷

image-20240328140608196

4.Sentinel两个组成部分

image-20240328140919795

2.Sentinel控制台显示

1.需求分析

image-20240328141057615

2.下载

image-20240328141315133

3.运行
1.进入cmd
2.输入java -jar sentinel-dashboard-1.8.0.jar

image-20240328141455114

3.查看默认端口8080

image-20240328141711211

4.访问
1.账号和密码都是sentinel

image-20240328142944438

2.登录成功

image-20240328143006157

3.退出就在cmd输入ctrl + c
5.切换端口
1.在启动时携带端口参数 --server.port=8081(端口最大65535)
2.演示

image-20240328143355396

3.netstat -anb | more 查看端口监听情况(空格显示更多)

image-20240328143622859

3.Sentinel监听指定微服务

1.示意图(在10004模块配置)

image-20240328144025848

2.pom.xml引入Sentinel
        <!-- 引入sentinel --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency>
3.application.yml 配置sentinel与服务端通信
  • 注意这里与sentinel相关的就只有配置sentinel的部分
  • 这里开启的port是在本机上进行监听,作为客户端与sentinel的服务端进行通信,并且如果8719端口被占用,则会自动将端口号加一直到找到可用的端口
server:port: 10004 # 配置服务端口
spring:application:name: member-service-nacos-provider # 配置服务的名称,名字任意这里与项目
# 配置naocscloud:nacos:discovery:server-addr: localhost:8848 # 配置nacos的地址
# 配置sentinelsentinel:transport:dashboard: localhost:8080 # 配置sentinel的地址port: 8719 # 配置sentinel的端口,当端口冲突时,会自动+1,直到找到可用端口
# 暴露所有的监控点
management:endpoints:web:exposure:include: "*"
mybatis:mapper-locations: classpath:mapper/*.xml # 扫描所有Mapper.xmltype-aliases-package: com.sun.springcloud.entity # 扫描所有实体类,可以直接使用类名来标识
4.测试
1.启动Nacos(启不启动都可以)和Sentinel

image-20240328150303841

image-20240328150242246

2.启动10004微服务

image-20240328150723267

3.nacos查看注册情况

image-20240328150709408

4.浏览器输入 http://localhost:10004/member/get/1

image-20240328151644325

5.http://localhost:8080 查看Sentinel实时监控
  • 注意,这个实时监控只要一段时间不访问,数据就会暂时消失

image-20240328151743346

image-20240328151947861

5.QPS和Sentinel懒加载

image-20240328152108659

4.Sentinel 流量控制介绍 + QPS实例

1.配置界面

image-20240328153608128

2.基本介绍

image-20240328153717724

image-20240328153729769

3.流量控制实例-QPS
1.需求分析

image-20240328154013931

2.找到/member/get/1的流量控制界面

image-20240328154345217

image-20240328154352163

3.选择QPS,单机阈值设置成1

image-20240328154700505

4.可以查看流控规则

image-20240328154814469

5.点击编辑即可修改

image-20240328154834645

4.测试
1.步骤

image-20240328154941559

2.浏览器快速访问http://localhost:10004/member/get/1,可以看到被限流了

image-20240328155038410

5.流控规则实时生效原因

image-20240328155703454

6.携带参数方式进行限流
1.方式一:修改/member/get/{id} 为/member/get,使用请求参数的形式获取值,限流规则修改为/member/get
1.代码:
    /*** 根据id来获取某个会员的信息** @param id 使用请求参数的形式传入参数* @return 返回json格式的数据*/@GetMapping("/member/get") // 这里修改成请求参数的形式public Result getMemberById(@RequestParam("id") Long id) {Member member = memberService.queryMemberById(id);if (member != null) {return Result.success("查询成功!member-service-nacos-provider-10004", member);} else {return Result.error("402", "ID= " + id + "不存在");}}
2.修改限流规则

image-20240328160828746

3.测试,使用id=2也会被限流

image-20240328160903751

2.方式二:使用URL资源清洗
1.基本介绍

image-20240328161030902

2.com/sun/springcloud/controller/CustomerUrlCleaner.java 将URL进行资源清洗

image-20240328163140279

  • 注意:这里的资源清洗只是表示返回给Sentinel的URL改变了
package com.sun.springcloud.controller;import com.alibaba.csp.sentinel.adapter.servlet.callback.UrlCleaner;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Component;/*** Description: URL资源清洗** @Author sun* @Create 2024/3/28 16:17* @Version 1.0*/
@Component // 注入到spring容器中
public class CustomerUrlCleaner implements UrlCleaner {@Overridepublic String clean(String originUrl) {// 判断是否为空if (StringUtils.isBlank(originUrl)) {return originUrl;}// 如果是/member/get开头的url,就将其清洗为/member/get/*if (originUrl.startsWith("/member/get")) {return "/member/get/*";}return originUrl;}
}
3.修改限流规则

image-20240328163403118

4.访问测试,成功限流

image-20240328163306195

7.注意事项:Sentinel的流控规则默认没有持久化,只要重启调用API所在模块就没了!

5.Sentinel 流量控制—线程数

1.需求分析
  • 一次请求就是一个线程

image-20240328164416517

2.修改流控规则

image-20240328164945544

3.浏览器输入http://localhost:10004/member/get/1 并快速刷新
  • 这里并没有被限流,原因是,第一次请求开启了一个工作线程,在第二次请求到达之前,上一个工作线程已经关闭

image-20240328165340507

4.为了看到效果,让线程休眠一秒

image-20240328170155053

5.重启10004模块(需要重新配置限流规则),快速发送请求
  • 成功限流

image-20240328170258292

6.Sentinel 流量控制—关联

1.需求分析
  • 简单来说就是t1关联t2,当t2的QPS超过1,则t1被限流

image-20240328171438642

2.com/sun/springcloud/controller/MemberController.java 添加两个接口为t1和t2
    // 编写两个测试的接口,路由分别为t1和t2@GetMapping("/t1")public String t1() {return "t1";}@GetMapping("/t2")public String t2() {return "t2";}
3.配置t1的限流规则为关联t2

image-20240328172336128

4.postman模拟高并发测试
1.测试请求t2

image-20240328172844044

2.点击save

image-20240328173047249

3.New Collection

image-20240328173058885

4.命名后创建

image-20240328173129677

5.点击集合右边三个点,然后Run collection

image-20240328173221786

6.选择迭代次数和间隔毫秒数,然后Run test

image-20240328173326517

7.浏览器输入 http://localhost:10004/t1 ,发现被限流

image-20240328173520355

7.Sentinel 流量控制—Warm up

1.基本介绍

image-20240329093452389

2.需求分析
  • 简单来说假如最终要到达的QPS为90,设置的预热时间为3s,则在3s内,QPS只能为90/3=30,而在3s后QPS逐渐增加,直到为90

image-20240329093950996

3.具体配置
1.启动Sentinel

image-20240329094753020

2.启动Nacos

image-20240329095314944

3.启动10004微服务,成功注册

image-20240329095443614

4.浏览器先输入 http://localhost:10004/t2 然后查看Sentinel控制台

image-20240329100210480

5.修改流控规则

image-20240329100304866

6.测试
前三秒的QPS为9 / 3 = 3,三秒后的QPS为9

image-20240329100516116

8.Sentinel 流量控制—排队等待

1.基本介绍

排队等待策略只有在超过了QPS的情况下才会生效,也就是假如设置的QPS为1,就表示1s只能处理一个请求,一旦1s内有两个请求,那么第二个请求就会进行排队等待,当第一个请求完成之后才会处理第二个请求。

关于设置的超时时间,表示等待的时间一旦超过了这个时间就会被限流

需要注意的是,如果想要启动排队等待的流控策略,则阈值类型就必须要是QPS

2.需求分析

image-20240329101608392

3.具体配置
  • 这样配置就表示1s内只能有一个请求,如果有第二个就会进行排队等待,直到第一个请求处理完,一旦等待时间超过1s就会被限流

image-20240329103247859

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

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

相关文章

【八股】泛型

泛型存在的意义&#xff1f; 为了使相同的代码适用于多种数据类型&#xff0c;也就是代码复用。 参数类型上下限限制 <?> 无限制 <? extends E> 声明了类型的上界&#xff0c;表示参数类型可以是他或他的子类。 <? super E> 声明了类型的下界&#xf…

C++多线程:创建多个线程与数据共享安全问题(四)

1、创建多个线程 多线程的调度由操作系统负责&#xff0c;线程执行的先后没有严格的顺序完全看操作系统和CPU的心情。 #include <iostream> #include <vector> #include <thread>void thread_print(int num) {std::cout << "线程编号 " &…

视频无水印爬虫采集工具|抖音视频批量下载软件|可导出视频分享链接

全新视频无水印爬虫采集工具&#xff0c;助力您快速获取所需视频&#xff01; 视频无水印爬虫采集工具&#xff0c;为用户提供了强大的视频采集和下载功能。它可以批量提取关键词相关的视频&#xff0c;同时支持单独视频的提取和下载&#xff0c;操作简便&#xff0c;使用方便。…

数字兆欧表操作规程你知道多少?南电电力来告诉你!

一、数字兆欧表操作规程   数字兆欧表是一种现代化电子仪表&#xff0c;用于测量电气设备的绝缘电阻。其操作规程的目的是确保测量结果的准确性&#xff0c;并保证操作人员的安全。以下是主要的操作规程&#xff1a;   1.安全操作&#xff0c;断电与放电&#xff1a;在测量…

【MySQL探索之旅】MySQL数据表的增删查改——约束

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更…

ctf-36C3解析

一、环境 unbentu 这道题给了docker环境&#xff0c;gethub上面自己找 一个好用的linux全局切换梯子proxychains 二、开始解析 2.1初始 2.2编译 docker build . 2.3代理设置完毕 我试了一下代理还是不行&#xff0c;我们换源尝试一下 RUN sed -i s/deb.debian.org/mirro…

Go打造REST Server【二】:用路由的三方库来实现

前言 在之前的文章中&#xff0c;我们用Go的标准库来实现了服务器&#xff0c;JSON渲染重构为辅助函数&#xff0c;使特定的路由处理程序相当简洁。 我们剩下的问题是路径路由逻辑&#xff0c;这是所有编写无依赖HTTP服务器的人都会遇到的问题&#xff0c;除非服务器只处理一到…

Redis桌面客户端

3.4.Redis桌面客户端 安装完成Redis&#xff0c;我们就可以操作Redis&#xff0c;实现数据的CRUD了。这需要用到Redis客户端&#xff0c;包括&#xff1a; 命令行客户端图形化桌面客户端编程客户端 3.4.1.Redis命令行客户端 Redis安装完成后就自带了命令行客户端&#xff1…

面向对象特征一:封装性

9.1 为什么需要封装&#xff1f; 我要用洗衣机&#xff0c;只需要按一下开关和洗涤模式就可以了。有必要了解洗衣机内部的结构吗&#xff1f;有必要 碰电动机吗&#xff1f; 我要开车&#xff0c;我不需要懂离合、油门、制动等原理和维修也可以驾驶。 客观世界里每一个事物…

乐维更改IP地址

1.1 系统IP调整 vim /etc/sysconfig/network-scripts/ifcfg-ens1921.2 Web相关服务IP变更 1.2.1 编辑/itops/nginx/html/lwjkapp/.env文件,更改ZABBIXSERVER、ZABBIXRPCURL、DB_HOST中的IP 1.2.2 进入/itops/nginx/html/lwjk_app/目录下,执行php bin/manager process-conso…

(免费分享)基于微信小程序电影院购票系统带论文

基于小程序的电影院购票管理系统【含报告】&#xff1a;前端 vue、elementui、小程序&#xff0c;后端 maven、springboot、springmvc、spring、mybatis&#xff0c;角色分为管理员、用户&#xff1b;集成小程序浏览电影&#xff0c;购票等功能于一体的系统。 目录 摘要 I Ab…

关于Devc++调试的问题以及解决STL变量无法查看

目前Devc的调试主要有以下几点&#xff1a; 1.调试不能直接查看stl变量&#xff0c;会卡死不动 2.目前单步进入只能用鼠标键按 3.若想按下一步进入函数体内&#xff0c;要在函数体内打上断点才行 4.调试到return 0 ;上一句就停了&#xff0c;不会结束程序 5.目前F2跳至断点…

elasticsearch 8.12+kibana 8.12

准备工作&#xff1a;1.下载相关的安装包放到/usr/local/ES下面 elasticsearch下载地址:Download Elasticsearch | Elastic elasticsearch-head-master下载地址:https://github.com/mobz/elasticsearch-head/archive/master.zip node下载地址:Index of /dist/ kibana地址:Downl…

nacos的各种类型的配置文件 yml 、json、 Properties、 text 等文件类型 发生变化怎么热更新,实现实时监听nacos配置文件变化

本文用的是 Nacos作为配置中心注册监听器方法 实现热更新 nacos 配置文件 从而不用重启项目 依赖、工具类 这边就不写了 因为项目用的是 Json 类型的配置文件 所以下文 主要是对json文件进行实现 别的文件大同小异 先说扯淡的东西 在nacos 的配置文件中 dataId 这两种声明 是…

华为流量整形配置

组网需求 如图1所示&#xff0c;企业网内部LAN侧的语音、视频和数据业务通过Switch连接到RouterA的Eth2/0/0上&#xff0c;并通过RouterA的GE3/0/0连接到WAN侧网络。 不同业务的报文在LAN侧使用802.1p优先级进行标识&#xff0c;在RouterA上根据报文的802.1p优先级入队列&…

c++初阶篇----string的底层模拟

string类的模拟 目录 string类的模拟功能介绍各功能的实现类的构造函数&#xff0c;拷贝构造函数&#xff0c;析构函数迭代器的实现string的内部容量访问成员函数string的修改成员函数string类的相关联函数string类的输入输出友元 汇总string功能的实现汇总测试代码 功能介绍 …

Containerd 介绍、安装和使用

Containerd介绍、安装和使用 文章目录 Containerd介绍、安装和使用1.containerd是什么&#xff1f;2.Containerd安装2.1 主机初始化2.1.1 设置ip地址2.1.2 配置镜像源2.1.3 关闭防火墙2.1.4 禁用SELinux2.1.5 禁用swap2.1.6 设置时区 2.2 安装 containerd2.2.1 内核参数调整2.2…

【八大排序】一篇文章搞定所有排序

文章目录 1.排序的概念2.常见排序算法的实现2.1 插入排序2.1.1直接插入排序2.1.2希尔排序 2.2选择排序2.2.1直接选择排序:2.2.2堆排序 2.3交换排序2.3.1冒泡排序2.3.2快速排序Hoare法前后指针法挖坑法非递归版本 2.4归并排序递归版本非递归版本 2.5计数排序3.排序的比较 1.排序…

2024年EDM邮件营销群发平台怎么选?

在2024年选择适合的EDM&#xff08;电子邮件直接营销&#xff09;邮件营销群发平台时&#xff0c;需要考虑以下几个关键要素来评估云衔科技以及其他供应商的产品或服务是否符合您的需求&#xff1a; 一、功能完备性&#xff1a; 1、智能自动化&#xff1a;确保云衔科技提供的…

用DataGrip连接hive时报错:User: root is not allowed to impersonate plck5,解决方法

你可以尝试关闭主机校验 修改hive安装目录下conf/hive-site.xml,将hive.server2.enable.doAs设置成false <property><name>hive.server2.enable.doAs</name><value>false</value><description>Setting this property to true will have H…