全链路压测专题---3、全链路压测具体实现

news/2025/3/16 23:25:47/

流量染色

流量识别

要想压测的流量和数据不影响线上真实的生产数据,就需要线上的集群能识别出压测的流量,只要能识别出压测请求的流量,那么流量触发的读写操作就很好统一去做隔离了。

全链路压测发起的都是Http的请求,只需要要请求头上添加统一的压测请求头。

通过在请求协议中添加压测请求的标识,在不同服务的相互调用时,一路透传下去,这样每一个服 务都能识别出压测的请求流量,这样做的好处是与业务完全的解耦,只需要应用框架进行感知,对业务方代码无侵入。
在这里插入图片描述

MVC接收数据

客户端传递过来的数据可以通过获取Header的方式获取到,并将其设置进当前的ThreadLocal,交 给后面的方法使用。

Tomcat线程复用问题

tomcat默认使用线程池来管理线程,一个请求过来,如果线程池里面有空闲的线程,那么会在线程 池里面取一个线程来处理该请求,一旦该线程当前在处理请求,其他请求就不会被分配到该线程上,直 到该请求处理完成。请求处理完成后,会将该线程重新加入线程池,因为是通过线程池复用线程,就会 如果线程内部的ThreadLocal没有清除就会出现问题,需要新的请求进来的时候,清除ThreadLocal。

Fegin传递传递染色标识

微服务项目是使用Fegin来实现远程调用的,跨微服务传递染色标识是通过MVC拦截器获取到 请求Header的染色标识,并放进ThreadLocal中,然后交给Fegin拦截器在发送请求之前从ThreadLocal 中获取到染色标识,并放进Fegin构建请求的Header中,实现微服务之间的火炬传递。
在这里插入图片描述

Hystrix传递染色标识

Hystrix隔离技术

Hystrix 实现资源隔离,主要有两种技术:

信号量

信号量的资源隔离只是起到一个开关的作用,比如,服务 A 的信号量大小为 10,那么就是说它同时只允许有 10 个 tomcat 线程来访问服务 A,其它的请求都会被拒绝,从而达到资源隔离和限流保护的作用。

线程池

线程池隔离技术,是用 Hystrix 自己的线程去执行调用;而信号量隔离技术,是直接让 tomcat 线 程去调用依赖服务。信号量隔离,只是一道关卡,信号量有多少,就允许多少个 tomcat 线程通过它, 然后去执行。

在这里插入图片描述

Hystrix穿透

如果使用线程池模式,那么存在一个ThreadLocal变量跨线程传递的问题,即在主线程的 ThreadLocal变量,无法在线程池中使用,不过Hystrix内部提供了解决方案。
在这里插入图片描述

数据隔离方案

JDBC数据源隔离

在这里插入图片描述
通过实现Spring动态数据源 AbstractRoutingDataSource,通过 ThreadLocal识别出来压测数据, 如果是压测数据就路由到影子库,如果是正常流量则路由到主库,通过流量识别的改造,各个服务都已 经能够识别出压测的请求流量了。

Redis数据源隔离

同时通过ThreadLocal识别出来压测数据,自定义Redis的主键的序列化方式,如果是压测数据则在主键后面加上后缀,这样就可以通过不同主键将Redis数据进行隔离。

RabbitMQ 数据隔离

在这里插入图片描述

自动创建影子队列

因为SpringAMQP中的RabbitListenerAnnotationBeanPostProcessor中的关键方法是私有的,无法通过继承的方式进行实现对以配置好的队列进行扩展,所以需要自定义该类,来实现对自动创建影子队列,并和交换器进行绑定
在这里插入图片描述

接口隔离方法

Mock 第三方接口

对于第三方数据接口需要进行隔离,比如短信接口,正常的数据需要发送短信,对于压测数据则不能直接调用接口发送短信,并且需要能够识别出来压测数据,并进行MOCK接口调用。
在这里插入图片描述

零侵入方案

如果开发的中间件需要各个微服务大量改造,对开发人员来说就是一个灾难,所以这里采用零侵入的springboot starter 来解决

自动装配

使用微服务得@Conditional来完成配置得自动装配,这里用MVC得配置来演示自动装配,其他得都是类似
这样可以最大限度的优化代码并提高很高的可扩展性。

SpringBoot starter

和自动装配一样,Spring Boot Starter的目的也是简化配置,而Spring Boot Starter解决的是依赖管理配置复杂的问题,有了它,当我需要构建一个Web应用程序时,不必再遍历所有的依赖包,一个一个地添加到项目的依赖管理中,而是只需要一个配置spring-boot-starter-web。

服务监控

skywalking简介

Skywalking 是一个APM系统,即应用性能监控系统,为微服务架构和云原生架构系统设计。它通过探针自动收集所需的指标,并进行分布式追踪。通过这些调用链路以及指标,Skywalking APM会感知应用间关系和服务间关系,并进行相应的指标统计。目前支持链路追踪和监控应用组件如下,基本涵盖主流框架和容器,如国产PRC Dubbo和motan等,国际化的spring boot,spring cloud都支持了 SkyWalking是分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8S、Mesos)架构而设计 SkyWalking是观察性分析平台和应用性能管理系统。提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案

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

相关文章

QTday06(人脸识别项目前置知识)

qt版本5.4.0:旧版本的qt,为啥要用旧版本的我也不知道 实现结果: 调用系统摄像头,用红框框住画面中的人头 代码: pro: #------------------------------------------------- # # Project created by QtC…

点云从入门到精通技术详解100篇-双目鱼眼系统的畸变校正及目标重建(续)

目录 3.3双目鱼眼系统标定 3.4基于光束平差法的标定结果优化 3.5标定实验结果与分析

vscode代码快捷输入

Vscode代码片段快捷输入 常用的代码片段为了避免重复输入,可以使用Vsco的中用户代码片段进行设置,这样就可以实现快捷输入. 操作流程 如下 打开vscode的设置 2. 找到用户代码片段 3. 选择模板 4. 然后写入代码片段即可 上面的代码片段可以设置多个,看自己 重点关注的是 prefi…

spacy.load(“en_core_web_trf“)报错TypeError: issubclass() arg 1 must be a class

使用spacy时遇到的问题 写在最前面: 安装spacy和en_core_web_trf时需要保证二者版本一致 安装及查看对应spacy版本 安装 pip install spacy查看版本 import spacy spacy.__version__安装en_core_web_trf 直接安装(如果可以的话) pytho…

Nacos 下载运行及配置

Nacos 服务注册与配置中心,兼顾两者 文章目录 Nacos 服务注册与配置中心,兼顾两者一、简介二、相关文档2.1 Nacos官网2.2 官方文档 三、下载并运行Nacos3.1 下载压缩包3.2 解压缩3.3 运行命令3.4 访问Nacos控制台 附录:各种注册中心比较 Naco…

Java对象类型的转换+instanceOf判断对象类型

1.对象类型的转换 将子类的实例对象定义为父类类型,这种称为向上转型;将父类的实例对象定义为子类类型,这种称为向下转型,向下转型必须使用显示转换,否则编译器会报错。 1.1 向上转型 package classExtends;class Q…

关于A level真题的获取(持续更新中)

Edexcel考试局 Past papers | Past exam papers | Pearson qualifications 官方说明如下: For Teachers Question papers, mark schemes and examiner reports for the most recent exam sessions (within the last 12 months) can be accessed only by registe…

轻松学习Python:基础知识汇总

轻松学习Python:基础知识汇总 目录 轻松学习Python:基础知识汇总 本文章向大家介绍轻松学习Python:基础知识汇总,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。 Python基础01 Hello World! Python命…