写点什么

生产环境全链路压测建设历程 18:某快递 A 股上市公司的生产压测案例之中篇

发布于: 2020 年 12 月 24 日

在上一篇提到,淘宝网做生产环境全链路压测的一个核心方法是修改中间件来识别压测流量。

而对于D公司面临的难题是中间件不统一,也不可能为了做生产压测来改造近百个业务系统。

Java的字节码和JVM(Java 虚拟机)、以及Java Agent

Java语言的一个非常重要的特点就是与平台的无关性,而使用Java虚拟机是实现这一特点的关键。

基于字节码和Java虚拟机,Java语言能够达到“实现一次编译,到处运行”的效果。



Java Agent 技术

Java Agent是在JDK1.5以后,我们可以使用agent技术构建一个独立于应用程序的代理程序(即为Agent),用来协助监测、运行甚至替换其他JVM上的程序。使用它可以实现虚拟机级别的AOP功能。



Java Agent最后展示形式是一个jar包,具有以下特性

  • 可以在META-INF/MANIFEST.MF中指定Premain-Class设定agent启动类

  • 在agent启动类中写启动方法public static void premain(String agentArgs, Instrumentation inst){}

  • 不可直接运行,只能通过jvm参数-javaagent:xxx.jar附着于其他JVM进程运行





Java  Agent分为两种,一种是在主程序之前运行的Agent,一种是在主程序之后运行的Agent(前者的升级版,1.6以后提供)。



JDK 1.6 以后的Java agent ,能够支持以下的玩法。



1、JVM初始化并通过System ClassLoader加载 Agent类;创建Instrumentation接口实例并调用Agent的Premain方法,并自动传入Instrumentation实例;

2、Agent加载plugins插件,将其中的transformer类注册到Instrumentation实例中;

3、System ClassLoader加载其他的应用Java类,此时将调用注册的transformer方法对要加载的java类进行字节码转换;

4、 JVM将转换后的class放入方法区。



Java Agent 技术+全链路压测方案的组合创新玩法

正是有了Java的字节码、JVM(Java 虚拟机)、以及Java Agent的技术。再结合我们2013年在淘宝网做生产环境全链路压测的成熟套路,再加上和D公司的深入合作,以及D公司也有稳定性的痛点。 



结合了这些天时地利人和,我们开发了一个Java Agent,基于这个agent,D公司的近百套Java业务系统,都不需要做改造(除了安全验证的简单改造),就能完成压测流量的隔离。



这样的玩法,在我的认知里面(从公开资料来看),2018年,我们给D公司用这样的方式来做生产环境的全链路压测,应该是首家独创的玩法。 (内心独白:也算是世界第一家这么玩的)



因为不需要客户的系统做业务逻辑代码的改造,就能实现流量隔离,这样的方式能让客户以低成本就拥有生产环境稳定性的核武器。所以最后我们把国内的快递上市公司都合作了一把。



完整的原理图如下



发布于: 2020 年 12 月 24 日阅读数: 29
用户头像

还未添加个人签名 2017.12.21 加入

还未添加个人简介

评论

发布
暂无评论
生产环境全链路压测建设历程 18:某快递 A 股上市公司的生产压测案例之中篇