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

news2024/10/11 8:25:18

文章目录

    • 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 # 配置服务的名称,名字任意这里与项目
# 配置naocs
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # 配置nacos的地址
# 配置sentinel
    sentinel:
      transport:
        dashboard: localhost:8080 # 配置sentinel的地址
        port: 8719 # 配置sentinel的端口,当端口冲突时,会自动+1,直到找到可用端口
# 暴露所有的监控点
management:
  endpoints:
    web:
      exposure:
        include: "*"
mybatis:
  mapper-locations: classpath:mapper/*.xml # 扫描所有Mapper.xml
  type-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 {
    @Override
    public 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.coloradmin.cn/o/1554000.html

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

相关文章

考研数学|《660》完全不会做怎么办?【注意】

很多人有一个误区&#xff1a; 不仅仅是做660题的误区&#xff0c;很多人做其他的习题册都有这个误区&#xff0c;就是以为太依靠答案&#xff0c;如果一道题目做不出来&#xff0c;也不去思考&#xff0c;就直接去看答案怎么做&#xff0c;然后把答案看会了&#xff0c;就认为…

如何利用OpenCV4.9 更改图像的对比度和亮度

返回&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;使用 OpenCV 添加&#xff08;混合&#xff09;两个图像 下一篇:如何利用OpenCV4.9离散傅里叶变换 ​目标 在本教程中&#xff0c;您将学习如何&#xff1a; 访问像素值用零…

路由的完整使用

多页面和单页面 多页面是指超链接等跳转到另一个HTML文件,单页面是仍是这个文件只是路由改变了页面的一部分结构. 路由的基本使用 使用vue2,则配套的路由需要是第3版. 1)下载vue-router插件 2)引入导出函数 3)new 创建路由对象 4)当写到vue的router后只能写路由对象,因此只…

Git版本管理使用手册 - 8 - 合并分支、解决冲突

合并整个开发分支 切换到本地test分支&#xff0c;选择右下角远程开发分支&#xff0c;选择Merge into Current。然后提交到远程test仓库。 合并某次提交的代码 当前工作区切换成test分支&#xff0c;选择远程仓库中的dev开发分支&#xff0c;选择需要合并的提交版本右击&a…

cmd小黑框——命令行基础语句与实操效果演示

cmd小黑框——命令行学习 初识cmd小黑框cmd命令缩写含义介绍cmd基础操作cmd实操效果演示cmd命令行快捷键 初识cmd小黑框 CMD&#xff0c;全称Command&#xff0c;是Windows系统中自带的一个命令行解释器&#xff0c;它允许用户通过输入命令来对系统进行各种操作。CMD命令在Win…

从运营层面看财务管理:如何做好项目的财务预算

有效的项目运营是企业发展进步的主要活动&#xff0c;企业管理者的项目财务管理主要针对项目财务预算。项目财务预算管理是企业财务管理的一个分支&#xff0c;也是项目财务管理的核心部分&#xff0c;其表现形式为一个综合性的财务计划&#xff0c;主要包括预算编制、报告、执…

SQL Server 实验二:数据库视图的创建和使用

目录 第一关 相关知识 什么是表 操作数据表 创建数据表 插入数据 修改表结构 删除数据表 编程要求 第一关实验代码&#xff1a; 第二关 相关知识 视图是什么 视图的优缺点 视图的优点 视图的缺点 操作视图 创建视图 通过视图向基本表中插入数据 通过视图修改基本表的…

武汉星起航引领跨境电商新潮流,一站式方案助力创业者快速崛起

在跨境电商领域&#xff0c;武汉星起航电子商务有限公司以其独特的一站式解决方案&#xff0c;为众多创业者提供了通往成功的捷径。该公司凭借专业的团队和丰富的经验&#xff0c;为创业者提供全方位的支持&#xff0c;助力他们在跨境电商领域实现快速发展。 随着全球经济的不…

线性规划-非线性规划-非线性规划遗传算法

遗传算法当前获得的最优值作为非线性寻优的初始解&#xff0c;随后进行求解。

从创意立项到产品赚钱的全调优过程复盘,如何提高产品存活率 | TopOn变现干货

10月28日&#xff0c;由TopOn、罗斯基联合主办的“游戏赛道新机会”主题沙龙在成都举办。活动邀请了国内外多位知名公司及游戏爆款产品的负责人分享&#xff0c;分别从各自的方向及经验出发&#xff0c;以数据、案例、产品分析、行业趋势等多个维度&#xff0c;为行业从业者带来…

C++初阶篇----string类

目录 引言标准库中的string类string类的常用接口string类对象的常见构造string类对象的string类对象的访问及遍历string类对象的修改string类非成员函数 引言 什么是string类&#xff1f; string 类是 C 标准库中的一个类&#xff0c;用于处理字符串。它提供了一系列方法来创建…

北斗激光平地机提高农机耕种效率

北斗激光平地机提高农机耕种效率 湖北省浠水县地处大别山南麓&#xff0c;六成左右的田块都分布在丘陵地带&#xff0c;田块小、高低落差大&#xff0c;给机械化作业带来诸多不便。在今年的春耕中&#xff0c;配备北斗智能检测终端的激光平地机很受当地种粮大户追捧。 稻田平整…

超声波清洗机选购指南:眼镜清洗器哪个好?4款眼镜清洗利器推荐

随着科技的发展&#xff0c;现在就是连洗眼镜都有专门的辅助工具了&#xff0c;没错&#xff0c;就是超声波眼镜清洗机&#xff01;这种超声波清洗机之所以能够做到清洁眼镜&#xff0c;是因为它利用了超声波振动原理&#xff0c;通过水分子爆破瞬间的冲击力对眼镜上面的污垢进…

2024 年广西职业院校技能大赛高职组《云计算应用》赛项样卷

#需要资源&#xff08;软件包及镜像&#xff09;或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; #需要资源&#xff08;软件包及镜像&#xff09;或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; #需要资源&#xff08;软件包及镜…

Java八股文(设计模式)

Java八股文の设计模式 设计模式 设计模式 什么是设计模式&#xff1f;请列举一些常见的设计模式。 设计模式是软件设计中常用的一种思维模式&#xff0c;它描述了一类具有相似特征和解决思路的问题。 常见的设计模式包括单例模式、工厂模式、观察者模式、装饰器模式等。 请解释…

简单的LAMP部署

目录 一、准备环境 二、安装apache组件 三、安装mysql组件 四、安装php组件 五、浏览器访问 一、准备环境 iptables -F #清空防火墙规则 systemctl stop firewalld #关闭防火墙 setenforce 0 …

IP/TCP--解决为什么电脑连上了有线网就不能再连WIFI【转载】

文章目录 第一种情况&#xff1a;WIFI与有线网在同一网段下1、查看路由信息2、调整跃点数 第二种情况&#xff1a;WIFI与有线网不在同一网段下跃点数概念路由器设置入口 【注意适用情型&#xff1a;需要同时用到内网&#xff08;不能上公网的内部网络&#xff09;和互联网。】 …

PyQt5——QFileDialog 打开文件对话框

概述 打开文件对话框是为了让用户可以自己选择要打开的文件&#xff0c;在 PyQt5 里要打开文件对话框可以使用 QFileDialog。 无父类窗口 Python PyQt5 打开文件对话框要使用 QFileDialog.getOpenFileName()&#xff0c;如果没有父类 Widget 的话&#xff0c;QFileDialog.ge…

Webpack常见插件和模式

目录 目录 目录认识 PluginCleanWebpackPluginHtmlWebpackPlugin自定义模版 DefinePlugin的介绍 ( 持续更新 )Mode 配置 认识 Plugin Loader是用于特定的模块类型进行转换&#xff1b; Plugin可以用于执行更加广泛的任务&#xff0c;比如打包优化、资源管理、环境变量注入等 …

linux离线安装maven

一、下载maven 地址&#xff1a;Maven – Download Apache Maven 使用root权限用户登录服务器 cd /opt sudo mkdir maven cd maven 二、上传maven 使用Xftp工具 三、解压并配置环境变量 tar -zxvf tar -zxvf apache-maven-3.9.6-bin.tar.gz cd apache-maven-3.9.6/ 看到解压…