Sentinel浅层介绍(上)

news2024/11/21 2:27:23

一、概述

Sentinel是阿里开源的一款面向分布式、多语言异构化服务架构的流量治理组件。

主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。

二、核心概念

1、资源

资源是Sentinel中一个非常重要的概念,资源就是Sentinel所保护的对象。

资源可以是一段代码,又或者是一个接口,Sentinel中并没有什么强制规定,但是实际项目中一般以一个接口为一个资源,比如说一个http接口,又或者是rpc接口,它们就是资源,可以被保护。

资源是通过Sentinel的API定义的,每个资源都有一个对应的名称,比如对于一个http接口资源来说,Sentinel默认的资源名称就是请求路径。

2、规则

规则也是一个重要的概念,规则其实比较好理解,比如说要对一个资源进行限流,那么限流的条件就是规则,后面在限流的时候会基于这个规则来判定是否需要限流。

Sentinel的规则分为流量控制规则、熔断降级规则以及系统保护规则,不同的规则实现的效果不一样。

三、Demo

1、基本使用

引入依赖

<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-core</artifactId>
    <version>1.8.6</version>
</dependency>

测试代码

public class SentinelSimpleDemo {

    public static void main(String[] args) {
        //加载流控规则
        initFlowRules();

        for (int i = 0; i < 5; i++) {
            Entry entry = null;
            try {
                entry = SphU.entry("sayHello");
                //被保护的逻辑
                System.out.println("访问sayHello资源");
            } catch (BlockException ex) {
                System.out.println("被流量控制了,可以进行降级处理");
            } finally {
                if (entry != null) {
                    entry.exit();
                }
            }
        }
    }

    private static void initFlowRules() {
        List<FlowRule> rules = new ArrayList<>();

        //创建一个流控规则
        FlowRule rule = new FlowRule();
        //对sayHello这个资源限流
        rule.setResource("sayHello");
        //基于qps限流
        rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
        //qps最大为2,超过2就要被限流
        rule.setCount(2);

        rules.add(rule);

        //设置规则
        FlowRuleManager.loadRules(rules);
    }
}

测试结果
在这里插入图片描述
从结果可以看出,当前两次访问sayHello成功之后,qps达到了2,之后再访问就被限流了,失败了。

2、集成Spring

在实际的项目使用中一般不会直接写上面的那段demo代码,而是集成到Spring环境底下。

引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.2.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    <version>2.2.5.RELEASE</version>
</dependency>

之后提供一个/sayHello接口

@RestController
public class SentinelDemoController {

    @GetMapping("/sayHello")
    public String sayHello() throws InterruptedException {
        return "hello";
    }
}

配置文件

server:
  port: 9527
  
spring:
  application:
    name: SentinelDemo

Sentinel实现了SpringMVC中的HandlerInterceptor接口,在调用Controller接口之前,会将一个调用接口设置为一个资源,代码如下
在这里插入图片描述
而getResourceName方法就是获取资源名,其实就是接口的请求路径,比如前面提供的接口路径是/sayHello,那么资源名就是/sayHello。

测试结果
在这里插入图片描述
可以看出规则生效了,接口被Sentinel限流了,至于为什么出现这个提示,是因为Sentinel有默认的处理BlockException的机制,就在前面提到的进入资源的后面。
在这里插入图片描述
当然,你也可以自定义处理的逻辑,实现BlockExceptionHandler接口就可以了。

虽然上面这种硬编码规则的方式可以使用,但是在实际的项目中,肯定希望能够基于系统当期那运行的状态来动态调整规则,所以Sentinel提供了一个叫Dashboard应用的控制台,可以通过控制台来动态修改规则。
在这里插入图片描述
控制台其实就是一个jar包,可以从Sentinel的github仓库上下载,或者是通过从下面这个地址获取。
之后通过java -jar命令启动就可以了,端口默认8080,浏览器访问http://ip:8080/#/login就可以登录控制台了,用户名和密码默认都是sentinel。

此时服务要接入控制台,只需要在配置文件上加上控制台的ip和端口即可

spring:
  cloud:
    sentinel:
      transport:
        # 指定控制台的ip和端口
        dashboard: localhost:8080

项目刚启动的时候控制台默认是没有数据的,需要访问一下接口,之后就有了。
在这里插入图片描述
之后就可以看到/sayHello这个资源,后面就可以通过页面设置规则。

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

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

相关文章

【机器学习】决策树算法理论:算法原理、信息熵、信息增益、预剪枝、后剪枝、算法选择

1. 决策树概念 通过不断的划分条件来进行分类&#xff0c;决策树最关键的是找出那些对结果影响最大的条件&#xff0c;放到前面。 我举个列子来帮助大家理解&#xff0c;我现在给我女儿介绍了一个相亲对象&#xff0c;她根据下面这张决策树图来进行选择。比如年龄是女儿择偶更…

【万字长文】Python 日志记录器logging 百科全书 之 日志过滤

Python 日志记录器logging 百科全书 之 日志过滤 前言 在Python的logging模块中&#xff0c;日志过滤器&#xff08;Filter&#xff09;用于提供更细粒度的日志控制。通过过滤器&#xff0c;我们可以决定哪些日志记录应该被输出&#xff0c;哪些应该被忽略。这对于复杂的应用…

【开发工具】gitee还不用会?我直接拿捏 >_>

&#x1f308;键盘敲烂&#xff0c;年薪30万&#x1f308; 目录 git的一些前置操作 如何获取本地仓库 本地仓库的操作 远程仓库操作 合并两个仓库&#xff08;通用方法&#xff09; 从远程仓库拉取文件报错 fatal:refusing to merge unrelated histories 分支操作 注意&…

MHA实验和架构

什么是MHA&#xff1f; masterhight availabulity&#xff1a;基于主库的高可用环境下可以实现主从复制、故障切换 MHA的主从架构最少要一主两从 MHA的出现是为了解决MySQL的单点故障问题。一旦主库崩溃&#xff0c;MHA可以在0-30秒内自动完成故障切换。 MHA的数据流向和工…

QT windows与linux之间sokcet通信中文乱码问题解决方法

QT windows与linux之间sokcet通信中文乱码问题解决方法 linux发送与接收都转码utf-8: tcpClient ->write( send_msg.toUtf8());//解决乱码&#xff0c;发送转码 接收&#xff1a; QByteArray buffer tcpClient->readAll(); if(!buffer.isEmpty()) { // ui->plain…

[工业自动化-21]:西门子S7-15xxx编程 - 软件编程 - 如何快速看懂PLC梯形图?

目录 预备&#xff1a;电气图 1. 电路图 2. 电气图 一、梯形图概述 1.1 什么是梯形图 1.2 梯形图的作用 二、梯形图中的主要元素 三、梯形图的程序执行 3.1 梯形图扫描的原则 3.2 梯形图执行顺序 3.3 梯形图扫描 预备&#xff1a;电气图 1. 电路图 电路组成&#x…

雷达测角原理、测角精度、测角分辨率以及3DFFT角度估计算法汇总

1.角度测量方法 依据&#xff1a;电磁波的直线传播和雷达天线的方向性。 分类&#xff1a;振幅法测角、相位法测角 1.1 相位法测角 相位法测角利用多个天线所接收回波信号之间的相位差进行测角。如下图所示&#xff1b; 图 1 设在θ方向有一远区目标&#xff0c;则到达接收点…

【STM32】串口和printf

1.数据通信的基本知识 1.串行/并行通信 2.单工/半双工/全双工通信 类似于【广播 对讲 电话】 不是有两根线就是全双工&#xff0c;而是输入和输出都有对应的数据线。 3.同步/异步通信 区分同步/异步通信的根本&#xff1a;判断是否有时钟信号&#xff08;时钟线&#xff09;。…

MVC使用的设计模式

MVC使用的设计模式 一、背景 MVC模式是"Model-View-Controller"的缩写&#xff0c;中文翻译为"模式-视图-控制器"。MVC应用程序总是由这三个部分组成。Event(事件)导致Controller改变Model或View&#xff0c;或者同时改变两者。只要Controller改变了Model…

关于 Java NIO 的 Selector 的事儿,这篇文章里面全都有

前面 4 篇文章深入分析了 NIO 三大组件中的两个&#xff1a;Buffer 和 Channel&#xff1a; 【死磕 NIO】— 深入分析Buffer【死磕 NIO】— 深入分析Channel和FileChannel【死磕NIO】— 跨进程文件锁&#xff1a;FileLock【死磕NIO】— 探索 SocketChannel 的核心原理 这篇文…

ffmpeg5及以上-s和像素格式转换 画屏问题

环境: lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.10 Release: 22.10 Codename: kinetic拉下ffmpeg源码&#xff0c;6.0.1&#xff0c;4.3.6&#xff0c;5.1.4&#xff0c;依次安装作实验 ./configure --disable-x86asm …

msvcp140.dll丢失的解决方法、详细解析dll缺失原因及对电脑的影响

msvcp140.dll是一款Visual C Redistributable for Visual Studio 2015的运行时库&#xff0c;许多程序都需要依赖这个库才能正常运行。当msvcp140.dll丢失时&#xff0c;我们可能会遇到无法打开程序或游戏&#xff0c;甚至系统崩溃的问题。本文将详细介绍msvcp140.dll丢失的解决…

Linux--makefile

一、makefile的作用 makefile是一个文件&#xff0c;是围绕依赖关系和依赖方法的自动化编译工具 一个工程中的源文件有很多&#xff0c;按照不同的类型、功能、模块放在不同的目录中。而makefile定义了一系列的规则来指定&#xff0c;那些文件需要先编译&#xff0c;那些文件…

后端接口性能优化分析-程序结构优化

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码&#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44d;三连支持&…

【开源】基于JAVA的电子元器件管理系统

目录 一、摘要1.1 项目简介1.2 项目详细录屏 二、研究内容三、界面展示3.1 登录&注册&主页3.2 元器件单位模块3.3 元器件仓库模块3.4 元器件供应商模块3.5 元器件品类模块3.6 元器件明细模块3.7 元器件类型模块3.8 元器件采购模块3.9 元器件领用模块3.10 系统基础模块 …

PlantUML基础使用教程

环境搭建 IDEA插件下载 打开IEDA系列IDE&#xff0c;从FIle–>Settings–>Plugins–>Marketplace 进入到插件下载界面&#xff0c;搜索PlantUML&#xff0c;安装PlantUML Integration和PlantUML Parser两个插件&#xff0c;并重启IDE 安装和配置Graphviz 进入官网…

【Python 千题 —— 基础篇】欢迎光临

题目描述 题目描述 欢迎光临。为列表中的每个嘉宾打印欢迎光临语句。例如&#xff0c;有一份嘉宾列表 ["李二狗", "王子鸣"]&#xff0c;则需要根据嘉宾名单打印输出&#xff1a; 欢迎光临&#xff01;李二狗。 欢迎光临&#xff01;王子鸣。下面是一份…

基于布谷鸟算法优化概率神经网络PNN的分类预测 - 附代码

基于布谷鸟算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于布谷鸟算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于布谷鸟优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络…

编程怎么学习视频教程,编程实例入门教程,中文编程开发语言工具下载

编程怎么学习视频教程&#xff0c;编程实例入门教程&#xff0c;中文编程开发语言工具下载。 给大家分享一款中文编程工具&#xff0c;零基础轻松学编程&#xff0c;不需英语基础&#xff0c;编程工具可下载。 这款工具不但可以连接部分硬件&#xff0c;而且可以开发大型的软件…

csapp第三章读书笔记

caspp chapter 3 寄存器 operand form data movement instructions mov 指令例子: 0扩展 movz 指令: Zero-extending data movement instructions是一种计算机指令类型&#xff0c;涉及将数据从一个位置移动到另一个位置&#xff0c;同时通过在最重要的一端添加零位来将数据扩…