个人博客:👉进入博客,关注下博主,感谢~
🌈所有博客均在上面博客首发,其他平台同步更新
🏆大家一起进步,多多指教~
文章目录
全链路压测基本思路
基本就是先染色,然后分发到对应的影子表,影子缓存,然后进行上报数据统计
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方法