微服务-Sentinel

目录

 

     背景

     Sentinel使用

      Sentinel控制台

      Sentinel控制规则

     Sentinel整合OpenFeign


  

     背景

        在微服务项目架构中,存在多个服务相互调用场景,在某些情况下某个微服务不可用时,上游调用者若一直等待,会产生资源的消耗,极端情况下会影响整个应用,如下图:

        在高并发的场景下,由于A服务不可用,导致B调用A一直等待,迟迟不能释放资源,进而导致B服务不可用,进而导致CD服务不可用,最终整个项目服务不可用,产生了服务崩塌。Sentinel可以解决上述问题,它在服务流量控制、熔断等方面有很好的解决方案。

        Sentinel常用的使用场景如下:
        1、秒杀场景:限流防止瞬时流量冲击。

        2、服务熔断与降级:当服务不可用时,快速失败,避免级联故障。

        3、系统保护:预防由于高负载引发的系统崩溃。

     Sentinel使用

      Sentinel控制台

        Sentinel 控制台是一个独立应用,用于可视化的监控和管理,它可以直接运行可执行的jar,项目使用的jar版本是:sentinel-dashboard-1.8.8,直接运行:java -jar sentinel-dashboard-1.8.8.jar

运行后访问:http://localhost:8080/#/login   sentinel/sentinel登录

      Sentinel控制规则

        Sentinel控制规则很多,包括:流控规则、熔断规则、热点规则、系统规则、授权规则,本文重点介绍流控规则、熔断规则。项目配置步骤如下:

        1、项目添加对Sentinel的依赖

        2、项目配置Sentinel

        3、服务接口编写及简单测试

        简单写了一个后台数据库查询接口,查询id=1的用户信息

        4、Sentinel控制台配置流控规则

        对上述服务接口,配置了每秒请求数不能超过1的流控规则,超过后,直接返回调用失败,浏览器快速请求后,会出现如下效果(流控规则已生效):

        流控规则配置说明如下:

        资源名:资源名是需要限流的唯一标识,可以是方法名、API请求路径等。通过资源名,Sentinel能够对流量进行管理与控制。

        针对来源:针对特定的调用方进行限流。例如,服务A调用服务B时,可以针对服务A的调用进行限流。默认为 default,表示不区分调用来源。

        QPS(每秒请求数):如果某个资源的每秒请求数超过设定的阈值,则会触发限流。

        线程数:当访问该资源的并发线程数达到设定的阈值时,触发限流。

        是否集群:如果不需要集群模式限流,默认选择“不需要集群”。否则,可以开启集群限流。

        流控模式-直接限流:一旦达到阈值,直接限流当前的请求。

        流控模式-关联限流:当关联的其他资源达到限流条件时,限流当前的资源。比如/resourceA达到阈值时,/resourceB也被限流。

        流控模式-链路限流:对入口资源进行链路限流,限制从指定入口进入的资源访问。当链路上的访问量达到阈值时,限制链路上的流量,常用于链路保护。

        流控效果-快速失败:当达到限流条件时,直接抛出异常,返回失败结果。

        流控效果-Warm Up(预热):在一段时间内,逐步增加允许通过的流量,直至达到设定的 QPS 阈值。适合应用在高峰期流量突增的场景。

        流控效果-排队等待:请求不会立即失败,而是进入排队状态,匀速通过。适用于平滑处理请求的场景,类似于“漏斗效应”。阈值类型必须为 QPS,否则无效。

        如果需要手工处理限流或者降级的逻辑,不直接演示生硬的【Blocked by Sentinel (flow limiting)】信息,可以通过@SentinelResource 解决,参考代码如下:

        blockHandler:处理限流或降级时的逻辑,方法名必须是 public,返回类型与原方法一致,且参数类型需要与原方法匹配,方法最后要加上 BlockException 参数。可以处理流控、熔断等情况触发的 BlockException。

        5、Sentinel控制台配置熔断规则

        Sentinel 的熔断规则主要分为三种策略,慢调用比例、异常比例和异常数,这些策略用于保护服务免于过载或连续的失败。

        慢调用比例 :该策略会根据请求响应的时间来判断是否进行熔断,适合用于防止因某些请求响应过慢而拖垮整个系统。

        最大RT(Response Time):表示系统中允许的最大响应时间,如果一个请求的响应时间超过这个设定值,就会被判定为慢调用

        最小请求数目:在统计周期内,只有请求数超过设定的最小请求数,才会触发熔断逻辑。

        熔断条件:当单位时间内内的慢调用比例超过设定的阈值时,触发熔断,进入熔断状态。

        恢复机制:在熔断时长过后,进入半开状态,如果后续请求正常则关闭熔断器,如果再发生慢调用则继续熔断。
        
        异常比例:该策略会根据异常的比例来判断是否进行熔断,适合用于当请求的失败率突然增加时,自动进行保护。

        最小请求数目:同样需要单位时间内的请求数达到设定的最小值,才会计算异常比例。

        熔断条件:当单位时间内内的异常比例大于设定的阈值时,触发熔断,进入熔断状态。

        恢复机制:在熔断时长过后,进入半开状态,如果后续请求成功,则关闭熔断器,否则继续熔断。
        异常数:该策略根据单位时间内的异常数量来判断是否熔断,适合用于系统中发生大量异常时的保护机制。

        下方以异常数熔断规则举例:

        后台模拟异常

        异常数熔断规则配置:

        在10秒时间内,最小请求大于5,接口出现10次异常后,接口服务熔断不可用

        jemter多线程请求测试:

        启动jemter任务,然后在浏览器请求:http://localhost:8088/blogUser/simulateException 显示接口服务已熔断。

        当关闭jemter测试任务后,再次请求  http://localhost:8088/blogUser/simulateException 后,服务接口恢复。

     Sentinel整合OpenFeign

        Sentinel整合OpenFeign步骤如下:

        1、增加配置信息

        2、对feign接口增加服务降级的逻辑

        3、测试调用

        在blog-content服务正常可用时,调用http://localhost:8088/blogUser/simulate 时,系统返回后台数据信息;当关闭blog-content服务时,控制台显示【BlogContent 服务降级】

           

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

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

相关文章

智慧零工平台前端开发实战:从uni-app到跨平台应用

智慧零工平台前端开发实战:从uni-app到跨平台应用 本文将详细介绍我如何使用uni-app框架开发一个支持微信小程序和H5的零工平台前端应用,包含技术选型、架构设计、核心功能实现及部署经验。 前言 在当今移动互联网时代,跨平台开发已成为提高开发效率的重要手段。本次我选择…

Qt实现csv文件按行读取的方式

Qt实现csv文件按行读取的方式 场景:我有一个保存数据的csv文件,文件内保存的是按照行保存的数据,每行数据是以逗号为分隔符分割的文本数据。如下图所示: 现在,我需要按行把这些数据读取出来。 一、使用QTextStream文本流的方式读取 #include <QFile>void readfil…

day17 leetcode-hot100-34(链表13)

23. 合并 K 个升序链表 - 力扣&#xff08;LeetCode&#xff09; 1.数组排序 思路 &#xff08;1&#xff09;将全部的节点存储到数组中 &#xff08;2&#xff09;对数组进行排序 &#xff08;3&#xff09;最后创建一个全新的链表 具体代码 /*** Definition for singly…

docker运行程序Killed异常排查

问题描述 我最近开发了一个C 多线程程序&#xff0c;测试没有问题&#xff0c;封装docker测试也没有问题&#xff0c;然后提交给客户了&#xff0c;然后在他那边测试有问题&#xff0c;不定时、不定位置异常中断&#xff0c;以前一直认为只要封装了docker就万事大吉&#xff0…

爬虫的几种方式(使用什么技术来进行一个爬取数据)

在网页数据爬取中&#xff0c;确实存在多种数据呈现和获取形式&#xff0c;远不止静态HTML解析和简单JS渲染。理解这些形式对于应对不同的反爬机制至关重要&#xff1a; 主要数据获取形式与应对策略 纯静态HTML (基础形式) 特点&#xff1a; 数据直接嵌入在服务器返回的初始HT…

MyBatis-Plus高级用法:最优化持久层开发

MyBatis-Plus 是 MyBatis 的增强工具&#xff0c;旨在简化开发、提高效率并保持 MyBatis 的灵活性。本文将详细介绍 MyBatis-Plus 的高级用法&#xff0c;帮助开发者最优化持久层开发。 一、MyBatis-Plus 简介 MyBatis-Plus 是一个 ORM 框架&#xff0c;提供了 CRUD 接口、条…

【C++/Linux】TinyWebServer前置知识之IP协议详解

目录 IPv4地址 分类 IP数据报分片 IP 协议在传输数据报时&#xff0c;将数据报分为若干分片&#xff08;小数据报&#xff09;后进行传输&#xff0c;并在目的系统中进行重组&#xff0c;这一过程称为分片&#xff08;Fragmentation&#xff09;。 IP模块工作流程​编辑 I…

【办公类-22-05】20250601Python模拟点击鼠标上传CSDN12篇

、 背景需求: 每周为了获取流量券,每天上传2篇,获得1500流量券,每周共上传12篇,才能获得3000和500的券。之前我用UIBOT模拟上传12篇。 【办公类-22-04】20240418 UIBOT模拟上传每天两篇,获取流量券,并删除内容_csdn 每日任务流量券-CSDN博客文章浏览阅读863次,点赞18…

由浅入深一文详解同余原理

由浅入深一文详解同余原理 一、同余原理的基本概念1.1 同余的定义1.2 剩余类与完全剩余系 二、同余原理的基本性质2.1 自反性2.2 对称性2.3 传递性2.4 加减性2.5 乘性2.6 幂性 三、同余原理的运算与应用3.1 同余运算在计算中的应用3.2 密码学中的应用3.3 日期与周期问题 四、案…

ArcGIS Pro 创建渔网格网过大,只有几个格网的解决方案

之前用ArcGIS Pro创建渔网的时候&#xff0c;发现创建出来格网过大&#xff0c;只有几个格网。 后来查阅资料&#xff0c;发现是坐标不对&#xff0c;导致设置格网大小时单位为度&#xff0c;而不是米&#xff0c;因此需要进行坐标系转换&#xff0c;网上有很多资料讲了ArcGIS …

【MFC】初识MFC

目录 01 模态和非模态对话框 02 静态文本 static text 01 模态和非模态对话框 首先我们需要知道模态对话框和非模态对话框的区别&#xff1a; 模态对话框是一种阻塞时对话框&#xff0c;它会阻止用户与应用程序的其他部分进行交互&#xff0c;直到用户与该对话框进行交互并关…

【HW系列】—安全设备介绍(开源蜜罐的安装以及使用指南)

文章目录 蜜罐1. 什么是蜜罐&#xff1f;2. 开源蜜罐搭建与使用3. HFish 开源蜜罐详解安装步骤使用指南关闭方法 总结 蜜罐 1. 什么是蜜罐&#xff1f; 蜜罐&#xff08;Honeypot&#xff09;是一种主动防御技术&#xff0c;通过模拟存在漏洞的系统或服务&#xff08;如数据库…

TI硬件笔试面试题型解析上

本专栏预计更新60期左右。当前第14期. 这个系列通过在国内外网上搜索大厂公开的笔试和面试题目,然后构造相关的知识点矩阵,让大家对核心的知识点有更深的认识,这个过程虽然耗时费力,但大厂的很多题目(包括模拟题)确实非常巧妙,很有代表性。由于官方没有发布过这样的题库…

Python打卡训练营Day43

DAY 43 复习日 作业&#xff1a; kaggle找到一个图像数据集&#xff0c;用cnn网络进行训练并且用grad-cam做可视化 数据集地址&#xff1a;Lung Nodule Malignancy 肺结核良恶性判断 进阶&#xff1a;并拆分成多个文件 import os import pandas as pd import numpy as np from…

悲观锁与乐观锁:并发编程中的两种核心控制策略详解

在并发编程中&#xff0c;悲观锁和乐观锁是两种不同的并发控制策略&#xff0c;用于解决多个线程或进程对共享资源的并发访问问题。下面将详细介绍它们的概念、实现方式以及优缺点。 悲观锁 概念 悲观锁认为在并发环境下&#xff0c;多个线程或进程对共享资源的访问大概率会发…

python 如何写4或5的表达式

python写4或5的表达式的方法&#xff1a; python中和是用“and”语句&#xff0c;或是用“or”语句。那么4或5的表达式为“4 or 5” 具体示例如下&#xff1a; 执行结果&#xff1a;

麻省理工新突破:家庭场景下机器人实现精准控制,real-to-sim-to-real学习助力

麻省理工学院电气工程与计算机科学系Pulkit Agrawal教授&#xff0c;介绍了一种新方法&#xff0c;可以让机器人在扫描的家庭环境模拟中接受训练&#xff0c;为任何人都可以实现定制的家庭自动化铺平了道路。 本文将探讨通过Franka机器人在虚拟环境中训练的特点&#xff0c;研…

Linux程序管理练习题

Linux程序管理100题 一、Linux程序与进程&#xff08;1-15&#xff09; 程序、进程、线程的本质区别是什么&#xff1f; 答案&#xff1a;程序是静态指令集&#xff0c;进程是运行中的程序实例&#xff0c;线程是进程内的执行单元 进程的并发性和交往性体现在哪些方面&#xf…

虚幻基础:模型

能帮到你的话&#xff0c;就给个赞吧 &#x1f618; 文章目录 资源模型&#xff1a;骨架/骨骼模型动画&#xff1a;一系列姿势补帧&#xff1a;只需设定关键姿势&#xff0c;则系统在关键帧姿势之间自动生成动画。姿势的变换&#xff1a;即骨骼的变换 动画蓝图&#xff1a;执行…

《Discuz! X3.5开发从入门到生态共建》第1章 Discuz! 的前世今生-优雅草卓伊凡

《Discuz! X3.5开发从入门到生态共建》第1章 Discuz! 的前世今生-优雅草卓伊凡 第一节 从康盛创想到腾讯收购&#xff1a;PC时代的辉煌 1.1 Discuz! 的诞生&#xff1a;康盛创想的开源梦想 2001年&#xff0c;中国互联网正处于萌芽阶段&#xff0c;个人网站和论坛开始兴起。…