微服务sentinel解析部署使用全流程

news2024/12/25 23:45:28

sentinel源码地址: 介绍 · alibaba/Sentinel Wiki · GitHub

sentinel官方文档: https://sentinelguard.io/zh-cn/docs/introduction.html

Sprong Cloud alibaba Sentinel文档【小例子】 : Sentinel · alibaba/spring-cloud-alibaba Wiki · GitHub

目录

1、sentinel概念

2、入门例子

0、启动nacos和redis

1、使用openfeign项目

2、引入依赖

3、下载sentinel服务

4、启动服务

5、登录sentinel

6、添加sentinel配置信息

7、启动并访问两项目 查看结果

​编辑

【概念了解】

3、自定义流控响应

1、添加过滤器SentinelFilterConfig

2、添加配置类SentinelConfig

3、运行结果

4、熔断feign

1、添加配置

2、修改feign接口注解

3、添加feign接口实现类

4、查看运行结果

5、熔断资源

1、try方式

2、注解方式

6、其他说明


1、sentinel概念

随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。

流量路由,流量控制,流量整形:流量从另外一个角度,也叫请求。

2、入门例子

0、启动nacos和redis

1、使用openfeign项目

详细可见微服务 OpenFeign 解析部署使用全流程-CSDN博客

2、引入依赖

给两个项目都添加如下依赖:

<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

<dependency>
  <groupId>com.alibaba.csp</groupId>
  <artifactId>sentinel-web-servlet</artifactId>
</dependency>

3、下载sentinel服务

下载sentinel服务路径: https://github.com/alibaba/Sentinel/releases

注意版本号对应

我们用的是1.8.0版本,下载服务端时下载对应的版本。

4、启动服务

找到当前jar包位置输入cmd

执行

java -jar sentinel-dashboard.jar

5、登录sentinel

http://localhost:8080/#/login

用户名和密码都是sentinel。

6、添加sentinel配置信息

给两个项目的application.yml配置文件里添加如下配置:

spring:
 cloud:
  sentinel:
   transport:
    dashboard: localhost:8080

填入后

修改后

7、启动并访问两项目 查看结果

【访问sentinel网站,设置限流】

http://localhost:8080/#/dashboard/identity/openfeignDemo1


Sentinel Dashboard

注意:设置的单机阈(yu四声)(一秒钟访问的数量)值改为2,这样可以尽快看见限流。

【限流的效果】

一下一下点击访问的时候,还可以看见正常响应:

但是快速点击的时候,就显示被限流了:

【概念了解】

【1、什么是QPS】

每秒请求的数量,要求发送请求并得到响应的整体时间。

【2、什么是RT】

响应时间。

【3、慢调用】

响应时间大于一定值。

【4、慢调用比例】

慢调用 / 总调用 比例值。

【5、比例阈值】

输入0到1之间的浮点型,代表百分比,0是0%,1是100%。

3、自定义流控响应

当被限流的时候,浏览器中展示的效果如下,用户体验度不好,可以进行以下操作。

1、添加过滤器SentinelFilterConfig

在user工程里,添加此过滤器。

package com.jr.config;

import com.alibaba.csp.sentinel.adapter.servlet.CommonFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.servlet.Filter;

@Configuration
public class SentinelFilterConfig {

    @Bean
    public FilterRegistrationBean<Filter> filterFilterRegistrationBean(){
        FilterRegistrationBean<Filter> result = new FilterRegistrationBean<>(new CommonFilter());
        result.addUrlPatterns("/*");
        return result;
    }
}

2、添加配置类SentinelConfig

在user工程里,添加此过配置类。

package com.jr.config;

import com.alibaba.csp.sentinel.adapter.servlet.callback.WebCallbackManager;
import com.alibaba.fastjson.JSON;
import com.jr.util.Result;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SentinelConfig {

    public SentinelConfig() {
        WebCallbackManager.setUrlBlockHandler((request, response, e) -> {
            Result error = Result.error();
            error.setMessage("被限流了!");
            response.setCharacterEncoding("UTF-8");
            response.setContentType("text/html;charset=utf-8");
            response.getWriter().write(JSON.toJSONString(error));
        });
    }
}

3、运行结果

重启user项目,重新添加流量阈值,查看运行结果。

4、熔断feign

官方地址: https://github.com/alibaba/Sentinel/wiki/%E7%86%94%E6%96%AD%E9%99%8D%E7%BA%A7

1、添加配置

在user工程里 开启feign的sentinel,写properties文件中可以,写在yaml文件也可以

feign.sentinel.enabled=true

2、修改feign接口注解

/**
 * openfeignDemo2是springsession-1在nacos注册的项目名()
 * ScoreFeignImpl.classs是实现类的名字
 * //fallback 一旦出现熔断,要走哪个类。
 */
@FeignClient(value = "openfeignDemo2", fallback = ScoreFeignImpl.class) 

3、添加feign接口实现类

package com.jr.feign.impl;

import com.jr.entry.Score;
import com.jr.entry.UserDto;
import com.jr.feign.ScoreFeign;
import com.jr.util.Result;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;

@Service
public class ScoreFeignImpl implements ScoreFeign {
    @Override
    public Result info() {
        List<Score> list = new ArrayList<>();
        for (int i = 0; i < 3; i++) {
            Score score = new Score();
            score.setName("name" + i);
            score.setScore(99.99);
            list.add(score);
        }
        return  Result.ok().put("list",list);
    }

    @Override
    public Result id(String id) {
        return null;
    }

    @Override
    public Result add(UserDto user) {
        return null;
    }
}

FeignClient注解中的fallback属性配置了如果熔断,应该访问的Feign接口实现类。当发生熔断时,会访问ScoreFeignImpl中对接口的实现方法。

4、查看运行结果

关掉Score工程,模拟宕机效果。在使用user工程去访问Score工程,就可以看见熔断处理了。

当遇到宕机的时候,就访问了自己工程里的feign实现类方法。

5、熔断资源

熔断资源官网地址: https://github.com/alibaba/Sentinel/wiki/%E7%86%94%E6%96%AD%E9%99%8D%E7%BA%A7

资源(是自己写的处理器方法,要对自己写的方法进行限流)是自定义的一个名称,这个名称会在Sentinel中显示,就可以对其进行熔断、降级等管理。

实现对资源管理的常用方式有两种,分别是try和注解。

1、try方式

在user工程的UserController里,添加如下方法:

 @GetMapping("/try")
    public Result trySources(){
        String sourcesName = "testTry";
        try(Entry entry = SphU.entry(sourcesName)) { //SphU.entry方法通过传入资源名称和其他参数来获取访问令牌。如果获取到令牌,则可以访问目标资源;如果没有获取到令牌,则无法访问对应资源。
            return Result.ok();
        } catch (BlockException e) {
            return Result.error().setMessage("被限流了!");
        }
    }

注意Entry引包

import com.alibaba.csp.sentinel.Entry;

在user工程的Result里,添加如下方法:

    public Result setMessage(String message) {
        this.message = message;
        return this;
    }

重启两个项目,运行一下看效果,就是自己写的方法,也被限流了。

2、注解方式

在user工程的UserController里,添加如下方法:

 @GetMapping("/annotation")
    @SentinelResource(value = "testAnnotation", blockHandler = "annotationSourcesError")
    public Result annotationSources() {
        return Result.ok();
    }

    public Result annotationSourcesError(BlockException e) {
        return Result.error().setMessage("被限流了!");
    }

重启两个项目,运行一下看效果,就是自己写的方法,也被限流了。

6、其他说明

【1、异常比例】

是发生异常数 / 总请求数。

【2、异常数 】

发生异常次数。

【3、快速失败】

当QPS超过阈值是,直接限流,抛出异常。是默认值,可以用于线程数的限流。

【4、排队等待】

每秒可以处理10个请求,当超出这个值就会等待,等待10000毫秒后,如果还没有被处理会限流。只能用于QPS的限流。

【5、Warm Up】

可以让服务器的QPS“慢慢地”达到阈值,在10秒中之内让QPS到底10。只能用于QPS的限流。

【6、直接拒绝】

只对单一资源,当触发阈值时直接拒绝请求。

【7、关联】

针对两个资源有关联时,当前当前资源会为关联资源让步,保证关联资源有更大的阈值。

【8、链路】

​    从资源入口开始,整个两路的阈值。

【9、热点限流】

当系统中的某些数据被经常引用,可以对这些数据进行限流,减少服务器压力。

【10、系统规则】

针对硬件层面设置的规则,比如限制CPU的使用率

【11、授权规则】

 根据请求的来源设置限流,其实就是黑白名单功能

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

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

相关文章

wsl(1) --- win11环境配置

1. 开启WSL可选功能 打开设置&#xff0c;点击应用&#xff0c;点击可选功能&#xff0c;点击更多Windows功能&#xff0c;查看是否开启了【适用于Linux的Windows子系统】和【虚拟机平台】 2. 更新wsl 不执行这步&#xff0c;启动wsl镜像时会出现WslRegisterDistribution f…

带徒实训项目实战讲义分享:ApiFirst文档对比功能页面开发2

前一篇&#xff1a;带徒实训项目实战讲义分享&#xff1a;ApiFirst文档对比功能页面开发 亲爱的学员朋友们好&#xff0c;本小节跟小卷一起来学习用thymeleaf模板技术来渲染数据模型到表格中&#xff0c;通过本小节的学习&#xff0c;你会真正将thymeleaf模板技术应用到实处&a…

JavaScript 全攻略:从基础到精通

一、JavaScript 初印象 &#xff08;一&#xff09;起源与发展 JavaScript 的诞生源于对网页动态性的需求。1995 年&#xff0c;布兰登・艾奇仅用十天时间就设计出了这门语言&#xff0c;最初命名为 Mocha&#xff0c;后改为 LiveScript&#xff0c;最终定名为 JavaScript。它…

OLED显示屏中常见的3-spi和4-spi

显示屏中经常出现的IIC&#xff0c;3-spi和4-spi 其中&#xff0c;在用spi接口中经常用到的是4-spi&#xff0c;和IIC相比&#xff0c;spi有更高的传输速度。而IIC需要更少的引脚。下面是以SH1107驱动手册里的内容简单了解3-spi和4-spi区别 从两张图中可以看出&#xff0c;3…

Vue2(十三):路由

一、路由的简介 vue-rooter&#xff1a;是vue的一个插件库&#xff0c;专门用来实现SPA应用 1.对SPA应用的理解 1、单页 Web 应用&#xff08;single page web application&#xff0c;SPA&#xff09;。 2、整个应用只有一个完整的页面 index.html。 3、点击页面中的导航链…

Hutool工具包

下载jar包网址 hutool-all-5.3.2.jar下载及Maven、Gradle引入代码&#xff0c;pom文件及包内class -时代Java (nowjava.com) maven导入 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.3.2&l…

PHP后台+基于微信小程序外卖点餐系统毕业设计源代码作品和开题报告

博主介绍&#xff1a;黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者&#xff0c;CSDN博客专家&#xff0c;在线教育专家&#xff0c;CSDN钻石讲师&#xff1b;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程&#xff…

Ansible学习之ansible-pull命令

想要知道ansible-pull是用来做什么的&#xff0c;就需要了解Ansible的工作模&#xff0c;Ansible的工作模式有两种&#xff1a; push模式 push推送&#xff0c;这是Ansible的默认模式&#xff0c;在主控机上编排好playbook文件&#xff0c;push到远程主机上来执行。pull模式 p…

一文搞懂CP-ABE,基于访问控制树的BSW方案原理分析与源码实现【基于C++、PBC库】

文章目录 一. 概述1.1 CP-ABE基础介绍1.2 访问控制树与BSW方案原理1.2.1 系统模型与角色1.2.2 主要算法1.2.3 访问结构与访问树1.2.4 数学基础 二. 具体算法流程2.1 Setup&#xff08;初始化&#xff09;2.2 KeyGen&#xff08;密钥生成&#xff09;2.3 Encrypt&#xff08;加密…

Typora---进度条(1)

本系列专门介绍关于typora中用到的小玩意。&#xff08;哈哈哈哈哈哈&#xff09; 本帖子讲述关于 进度条 的事情。 在typora中通过下面的语句可以显示出一个进度条&#xff1a; ![95% done](https://markdone.org/progress//95.png)通过更改上面语句中的数字可以展示不同的进…

local minima 的问题如何解决

&#x1f680; 在初始神经网络那一节&#xff08;链接如下&#xff1a;初识机器学习&#xff09;是遇到了两个问题&#xff0c;第一个是在求解函数未知参数数时会遇到local minima的问题&#xff0c;在哪里我们并没有过多解释&#xff0c;就是说一般遇不到并且很好解决&#xf…

合并两个有序数组(c语言)

1.//给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数组同样按 非递减顺序 排列。 //注意&#xff1a;最终&#xff0c;合并后数…

Unity 2D RPG Kit 学习笔记

学习资料&#xff1a; B站教学视频&#xff1a;https://www.bilibili.com/video/BV1dC4y1o7A5?p1&vd_source707ec8983cc32e6e065d5496a7f79ee6 2D RPG Kit Documentation.pdf文档 1、2D RPG Kit Documentation文档 1.1、Scenes/TitleScreen 开始菜单工程 1.2、https://it…

32、Qt读写csv文件

一、写入 QString fileName QFileDialog::getSaveFileName(this, "写入", "/untitled.csv", tr("Files (*.csv)"));if(fileName.isEmpty()){QMessageBox::warning(this, "提示", "文件名不能为空", QMessageBox::Ok);retur…

探索分布式IO模块的介质冗余:赋能工业自动化的稳健之心

在日新月异的工业自动化领域&#xff0c;每一个细微环节的稳定性都直接关系到生产线的效率与安全。随着智能制造的深入发展&#xff0c;分布式IO&#xff08;Input/Output&#xff09;模块作为连接现场设备与控制系统的关键桥梁&#xff0c;其重要性日益凸显。我们自主研发的带…

网络原理-传输层UDP

上集回顾&#xff1a; 上一篇博客中讲述了应用层如何自定义协议&#xff1a;确定传输信息&#xff0c;确定数据格式 应用层也有一些现成的协议&#xff1a;HTTP协议 这一篇博客中来讲述传输层协议 传输层 socket api都是传输层协议提供的&#xff08;操作系统内核实现的了…

MBTI人格测试项目(uni-app微信小程序 + SpringBoot)

目录 项目概述 测试 & 计分方式说明 页面展示 开发日志文档 素材&#xff1a;题库和人格分析 Gitee源码地址 项目概述 1.通过回答70道不同类型的题目&#xff0c;推算出MBTI人格类型&#xff0c;并给出此人格类型的解析。 2.使用uni-app编写微信小程序。 3.前端使…

车辆重识别(2021ICML改进的去噪扩散概率模型)论文阅读2024/9/29

所谓改进的去噪扩散概率模型主要改进在哪些方面&#xff1a; ①对数似然值的改进 通过对噪声的那个方差和T进行调参&#xff0c;来实现改进。 ②学习 这个参数也就是后验概率的方差。通过数据分析&#xff0c;发现在T非常大的情况下对样本质量几乎没有影响&#xff0c;也就是说…

Keil安装简易教程

1、安装MDK538a.exe 2、一直点下一步&#xff0c;默认安装即可。安装完成依次点击进行注册 3、利用Keygen进行License注册 4、Pack Installer 下载包&#xff0c;可在线下&#xff0c;可自行下 5、下载完可正常打开自己的工程项目 6、解压文件到Keil安装路径下C:\Keil_MDK\ARM…

如何利用多线程提高计算密集型任务的性能

文章目录 摘要引言基本概念和原理判断是否适合使用多线程多线程编程中的关键问题设计和实现高效的多线程示例代码QA环节总结未来展望参考资料 摘要 多线程编程可以充分利用多核处理器的计算能力&#xff0c;从而显著提高计算密集型任务的性能。本篇文章将介绍多线程编程的基本…