数列科技开源全链路压测平台Takin-总结

1,519 阅读1分钟

全链路压测基本思路

基本就是先染色,然后分发到对应的影子表,影子缓存,然后进行上报数据统计

Takin细节点

全链路保存一些标识

比如说标识下这些数据是测试数据,然后在全链路进行传递,这个在阿里开源全链路追踪日志框架SofaTrace的实现。

上代码 com.pamirs.attach.plugin.shadowjob.obj.quartz.PtJob 在这里插入图片描述 比如说job的重写,在执行前会写入一些参数。

PradarInternalService.startTrace 在这里插入图片描述 会把一些traceId,唯一id set到上下文context里面

InvokeContext.set(ctx);

static private final TransmittableThreadLocal<InvokeContext> threadLocal
            = new TransmittableThreadLocal<InvokeContext>();

关键代码出现TransmittableThreadLocal

拦截器实现数据埋点上报

这个功能可以应对rpc,或者服务请求的参数上报

com.pamirs.pradar.interceptor.BaseInterceptor

在这里插入图片描述 在这里插入图片描述 把相关traceId跟RpcId,还有日志类型塞进去。

在这里插入图片描述 把日志往queue里面塞,然后通过线程poll出来进行上报 在这里插入图片描述

MQ改写topic

在这里插入图片描述 这个小生不才,看不太懂在哪里增强了,理解为可以根据agent去增强类的相关方法。

com.pamirs.attach.plugin.alibaba.rocketmq.interceptor.MQProducerSendInterceptor 在这里插入图片描述 这里进行改下topic

改写jdbc

com.pamirs.attach.plugin.apache.tomcatjdbc.interceptor.TomcatJdbcDataSourceProxyGetConnectionInterceptor 在这里插入图片描述 也是去增强类的方法,然后拿到影子库的connection

redis影子缓存

com.pamirs.attach.plugin.common.datasource.redisserver.AbstractRedisServerFactory#getClient

在这里插入图片描述

重写JedisFactory 在这里插入图片描述 以及redission,重写config方法