【SpringCloud】之Sentinel--服务容错的应用

 🎉🎉欢迎来到我的CSDN主页!🎉🎉

🏅我是君易--鑨,一个在CSDN分享笔记的博主。📚📚

🌟推荐给大家我的博客专栏《SpringCloud开发之Sentinel--服务容错的应用》。🎯🎯

🎁如果感觉还不错的话请给我关注加三连吧!🎁🎁

前言

        在上一期的博客分享中我们对其网关的概念基知识有了一个初步的了解,以及还对其网关的路由进行了一个初步的了解。本期博客基于上一期的博客进行一个扩展延伸对其使用示例,本期带来的是Sentinel--服务容错的应用。

一、 什么是Sentinel

1. 基本概述

         Sentinel (分布式系统的流量防卫兵) 是阿里开源的一套用于服务容错的综合性解决方案。它以流量 为切入点, 从流量控制、熔断降级、系统负载保护等多个维度来保护服务的稳定性。这个框架的主要目标是在分布式系统中解决服务的可用性、稳定性和性能问题。它能够帮助开发者在复杂的微服务架构中实现对服务的保护和管理。

2. 主要特征

  • 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景, 例如秒杀(即 突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。

  • 完备的实时监控:Sentinel 提供了实时的监控功能。通过控制台可以看到接入应用的单台机器秒 级数据, 甚至 500 台以下规模的集群的汇总运行情况。

  • 广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块, 例如与 Spring Cloud、Dubbo、gRPC 的整合。只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。

  • 完善的 SPI 扩展点:Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。

3.  主要功能

        Sentinel的主要功能就是容错,主要体现为下面这三个:

  1. 流量控制 Sentinel 提供了各种流量控制的策略,包括基于 QPS(每秒查询率)的流量控制、并发线程数控制等,可以有效地对服务的访问进行限制和管理,防止突发流量对系统造成影响。

  2. 熔断降级 通过定义规则和监控系统状态,Sentinel 能够在服务出现故障或超出阈值时,进行熔断降级,避免故障的传递和影响到整个系统,保障核心服务的可用性。

  3. 系统负载保护 Sentinel 可以根据系统负载情况动态调整流量控制策略,防止因为负载过重而导致系统性能下降。

  4. 实时监控和统计 Sentinel 提供了实时的监控和统计功能,可以实时查看服务的运行状态和流量情况,帮助开发者及时发现问题并进行调整。

  5. 灵活扩展性 Sentinel 提供了灵活的扩展点和插件机制,可以根据具体业务场景定制化定制相关的策略和功能。

        总之通过以上功能,Sentinel 可以帮助开发者有效地保护和管理分布式系统中的服务,提升系统的稳定性、可用性和性能。在微服务架构中,Sentinel 扮演着重要的角色,为服务的健壮性提供了强有力的支持。

4. 主要组成部分

  • 核心库(Java 客户端)不依赖任何框架/库,能够运行于所有 Java 运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。

  • 控制台(Dashboard)基于 Spring Boot 开发,打包后可以直接运行,不需要额外的 Tomcat 等 应用容器。

二、微服务集成Sentinel

1. 导入pom依赖

        为微服务集成Sentinel非常简单, 只需要加入Sentinel的依赖即可。我们在生产者的pom文件中引入

<!--引入sentinel--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId></dependency>

2. 安装Sentinel控制台

        Sentinel 提供一个轻量级的控制台, 它提供机器发现、单机资源实时监控以及规则管理等功能。         

2.1 下载jar包,解压到文件夹

        网址:Releases · alibaba/Sentinel · GitHub

2.2  启动控制台

# 直接使用jar命令启动项目(控制台本身是一个SpringBoot项目)
java -Dserver.port=9999 -Dcsp.sentinel.dashboard.server=localhost:9999 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.7.0.jar

#参考1
java -jar sentinel-dashboard-1.8.1.jar --server.port=8080
#参考2
java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.1.jar

        启动与启动成功 

 2.3 修改shop-order ,在里面加入有关控制台的配置(在yml文件中配置)

        因为我们所有的服务都是在nacos中所以我们要进行对应的配置

    sentinel:transport:port: 8719dashboard: localhost:9999
#        是否提前加载eager: true

 2.4  通过浏览器访问localhost:8080 进入控制台 ( 默认用户名密码是 sentinel/sentinel )

        我们启动服务进行网页访问,这是我们启动后进行访问的登陆界面

         我们输入账号和密码进行登陆进入首页

补充:

1. 使用原理

        了解控制台的使用原理:

 

2.5 使用测试

        我们启动生产者的服务,访问生成者的请求方法。

        由上述动图所示,我们的多次请求一个请求方法,我们到Sentinel控制台官网中可以对其服务进行一个监管查看

三、Sentinel规则

安装测试工具

        我们采用jmeter工具进行模拟测试,网址如下

Apache JMeter - Apache JMeter™

下载进行解压,在bin目录下的又一个jmeter.bat是我们window进行启动使用的,双击使用。启动后的黑窗口别叉掉,启动之后会自动弹出一个窗口        

 简单使用

        我们新建一个线程组进行简单测试

 

        然后我们进行线程测试 

1. 流量规则

        流量控制,其原理是监控应用流量的QPS(每秒查询率) 或并发线程数等指标,当达到指定的阈值时 对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。

         第1步: 点击簇点链路,我们就可以看到访问过的接口地址,然后点击对应的流控按钮,进入流控规则配置页面。新增流控规则界面如下:

        方法测试 

        右上图所示,我们一秒访问两次则第二次会显示限流的提示,因为我设置的是一秒只允许访问一个。 

 选择说明

资源名唯一名称,默认是请求路径,可自定义 针对来源:指定对哪个微服务进行限流,默认指default,意思是不区分来源,全部限制

阈值类型/单机阈值

  • QPS(每秒请求数量): 当调用该接口的QPS达到阈值的时候,进行限流

  • 线程数:当调用该接口的线程数达到阈值的时候,进行限流

是否集群暂不需要集群 接下来我们以QPS为例来研究限流规则的配置。

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

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

相关文章

muduo网络库剖析——监听者EpollPoller类

muduo网络库剖析——监听者EpollPoller类 前情从muduo到my_muduo 概要epoll原理解析epoll提供的接口epoll的触发模式epoll实现多路复用 框架与细节成员函数使用方法 源码结尾 前情 从muduo到my_muduo 作为一个宏大的、功能健全的muduo库&#xff0c;考虑的肯定是众多情况是否…

【论文阅读】One For All: Toward Training One Graph Model for All Classification Tasks

目录 0、基本信息1、研究动机2、创新点——One For All &#xff1a;unique features3、准备4、具体实现4.1、用TAGs统一来自不同领域的图数据4.2、用NOI&#xff08;NODES-OF-INTEREST&#xff09;统一不同图任务4.2.1、NOI子图4.2.2、NOI提示结点 4.3、用于图的上下文学习&am…

【算法小记】深度学习——循环神经网络相关原理与RNN、LSTM算法的使用

文中程序以Tensorflow-2.6.0为例 部分概念包含笔者个人理解&#xff0c;如有遗漏或错误&#xff0c;欢迎评论或私信指正。 卷积神经网络在图像领域取得了良好的效果&#xff0c;卷积核凭借优秀的特征提取能力通过深层的卷积操作可是实现对矩形张量的复杂计算处理。但是生活中除…

C++、QT 数字合成游戏

一、项目介绍 数字合成游戏 基本要求&#xff1a; 1&#xff09;要求游戏界面简洁美观&#xff0c;且符合扫雷的游戏风格。 2&#xff09;需要有游戏操作或者规则说明&#xff0c;方便玩家上手。 3&#xff09;需具有开始游戏&#xff0c;暂停游戏&#xff0c;结束游戏等方便玩…

2018年认证杯SPSSPRO杯数学建模C题(第一阶段)机械零件加工过程中的位置识别全过程文档及程序

2018年认证杯SPSSPRO杯数学建模 基于轮廓特征的机械零件位置识别研究 C题 机械零件加工过程中的位置识别 原题再现&#xff1a; 在工业制造自动生产线中&#xff0c;在装夹、包装等工序中需要根据图像处理利用计算机自动智能识别零件位置&#xff0c;并由机械手将零件自动搬…

【算法】算法(模拟、指针等)解决字符串类题目(C++)

文章目录 1. 前言2. 解决 字符串类算法题14.最长公共前缀5.最长回文子串67.二进制求和43.字符串相乘 1. 前言 字符串题目有很多种&#xff0c;这里筛选几个考察模拟、双指针等的题目&#xff0c;并用相关算法解决。 2. 解决 字符串类算法题 14.最长公共前缀 思路 题意分析&…

统计学-R语言-5.3

文章目录 前言分位数统计量的标准误总结 前言 本篇文章即为概率与分布的最后一篇文章。 分位数 分位数函数是累积分布函数的反函数。 p-分位数是具有这样性质的一个值&#xff1a;小于或等于它的概率为p。 根据定义&#xff0c;中位数即50%分位数。 分位数通常用于置信区间的…

Python4Delphi安装及编译

1.下载或直接克隆python4delphi组件资源到指定目录,我这里下载到Components文件夹下,并对下载的文件夹进行了重命名为(P4D),重命名不是必须的 下载地址:https://github.com/pyscripter/python4delphi 2.安装 2.1在已下载的目录下进入Install文件夹,双击MultiInstaller.exe…

debian12部署Gitea服务之二——部署git-lfs

Debian安装gitlfs: 先更新下软件包版本 sudo apt update 安装 sudo apt install git-lfs 验证是否安装成功 git lfs version cd到Gitea仓库目录下 cd /mnt/HuHDD/Git/Gitea/Repo/hu/testrepo.git 执行lfs的初始化命令 git lfs install客户机Windows端在官网下载并安装Git-Lfs 再…

渗透测试之如何部署和使用Supershell

环境: Supershell v2.0.0 Centos 7.6 docker v. 21 问题描述: 如何部署和使用Supershell 解决方案: 1、下载最新release源码,解压后进入项目目录 wget https://github.com/tdragon6/Supershell/releases/latest/download/Supershell.tar.gz如果在线下很慢,用浏览…

【银行测试】银行项目,信贷/贷款业务测试+常问面试(二)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 银行测试-信贷&am…

SpringBoot 更新业务场景下,如何区分null是清空属性值 还是null为vo属性默认值?

先看歧义现象 值为null 未传递此属性 所以此时如何区分null 时传递进来的的null&#xff0c;还是属性的默认值null? 引入方案 引入过滤器&#xff0c;中间截获requestBodyData并保存到HttpServletRequest&#xff0c;业务层从HttpServletRequest 获取到requestBodyData辅…