LinkAgent(https://github.com/shulieTech/LinkAgent)是数列科技的一个基于Java的开源agent,通过字节码增强,实现对Java应用程序的数据收集和逻辑控制, 是全链路压测的一部分,同时开源的还有控制台(Takin-web)部分,对于压力构造部分还未开源。
全链路压测中一个重要的问题是如何区分是否是压测流量,以及如何处理压测数据。
关于第一个问题,一般在构造压测请求时,会在HTTP的Head部分写入压测标识,对于Dubbo等也是相同原理, 程序根据这个标识判断是否是压测流量。
关于第二个问题,对于压测数据,可以带上压测标识写入业务表。也可以写入影子表, 无论怎样都需要对代码进行修改。
LinkAgent采用了Java字节码增强技术,通过javaagent完成对中间件的修改,根据压测标识,写入影子库或者影子表。
例如:
我们在压测注册接口时,会写入一些数据,假如我们使用的Druid连接池, LinkAgent会对com.alibaba.druid.pool.DruidDataSource类的getConnection方法进行增强,根据是否是压测流量来返回 原始业务库连接 或者 影子库连接。这样业务数据就会和压测数据区分开。 不会造成污染。