在HubSpot是如何应对Fat JAR困境的

HubSpot通过SlimFast插件解决了因频繁构建和部署FatJAR带来的效率和存储问题,构建时间减少了60%,存储容量提高了99%。该插件只打包指定项目的类,并将依赖项上传至Amazon S3。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在七月底,Spring Boot和Dropwizard分别发布了1.4和1.0版本,它们都是基于Fat JAR的。随着人们更多地采用这些框架和微服务架构,Fat JAR成为了通用的部署机制。

\\

Fat JAR技术会将Java应用的所有依赖打包到一个bundle之中,便于执行,这种方式用到了很多的Java微服务框架之中,包括Spring Boot和Dropwizard,甚至还有一个专门的Fat JAR Eclipse插件

\\

对于具有少量微服务的组织来说,Fat JAR所占用的带宽可能并不那么明显。但是,如果你有上千个微服务的话,那么它们所使用的带宽就会成为一个问题了。

\\

在今年夏天的早些时候,HubSpot曾经提到过借助maven-shade-plugin进行Fat JAR部署所遇到的问题,并介绍了他们将100,000个小文件打包到一个JAR中所遇到的性能问题。他们还提到,1,000个以上的应用进行持续不断地构建和部署,会产生大量重复的JAR依赖。

\\

他们曾经尝试使用maven-dependency-plugin来减缓这种快速膨胀,但是他们的努力并没有减少所生成的构建工件(artifact)的大小。

\\

为了解决Fat JAR所带来的痛苦,HubSpot创建了用于Maven的SlimFast插件,它所创建的构建工件只会包含指定项目的类。它会依附到部署阶段上,并将应用的所有依赖分别上传到Amazon Simple Storage Service(S3)之中。通过使用这个插件,HubSpot的报告显示,构建时间快了60%,并且可用的存储容量增加了99%。

\\

下图展现了使用SlimFast之后,所带来的构建速度提升:

\\

18d9ac6363c94abae534b067a93742c6.png

\\

为了更深入地了解HubSpot所面临的Fat JAR问题,InfoQ采访了他们的软件工程师Jonathan Haber。

\\

InfoQ:你们所遇到的Fat JAR问题大部分都是由持续集成和部署引起的吗?

\\
\

Jonathan Haber:是的,我认为我们所遇到的问题很大程度上都是由我们的开发风格所导致的。我们有很多小团队,他们都在推送代码、构建和部署,这样的活动每天都有上百次。因为我们的构建单元很小,所以创建和上传Fat JAR所消耗的时间有时比编译和测试代码的时间还长。话说回来,如果你采用单体结构的话,构建所需的时间可能会超过20分钟,那么相对来讲Fat JAR的消耗就没有那么明显。但是,我认为有更多的公司在转向这种更快、更轻量级的部署风格,因此可能会面临同样的挑战。

\
\\

InfoQ:你认为像SlimFast这样的替代性打包技术是否应该作为框架的原生方案,比如添加到Spring Boot和Dropwizard中?

\\
\

Haber:因为这种方式需要与构建和部署系统集成,我的感觉是如果将其包含在Spring Boot或Dropwizard中的话,那就太带有倾向性了。但是,有一种处理方式就是将SlimFast插件放到一个Maven profile之中,通过环境变量来激活。通过这种方式,构建系统能够表明它支持这个特性,否则的话,依然将会采用Fat JAR的方式。

\
\\

InfoQ:如果云提供商(如Heroku、CloudFoundry等)采用类似的技术来减少应用之间重复的JAR,那么他们在带宽方面是不是可以节省很多钱?

\\
\

Haber:我并不确定能够节省到什么程度,但是我认为采用类似的策略是可行的。不过,我们的优势在于所有的应用都使用了相同版本的第三方库,所使用的库有大量的重叠。对于云提供商来说,他们的用户所依赖的库会广泛得多,会跨所有的不同版本,所以如果你想在应用服务器上缓存依赖的话,会需要大量的空间。但是,如果你不这样的话,速度/带宽方面的大量节省就会不复存在。这并不是说,完全没有节省,我只是认为他们的实现会比我们的方式更加复杂。另外一个问题在于,这些云提供商通常只会基于用户的POM来运行Maven,所以他们对于构建生命周期并没有太多的控制权,无法添加这种类型的优化。

\
\\

InfoQ:在Fat JAR应用方面,你希望看到有哪些改善呢?

\\
\

Haber:如果Java能够处理嵌套JAR的话,那么构建和运行Fat JAR都会容易很多,我并不确定这一点是否会包含在Java 9的功能列表中。像Spring Boot和One-JAR这样的工具都能很好地解决这种局限性,但是他们增加了复杂性并且无法做到完全的透明。

\
\\

查看英文原文:Solving Fat JAR Woes at HubSpot

内容概要:本文详细探讨了基于阻尼连续可调减振器(CDC)的半主动悬架系统的控制策略。首先建立了CDC减振器的动力学模型,验证了其阻尼特性,并通过实验确认了模型的准确性。接着,搭建了1/4车辆悬架模型,分析了不同阻尼系数对悬架性能的影响。随后,引入了PID、自适应模糊PID和模糊-PID并联三种控制策略,通过仿真比较它们的性能提升效果。研究表明,模糊-PID并联控制能最优地提升悬架综合性能,在平顺性和稳定性间取得最佳平衡。此外,还深入分析了CDC减振器的特性,优化了控制策略,并进行了系统级验证。 适用人群:从事汽车工程、机械工程及相关领域的研究人员和技术人员,尤其是对车辆悬架系统和控制策略感兴趣的读者。 使用场景及目标:①适用于研究和开发基于CDC减振器的半主动悬架系统的工程师;②帮助理解不同控制策略(如PID、模糊PID、模糊-PID并联)在悬架系统中的应用及其性能差异;③为优化车辆行驶舒适性和稳定性提供理论依据和技术支持。 其他说明:本文不仅提供了详细的数学模型和仿真代码,还通过实验数据验证了模型的准确性。对于希望深入了解CDC减振器工作原理及其控制策略的读者来说,本文是一份极具价值的参考资料。同时,文中还介绍了多种控制策略的具体实现方法及其优缺点,为后续的研究和实际应用提供了有益的借鉴。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值