没有合适的资源?快使用搜索试试~ 我知道了~
美团IDEA插件实现Java应用的热部署实践
需积分: 5 2 下载量 120 浏览量
2022-12-13
15:39:06
上传
评论
收藏 7.84MB PDF 举报
温馨提示
试读
27页
美团IDEA插件实现Java应用的热部署实践
资源推荐
资源详情
资源评论
Sonic是美团内部研发设计的一款用于热部署的IDEA插件,本文其实现原理及落地的一些技术细
节。在阅读本文之前,建议大家先熟悉一下 、 、 Spring源码 Spring MVC 源码 Spring Boot源码
、 、 、 等相关知识。Agent字节码增强 Javassist Classloader
1 前言
1.1 什么是热部署
所谓热部署,就是在应用正在运行时升级软件,却不需要重新启动应用。对于Java应用程序来
说,热部署就是在运行时更新Java类文件,同时触发Spring以及其他常用第三方框架的一系列重
新加载的过程。在这个过程中不需要重新启动,并且修改的代码实时生效,好比是战斗机在空中
完成加油,不需要战斗机熄火降落,一系列操作都在“运行”状态来完成。
1.2 为什么我们需要热部署
据了解,美团内部很多工程师每天本地重启服务高达5~12次,单次大概3~8分钟,每天向Cargo
(美团内部测试环境管理工具)部署3~5次,单次时长20~45分钟,部署频繁频次高、耗时长,严
重影响了系统上线的效率。而插件提供的本地和远程热部署功能,可让将代码变更“秒级”生
效。一般而言,开发者日常工作主要分为开发自测和联调两个场景,下面将分别介绍热部署在每
个场景中发挥的作用。
图 1
1.2.1 开发自测场景
一般来讲,在用插件之前,开发者修改完代码还需等待3~8分钟启动时间,然后手动构造请求或协
调上游发请求,耗时且费力。在使用完热部署插件后,修改完代码可以一键增量部署,让变更
“秒级”生效,能够做到快速自测。而对于那些无法本地启动项目,也可以通过远程热部署功能
使代码变更“秒级”生效。
图 2
1.2.2 联调场景
通常情况下,在使用插件之前,开发者修改代码经过20~35分钟的漫长部署,需要联系上游联调开
发者发起请求,一直要等到远程服务器查看日志,才能确认代码生效。在使用热部署插件之后,
开发者修改代码远程热部署能够秒级(2~10s)生效,开发者直接发起服务调用,可以节省大量的
碎片化时间(热部署插件还具备流量回放、远程调用、远程反编译等功能,可配合进行使用)。
图 3
所以,热部署插件希望解决的痛点是:在可控的条件内,帮助开发者减少频繁编译部署的次数,
。节省碎片化的时间。最终为开发者每天节约出一定量的编码时间
1.3 热部署难在哪
为什么业界目前没有好用的开源工具?因为热部署不等同于热重启,像Tomcat或者Spring Boot
DevTools此类热重启模式需要重新加载项目,性能较差。增量热部署难度较大,需要兼容常用的
中间件版本,需要深入启动销毁加载流程。以美团为例,我们需要对JPDA(Java Platform
Debugger Architecture)、Java Agent、ASM字节码增强、Classloader、Spring框架、Spring
Boot框架、MyBatis框架、Mtthrift(美团RPC框架)、Zebra(美团持久层框架)、Pigeon(美团
RPC框架),MDP(美团快速开发框架)、XFrame(美团快速开发脚手架)、Crane(美团分布式任
务调度框架)等众多框架和技术原理深入了解才能做到全面的兼容和支持。另外,还需要IDEA插
件开发能力,形成整体的产品解决方案闭环,美团的热部署插件Sonic正是在这种背景下应运而
生。
图 4
1.4 Sonic可以做什么
Sonic是美团内部研发设计的一款IDEA插件,旨在通过低代码开发辅助远程/本地热部署,解决
Coding、单测编写执行、自测联调等阶段的效率问题,提高开发者的编码产出效率。数据统计表
明,开发者日常大概有35%时间用于编码的产出。如果想提高研发效率,要么扩大编码产出的时间
占比,要么提高编码阶段的产出效率,而Sonic则聚焦提高编码阶段的产出效率。
目前,使用Sonic热部署可以解决大部分代码重复构建的问题。Sonic可以使用户在本地编写代码
一键部署到远程环境,修改代码、部署、联调请求、查看日志,循环反复。如果不考虑代码修改
时间,通常一个循环需要20~35分钟,而使用Sonic可以把整个时长缩短至5~10秒,而且能够给开
发者带来高效沉浸式的开发体验。在实际编码工作中,多文件修改是家常便饭,Sonic对多文件的
热部署能力尤为突出,它可以通过依赖分析等手段来对多文件批量进行远程热部署,并且支持
Spring Bean Class、普通Class、Spring XML、MyBatis XML等多类型文件混合热部署。
那么跟业界现有的产品相比,Sonic有哪些优劣势呢?下面我们尝试给出几种产品的对比,仅供大
家参考:
特性 JRebel
Spring Boot
DevTools
IDEA热加
载
Tomcat热
加载
Spring
Loader
Sonic
远程Debug
基于Debug协议
修改
修改方法体内容 效率低 效率低
新增方法体 效率低 效率低
Jar包变更 效率低 效率低
Spring MVC 效率低 效率低
多文件热部署 效率低 效率低
新增泛型方法 效率低 效率低
新增非静态字段 效率低 效率低
新增静态字段 效率低 效率低
新增修改继承类 效率低 效率低
新增修改接口方
法
效率低 效率低
新增修改匿名内
部类
效率低 效率低
增加修改静态块 效率低 效率低
FastJson 效率低 效率低
Cglib 效率低 效率低
MyBatis
Annotation
效率低 效率低
MyBatis XML 效率低 效率低
Gson 效率低 效率低
Jackson 效率低 效率低
Jdk代理 效率低 效率低
Log4j 效率低 效率低
Slf4J 效率低 效率低
Logback 效率低 效率低
Spring Tx 效率低 效率低
Spring 新增Xml 效率低 效率低
Spring Bean 效率低 效率低
Spring Boot 效率低 效率低
Spring
Validator
效率低 效率低
远程热部署 配置繁琐
IDEA插件集成
上表未把Sofa-Ark、Osgi、Arthas列举,此类属于插件化、模块化应用框架,以及Java在线诊断
工具,核心能力非热部署。值得注意的是,Spring Boot DevTools只能应用在Spring Boot项目
中,并且它不是增量热部署,而是通过Classloader迭代的方式重启项目,对大项目而言,性能上
是无法接受的。虽然,JRebel支持三方插件较多,生态庞大,但是对于国产的插件不支持,例如
FastJson等,同时它还存在远程热部署配置局限,对于公司内部的中间件需要个性化开发,并且
是商业软件,整体的使用成本较高。
1.5 Sonic远程热部署落地推广的实践经验
相信大家都知道,对于技术产品的推广,尤其是开发、测试阶段使用的产品,由于远离线上环
境,推动力、执行力、产品功能闭环能否做好,是决定着该产品是否能在企业内部落地并得到大
多数人认可的重要的一环。此外,因为很多开发者在开发、测试阶段已逐渐形成了“固化动
作”,如何改变这些用户的行为,让他们拥抱新产品,也是Sonic面临的艰巨挑战之一。我们从主
动沟通、零成本(或极低成本)快速接入、自动化脚本,以及产品自动诊断、收集反馈等方向出
发,践行出了四条原则。
图 6
2 整体设计方案
2.1 Sonic结构
Sonic插件由4大部分组成,包括脚本端、插件端、Agent端,以及Sonic服务端。脚本端负责自动
化构建Sonic启动参数、服务启动等集成工作;IDEA插件端集成环境为开发者提供更便捷的热部署
剩余26页未读,继续阅读
资源评论
北极象
- 粉丝: 1w+
- 资源: 345
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Surfer,线性函数
- MyBatis 的动态 SQL 是其核心特性之一.txt
- 时代的sdddsddsddsd
- 基于哈希链表的简单人员信息管理系统
- 其他类别JdonFramework开源框架 v5.1 Build20071025-jdonframework-5.1.rar
- 2001~2022年上市公司数字赋能指数.dta
- 2001~2022年上市公司数字赋能指数.xlsx
- 信息办公石大在线财务管理系统(含源码)-shidacaiwu.rar
- 信息办公电信计费系统完整代码-netctossconformity.rar
- matlab实现TD-SCDMA中初始同步捕捉DwPTS下行同步导频时隙的仿真.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功