作者 | 周忠太 阿里巴巴淘系技术部的一个搬砖工
【Arthas 官网社区正在举办征文活动,加入即有奖品拿~ 点击投稿】
Arthas Hot Swap 插件介绍
引言
热部署是帮忙开发人员提高效率的利器,如果你的开发语言是 java,开发环境是近程服务器,近程服务器 debug 端口被限度,那么你可能无奈通过 debug HotSwap 实现热部署,那么本文介绍的 IntelliJ IDEA 插件能够帮忙你在近程服务器实现热部署,而且操作简略快捷。
本文热部署插件 (Arthas Hot Swap) 是基于 Arthas redefine 命令实现的,应用该插件进行近程热部署无需任何配置,无需应用 debug 端口,只需几个简略动作就能实现。gitHub 地址:https://github.com/xxxtai/arthas-hotswap
应用办法
- IntelliJ IDEA 装置插件“Arthas Hot Swap”,从 gitHub Releases 下载安装包;
- 热部署应用的是 class 文件,所以须要先应用“mvn compile”编译相干工程,后续能够应用 IDEA 的 Recompile 编译单个文件,节俭编译工夫;
- 抉择须要热部署的 java 源文件或者 class 文件,在类名或办法名上单击右键,抉择“Arthas Hot Swap”的“Swap this class”,插件后盾执行胜利后会把热部署须要的命令复制到粘贴板;
- 登录近程服务器,粘贴热部署命令并执行,热部署实现,该机器运行着最新的 class。机器第一次执行热部署命令,可能失败,再执行一次试下。
第一步:抉择 Arthas Hot Swap 插件选项
第二步:登录近程服务器粘贴命令并执行
第三步:执行实现,热部署胜利
热部署的限度
因为是基于 Arthas 的 redefine 命令实现的热部署,redefine 又是基于 Instrumentation API 实现的热部署,所以和 IDEA 的 debug HotSwap 是有一样的限度。限度如下:无奈批改类名、办法名,无奈批改类属性名称,无奈新增类属性,无奈新增非静态方法。因为本插件临时无奈获取外部类的 class 文件,所以临时不反对批改外部类。
Arthas Hot Swap 插件原理
Arthas 是阿里巴巴开源的 Java 代码诊断工具。Arthas 的 redefine 命令是基于 Instrumentation API 实现的热部署,因而和 HotSwap 热部署形式一样,有同样的限度。Arthas 的 redefine 命令其实是把 Instrumentation API 的 redefineClasses 办法包装后提供给用户,那么咱们就能够依据 redefine 命令施展想象力,实现热部署。
Arthas 官网文档举荐应用 jad/mc/redefine 等一连串命令实现 class 近程热替换,流程大略是:jad 命令对老 class 进行反编译 ->vim 编辑源码 ->mc 命令编译源码 ->redefine 热替换 class。这种形式存在两个问题:一是太麻烦,二是 mc 编译大概率会失败。如果能这样就好,本地批改代码编译后上传 class 文件到近程服务器,再应用 redefine 命令热替换 class。因而官网文档又举荐,首先将 class 二进制文件转换成 base64 编码,而后再复制粘贴到近程服务器,再把 base64 编码转换成 class 文件,最初,应用 redefine 进行热替换。这么麻烦,还不如重新部署呢。所以 redefine 命令比拟鸡肋。
Arthas 官网举荐的热替换办法最大的问题在于,上传 class 文件到近程服务器进行热替换的流程太麻烦,那么这些麻烦且固定的流程为何不交给机器来做呢。所以,本文举荐的“Arthas Hot Swap”插件就有必要了,该插件就是为了晋升应用 Arthas 进行热替换的效率,几个简略的动作就能热替换一个 class 文件,能够解决开发过程中 80% 的热部署需要,剩下的 20% 用重新部署解决就好了。
Arthas Hot Swap 插件执行流程
- 依据用户抉择的源文件找到 class 文件,默认在 /target/classes 门路上面查找,用户也能够间接抉择 class 文件;
- 应用 AES-128 加密 class 文件,输入 base64 编码;
- 加密的 class 文件上传至 oss,返回 oss 拜访地址;
- 渲染热部署须要执行的脚本,渲染后的脚本也上传至 oss,返回 oss 拜访地址;
- 组装热部署命令,并主动复制到粘贴板。
近程服务端热部署执行流程
- 登录近程服务器,粘贴热部署命令并执行;
- 下载热部署脚本,执行热部署脚本;
- 创立工作空间;
- 查看是否装置 openssl,没有装置则进行装置;
- 下载 AES-128 加密的 class 文件;
- 应用 openssl enc 解密失去 class 二进制文件;
- 通过脚本形式装置 arthas;
- 创立与 arthas 通信的管道并启动 arthas;
- arthas 抉择 java 过程,默认抉择第一个;
- arthas 执行 redefine 命令热替换 class 文件;
- 打印热替换后果。
Arthas 征文活动炽热进行中
Arthas 官网正在举办征文活动,如果你有:
- 应用 Arthas 排查过的问题
- 对 Arthas 进行源码解读
- 对 Arthas 提出倡议
- 不限,其它与 Arthas 无关的内容
欢送加入征文活动,还有奖品拿哦~ 点击投稿
“阿里巴巴云原生关注微服务、Serverless、容器、Service Mesh 等技术畛域、聚焦云原生风行技术趋势、云原生大规模的落地实际,做最懂云原生开发者的公众号。”