全链路压测专题---3、全链路压测具体实现-灵析社区

摸鱼校尉

流量染色

流量识别

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

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

MVC接收数据

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

Tomcat 线程复用问题

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

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是观察性分析平台和应用性能管理系统。提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。

阅读量:2068

点赞量:0

收藏量:0