谷粒商城のsentinelzipkin

文章目录

  • 前言
  • 一、Sentinel
    • 1、什么是Sentinel
    • 2、项目配置
    • 3、使用案例
      • 3.1、流控
      • 3.2、降级
      • 3.3、黑白名单设置
  • 二、Zipkin
    • 1、什么是Zipkin
    • 2、项目配置
    • 3、整合案例


前言

  本篇介绍Spring Cloud Ali的sentinel组件,用于对微服务的熔断降级,以及链路追踪zipkin的使用,对应视频P326-P338。本篇为谷粒商城分布式高级部分的最后一篇,重点在于sentinel和zipkin在项目中的运用。后续更新集群部署篇


一、Sentinel

1、什么是Sentinel

  Sentinel是Spring Cloud Ali的组件,主要用于分布式系统中的流量控制、熔断降级和系统监控。在原生Spring Cloud中,是Hystrix承担着同样的作用。Sentinel 的主要概念和功能:

  1. 流量控制:Sentinel 通过限流策略控制请求的数量,其中常见的限流策略有:QPS(每秒请求数),并发线程数,令牌桶和漏斗算法。
  2. 熔断与降级:在系统出现异常(如请求超时或错误率过高)时,Sentinel 可以自动触发熔断机制,拒绝后续请求以保护系统。降级功能允许你在系统负载过高时,自动将某些服务的请求转向较简单的处理,保障系统的整体可用性。

  其中限流策略,QPS是通过控制台设定某个资源每秒允许的最大请求数量,超出这个数量的请求会被拒绝或延迟。而并发线程数则是通过限制同一时刻可以处理的请求数量来实现流量控制。令牌桶算法则是请求的到来需要从桶中获取令牌。令牌以固定的速率生成,当请求到来时,需要消耗一个令牌才能通过。如果没有可用的令牌,请求会被拒绝或延迟。漏斗算法通过维护一个“漏斗”来控制请求的流入速率。请求以恒定的速率流入漏斗,当请求超过漏斗容量时,多余的请求会被拒绝。
  而熔断主要体现在,A服务调用B服务,如果B服务长时间没有返回响应,或者直接出现错误,则会直接返回失败,后续A也不会再调用B服务了。在熔断状态持续一段时间后,熔断器会进入“半开”状态。在这个状态下,系统会允许一部分请求(例如,1%或2%的请求)尝试访问该服务,以检查服务是否已恢复。如果这些请求成功,则熔断器会完全恢复,重新允许所有请求。如果请求仍然失败,熔断器将保持熔断状态,继续拒绝请求。降级主要体现在,例如双11电商系统访问量激增,而主要的业务可能体现在下单,秒杀,后端服务可能无法承受大量请求。此时可以选择对一些非核心功能进行降级,将用户的某些请求引导到默认的页面(实现服务的基本可用)。

2、项目配置

  需要在项目中运用Sentinel,首先引入依赖(我是直接加入到了common模块下,注意,common模块中加入了某项依赖,除了需要刷新common模块,还需要刷新所有引用了common模块的微服务maven,否则可能不会生效):

			<!--        开启sentinel-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
        <!--        sentinel的图表统计-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
            <version>2.1.8.RELEASE</version>
        </dependency>

  并且配置文件中加入:

# 控制台的端口号
spring.cloud.sentinel.transport.dashboard=localhost:8080
spring.cloud.sentinel.transport.port=8719
#使用 * 表示允许所有管理端点都被暴露。即所有可用的 Actuator 端点都将通过 web 访问。
management.endpoints.web.exposure.include=*
## 开启远程调用支持
feign.sentinel.enabled=true

  如果需要在网页上通过可视化界面进行操作,则需要下载sentinel的dashboard,使用java -jar 运行,默认是8080端口。如果有冲突可以自行修改:
在这里插入图片描述  访问localhost:8080进入控制台

3、使用案例

3.1、流控

  启动服务,在浏览器中直接访问某个链接:
在这里插入图片描述  在控制台配置流控规则:
在这里插入图片描述  设置1s只能访问一次:
在这里插入图片描述  同时可以自定义配置降级页面;

@Configuration
public class SeckillSentinelConfig {

    public SeckillSentinelConfig() {
        WebCallbackManager.setUrlBlockHandler((httpServletRequest, httpServletResponse, e) -> {
            R error = R.error(ExceptionEnum.TOO_MANY_REQUEST_EXCEPTION.getCode(), ExceptionEnum.TOO_MANY_REQUEST_EXCEPTION.getValue());
            httpServletResponse.setContentType("application/json;charset=utf-8");
            httpServletResponse.getWriter().write(JSON.toJSONString(error));
        });
    }
}

  1s内多次刷新页面,说明流控规则生效:
在这里插入图片描述  sentinel也提供了多种定义受保护资源的方式,包括jdk8的新特性try-with-resource,以及@SentinelResource注解:
  try-with-resource定义受保护资源的用法:

    public SecKillSkuRedisTO getCurrentSeckillSkuById(Long skuId) {
        //定义受保护的资源方式一
        try(Entry entry = SphU.entry("getCurrentSeckillSkuById")) {
 					//自己的业务逻辑
        } catch (BlockException e) {
            log.info("{}:流控规则生效","getCurrentSeckillSkuById");
        }
        return null;
    }

  @SentinelResource注解定义受保护资源的用法:

    /**
     * 创建流控规则方式二
     * @param ex
     * @return
     */
    public List<SecKillSkuRedisTO> CurrentSeckillSkusHandler(BlockException ex) {
        log.info("{}:流控规则生效","getCurrentSeckillSkus");
        return null;
    }

    @Override
    @SentinelResource(value = "getCurrentSeckillSkus",blockHandler = "CurrentSeckillSkusHandler")
    public List<SecKillSkuRedisTO> getCurrentSeckillSkus() {
     	//自己的业务逻辑
    }

3.2、降级

  可基于响应时间,异常数,异常比例设定降级策略:
  例如基于异常数,如图所示,只要出现1个异常,就触发降级,降级持续时间为1000ms:
在这里插入图片描述  对于被保护的资源,手动抛出一个异常:

    @GetMapping("/currentSeckillSkus")
    public R getCurrentSeckillSkus(){
        int i = 1/0;
        List<SecKillSkuRedisTO> secKillSkuRedisTOS =  secKillSkuService.getCurrentSeckillSkus();
        return R.ok().put("data",secKillSkuRedisTOS);
    }

  由于出现了异常,第一次访问就出现了自定义的降级提示,也就是降级的操作生效了
在这里插入图片描述

3.3、黑白名单设置

  sentinel也支持对于访问受保护资源的权限进行控制,例如假设我访问的路径中包含currentSeckillSkus,则不允许访问,直接返回失败,则需要进行配置:

@Component
public class RequestOriginParserImpl implements RequestOriginParser {


    @Override
    public String parseOrigin(HttpServletRequest httpServletRequest) {
        String requestURI = httpServletRequest.getRequestURI();
        if (requestURI.contains("/currentSeckillSkus")) {
                return "blackList";
        }
        return "whiteList";
    }
}

  控制台加入流控应用
在这里插入图片描述  再次访问被拦截,直接进入失败页面
在这里插入图片描述  以上就是关于sentinel的简单用法的案例演示,同时需要提醒注意的是,在 Sentinel 中,默认情况下流控规则和配置是在内存中存储的,因此每次应用重启后,原有的流控规则会丢失。所以我们需要配置持久化策略,常见的有持久化入数据库,或是Redis。
  而对于feign远程调用的熔断,个人理解通常应该是在调用方进行设置。如果设置在被调用方,可能会存在一种情况,即A和B两个服务同时调用C,而A对于C的访问频率大于B对于C的访问频率,如果是在C进行熔断设置,则有可能导致B无法正常访问C。


二、Zipkin

1、什么是Zipkin

  Zipkin是一个用于链路追踪的组件,可以追踪一个请求在微服务架构中的整个生命周期,包括其经过的服务、调用时间和执行顺序,并且提供了详细的执行时间信息以及错误记录。
  下面介绍几个Zipkin 中的概念:

  • Span 是 Zipkin 中的基本概念,表示一次请求的执行过程。每个 Span 包含信息,如开始时间、结束时间、执行状态和标签等。一个请求通常由多个 Span 组成,每个服务调用都生成一个 Span。
  • Trace 是由一系列相关的 Span 组成的完整请求路径。一个 Trace 描述了请求在微服务中的完整执行过程。
  • 在 Span 中,开发者可以添加不同的注解(Annotations),用于记录特定事件(如请求开始、结束、错误等)。这些注解可以帮助更好地理解请求的执行过程。

  Span中的Annotations有:

  1. cs (Client Send):表示客户端发送请求的时间。
  2. cr (Client Receive):表示客户端接收到响应的时间。
  3. ss (Server Send):表示服务器发送响应的时间。
  4. sr (Server Receive):表示服务器接收到请求的时间。

  通过sr-cs,可以计算出发送请求所消耗的时间,通过ss-cr,可以计算出服务端处理业务消耗的时间,通过cr-ss,可以计算出响应请求消耗的时间。
  在Zipkin中如何自定义一个Annotations?下面是一个简单的案例:

@Service
public class MyService {

    @Autowired
    private Tracer tracer;

    public void myMethod() {
        // 获取 Span,并开始一个新的 Span
        Span span = tracer.nextSpan().name("myMethod").start();

        try {
            // 添加自定义 Annotation
            span.annotate("Starting processing"); // 自定义开始处理的注解

            // 模拟处理逻辑
            processBusinessLogic();

            span.annotate("Processing completed"); // 自定义处理完成的注解
        } catch (Exception e) {
            span.error(e); // 记录异常
        } finally {
            span.finish(); // 结束 Span
        }
    }

    private void processBusinessLogic() {
        // 业务处理逻辑
    }
}

2、项目配置

  在docker或本地安装Zipkin服务器,实现页面可视化监控

docker run -d -p 9411:9411 openzipkin/zipkin

  引入依赖:

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

  配置文件中添加:

logging.level.org.springframework.cloud.openfeign: debug
logging.level.org.springframework.cloud.sleuth: debug
spring.zipkin.base-url= http://自己的虚拟机地址:9411/
#不将zipkin自身进行注册
spring.zipkin.discovery-client-enabled=false
spring.zipkin.sender.type=web
#抽样统计因子,1为全部统计
spring.sleuth.sampler.probability=1

3、整合案例

  整合完成后重启项目,执行业务,登录控制台页面,即可查看对应业务调用的链路信息,包括开始时间,结束时间,远程调用,异步调用信息,都会有所体现。
在这里插入图片描述

下一篇:k8s

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

25国考照片处理器使用流程图解❗

1、打开“国家公务员局”网站&#xff0c;进入2025公务员专题&#xff0c;找到考生考务入口 2、点击下载地址 3、这几个下载链接都可以 4、下载压缩包 5、解压后先看“使用说明”&#xff0c;再找到“照片处理工具”双击。 6、双击后会进入这样的界面&#xff0c;点击&…

UE5.4 PCG Layered Biomes插件

B站学习链接 官方文档 一、PCGSpawn Preset&#xff1a;负责管理PCG要用到的植被资产有哪些 二、BiomesSettings&#xff1a;设置要使用的植被资产Layer、Spawn参数 1.高度Layer参数&#xff1a; 2.地形Layer&#xff1a;我这里用地形样条线绘制了一块地形Layer 绘制点和…

vrrp和mstp,vrrp和byd

vrrp和mstp 思路 vrrp是用来虚拟网关&#xff0c;噢&#xff0c;是虚拟一条虚拟网关 优先级&#xff0c;priority越大越优先&#xff0c;优先级相同&#xff0c;哪个的路由器的vrrp先起来&#xff0c;谁就是主 mstp是快速生成树协议&#xff0c;防止环路用的 优先级越小越优…

pycharm设定代码模板

1、在文件点击设置 ​​​​​​​ ​​​​​​​ 2、点击编辑器--实时模板--找到需要插入模板的位置如我要插入HTML的模板---选择--点击实时模板 3、如图&#xff1a; 4、添加模板内容&#xff0c;如果模板有变量可以在编辑变量处点击编辑 5、编辑变量 6、点…

什么是红客?红客入门基础(非常详细)零基础入门到精通,收藏这篇就够了

什么是红客&#xff1a; 提到红客&#xff0c;我们不得不想到2001年中美黑客大战&#xff0c;红客联盟等这些词汇。曾几何时这个群体给尚且稚嫩的国内安全环境带来了一枚种子&#xff0c;从此网络安全在这片土地开始发芽。不知道有多少人是受到红客的影响走上了安全这条路&…

从新手到专家:7款电脑平面设计软件评测

平面设计在时尚、广告等多个领域扮演着重要角色&#xff0c;而创作出独特且富有创意的设计作品则需要依赖优秀的电脑平面设计软件。市场上的电脑平面设计软件众多&#xff0c;每款软件都有其独到之处。本文将为你推荐几款值得关注的电脑平面设计软件&#xff0c;并分析它们的特…

文献翻译如何一键完成?推荐2024年11款翻译软件

学英语的时候&#xff0c;好多人都觉得语法太复杂&#xff0c;单词太多记不住。不过&#xff0c;现在科技这么发达&#xff0c;有很多在线的中英文翻译工具&#xff0c;就像我们学外语的好帮手&#xff0c;帮我们轻松搞定语言问题&#xff0c;让我们在中文和英文之间自由切换。…

Grafana+Prometheus监控篇-Nginx

一、监控exporter安装 ①、下载地址 nginx-exporter 这里是Windows下监控&#xff0c;选择amd64. ②、nginx-exporter配置 打开nginx的配置文件nginx.conf,启用nginx的基本状态. server {listen 8088;location /status {stub_status;allow 127.0.0.1; deny all;}} ③…

乐维网管平台(四):配置化数据报表的应用

在网络管理中&#xff0c;报表功能是一项非常重要的功能&#xff0c;它通过统计与分析各种类型数据&#xff0c;为网络管理员决策提供数据支撑。 一、配置化数据报表概述 基于不同行业、不同客户、不同应用场景&#xff0c;乐维网管平台提供了配置化报表功能。配置化数据报表…

气动紧急切断阀技术规范

气动紧急切断阀作为一种重要的工业自动化控制装置&#xff0c;广泛应用于流体管道系统中&#xff0c;其主要功能是迅速切断或调节管道中的流体介质&#xff0c;以确保系统在紧急情况下的安全。本文将详细介绍气动紧急切断阀的技术规范&#xff0c;包括其结构特点、性能要求、应…

vscode makfile编译c程序

编译工具安装 为了在 Windows 上安装 GCC&#xff0c;您需要安装 MinGW-w64。 MinGW-w64 是一个开源项目&#xff0c;它为 Windows 系统提供了一个完整的 GCC 工具链&#xff0c;支持编译生成 32 位和 64 位的 Windows 应用程序。 1. 下载MinGW-w64源代码&#xff0c;如图点…

AI助手崛起:改变你生活的智能伴侣!

内容概要 在这个智能时代&#xff0c;AI助手如同隐形的超级英雄&#xff0c;默默地改变着我们的生活。它们并不是典型的“机器人”&#xff0c;而是我们生活中的得力助手&#xff0c;帮助我们优化时间、提供个性化建议、增加便利性。无论你是在寻找餐厅、安排日程&#xff0c;…

CNN-Attention分类预测 | Matlab实现多特征分类预测

CNN-Attention分类预测 | Matlab实现多特征分类预测 目录 CNN-Attention分类预测 | Matlab实现多特征分类预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现CNN-Attention卷积神经网络融合注意力机制多特征分类预测&#xff0c;运行环境Matlab2023b及以上…

博客系统(SpringBoot项目)

文章目录 一、项目开发的流程二、项目开发2.1 准备工作2.2 开发公共模块&#xff1a;把能写的先写了什么是公共模块model层mapper层定义统一返回结果统一异常处理 2.2 博客列表页2.3 更改显示的时间2.4 博客详情页2.5 登录Session式登录方法分析使用Token来实现登录 2.6 强制登…

普林斯顿微积分读本PDF(英文版原版)

普林斯顿微积分读本PDF英文版: https://caiyun.139.com/m/i?005Chb93yVHtQ 对于大多数学生来说&#xff0c;微积分或许是他们曾经上过的倍感迷茫且最受挫折的一门课程了. 而《普林斯顿微积分读本》 不仅让学生能有效地学习微积分&#xff0c;更重要的是提供了战胜微积分的必备…

OpenCV视觉分析之目标跟踪(8)目标跟踪函数CamShift()使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 找到物体的中心、大小和方向。 CamShift&#xff08;Continuously Adaptive Mean Shift&#xff09;是 OpenCV 中的一种目标跟踪算法&#xff0…

【开源免费】基于SpringBoot+Vue.J服装商城系统(JAVA毕业设计)

本文项目编号 T 046 &#xff0c;文末自助获取源码 \color{red}{T046&#xff0c;文末自助获取源码} T046&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 新…

叉车智能管理系统,简化现场管理!

一、叉车智能管理系统概述 叉车智能管理系统是一种集成了现代物联网、大数据、云计算等先进技术的综合性管理平台。它通过对叉车运行状态的实时监控和数据分析&#xff0c;实现了对叉车作业的高效调度和智能化管理&#xff0c;极大地提升了企业的现场作业效率和管理水平。 二…

【MySQL】 穿透学习数据库理论与知识剖析

前言&#xff1a;本节内容讲述一些数据库的基本概念。 第一个部分就是数据库相关的概念&#xff0c; 比如什么是数据库&#xff0c; 如何理解mysqld以及mysql。第二部分理解数据库和表在系统层面的形式。 第三部分就是mysql的一些操作分类。 第四部分就是数据库的插件配置这些。…

Mysql常用语法一篇文章速成

文章目录 前言前置环境数据库的增删改查查询数据查询所有条件查询多条件查询模糊查询分页查询排序查询分组查询⭐️⭐️关联查询关联分页查询 添加数据insert插入多条记录不指定列名(适用于所有列都有值的情况) 更新数据更新多条记录更新多个列更新不满足条件的记录 删除统计数…