在HubSpot是如何應對Fat JAR困境的

在七月底,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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/542669.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/542669.shtml
英文地址,請注明出處:http://en.pswp.cn/news/542669.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

給定數字的b+樹創建_在C ++中找到給定數字中的兩個的下一個和上一個冪

給定數字的b樹創建Problem statement: 問題陳述: Find Next and previous power of two of a given number 查找給定數字中兩個的下一個和上一個冪 Next power of two 下一個二的冪 Example(1):input: 22output: 32 ( as 32 is 2^5)Example(2):input: 54output…

java 字節數組作用_這段java代碼中字節數組b起到了什么作用?

importjava.io.*;importjavax.swing.*;publicclassIOMonitor{publicstaticvoidmain(String[]temp){//TODO自動生成的方法存根byteb[]newbyte[2];try{FileInputStreamfisnewFileInput...import java.io.*;import javax.swing.*;public class IOMonitor {public static void main…

如何查看本地的崩潰log_過年回家,還怕搶不到票?程序員教你如何搶票

2019年接近尾聲,距離春節回家的日子越來越近,26日起,2020年除夕火車票正式開售,搶票大戰也進入白熱化階段。是否為某搶票 App 加速而煩惱,是否為車票“秒光而煩惱”。別慌,作為連“對象”都是 new 出來的程…

獲取列表中包含的元素數 在C#中

Given a list, and we have to count its total number of elements using List.Count property. 給定一個列表,我們必須使用List.Count屬性計算其元素總數 。 C#清單 (C# List) A list is used to represent the list of the objects, it is represent…

I00037 虧數(Deficient number)

數論中,若一個正整數除了本身之外所有因子之和比此數自身小,則稱此數為虧數。虧數(Deficient number)也稱為缺數,參見百度百科_虧數,或參見維基百科的Deficient number。虧數在OEIS中的數列號為A005100。 問…

hashmap轉紅黑樹的閾值為8_面試必考的 HashMap,這篇總結到位了

點擊藍色“JavaKeeper”關注我喲加個“星標”,一起成長,做牛逼閃閃的技術人1 概述HashMap是基于哈希表實現的,每一個元素是一個key-value對,其內部通過單鏈表解決沖突問題,容量不足(超過了閥值)時,同樣會自動增長.HashMap是非線程安全的,只適用于單線程環…

linux用戶組管理命令_Linux用戶和組命令能力問題和解答

linux用戶組管理命令This section contains Aptitude Questions and Answers on Linux User and Group Commands. 本節包含有關Linux用戶和組命令的 Aptitude問答。 1) Which of the following commands is used to create a new user in the Linux operating system? create…

Failed to start firewalld.service: Unit firewalld.service is masked.

2019獨角獸企業重金招聘Python工程師標準>>> FireWall in Centos 7 masked How to resolve the error message belowFailed to issue method call: Unit firewalld.service is masked. The main reason a service is masked is to prevent accidental starting or e…

mysql第二個索引_MySQL高級第二章——索引優化分析

一、SQL性能下降原因1.等待時間長?執行時間長?可能原因:查詢語句寫的不行索引失效(單值索引、復合索引)CREATE INDEX index_user_name ON user(name);(底層做了一個排序)CREATE INDEX index_user_nameEmail ON user(name,email);查詢關聯join…

遞歸反轉鏈表改變原鏈表嗎_在不使用遞歸的情況下找到鏈表的長度

遞歸反轉鏈表改變原鏈表嗎Solution: 解: Algorithm to find length 查找長度的算法 Input: 輸入: A singly linked list whose address of the first node is stored in a pointer, say head. 一個單鏈表 ,其第一個節點的地址存儲在指針(例…

西瓜仿站高手v1.08官方正式版

2019獨角獸企業重金招聘Python工程師標準>>> 西瓜仿站高手是一款綠色好用的由追風網絡出品的網站模板批量下載軟件,西瓜仿站高手是一款仿站工具,仿站神器。軟件功能強大,能夠幫你輕松幫你下載任意網站、任意模板,并且速…

用hundred造句子_八個有趣的開學破冰游戲,線上線下都能用

知道大家最近都很忙,所以省略開篇,直接上正題——開學“破冰游戲”走起!一、你比劃我來猜把詞語展示在PPT上,猜詞的同學背對PPT,其他同學可以看到詞語并且用身體動作把詞語表現出來,直到猜詞的同學可以把詞…

java 執行順序_Java代碼執行順序

程序中代碼執行的順序非常重要,稍有不慎便會是程序運行出錯,那么我將結合實例來分析代碼中的執行。名詞解釋首先了解幾個名詞:非靜態代碼塊直接由 { } 包起來的代碼,稱為非靜態代碼塊靜態代碼塊直接由 static { } 包起來的代碼&am…

mysql 包含的那些文件

*.frm是描述了表的結構 *.MYD保存了表的數據記錄 *.MYI則是表的索引 ibd是MySQL數據文件、索引文件,無法直接讀取。 轉載于:https://www.cnblogs.com/07byte/p/5823667.html

math 計算float_Java Math類靜態float min(float f1,float f2)與示例

math 計算float數學類靜態浮點數min(float f1,float f2) (Math Class static float min(float f1 , float f2) ) This method is available in java.lang package. 此方法在java.lang包中可用。 This method is used to return the minimum one of both the given a…

vector 不初始化時什么狀態_Vue原理解析(三):初始化時created之前做了什么?...

讓我們繼續this._init()的初始化之旅,接下來又會執行這樣的三個初始化方法:initInjections(vm) initState(vm) initProvide(vm)5. initInjections(vm): 主要作用是初始化inject,可以訪問到對應的依賴。inject和provide這里需要簡單的提一下&a…

switch 字符串 java_JDK7新特性switch支持字符串

在JDK7中,switch語句的判斷條件增加了對字符串類型的支持。由于字符串的操作在編程中使用頻繁,這個新特性的出現為Java編程帶來了便利。接下來通過一個案例演示一下在switch語句中使用字符串進行匹配。public class Example {public static void main(String[] args) {String w…

cisco packet tracer路由器配置_【干貨】思科交換機路由器怎么配置密碼?

今天帶大家看看如何在思科的交換機路由器當中配置安全特性,也就是密碼的配置方式。在學習配置之前,我們先回顧一下密碼相關知識。密碼學是研究信息系統安全保密的科學。人類有記載的通信密碼始于公元前400年,古希臘人是置換密碼學的發明者。密…

perl 哈希數組的哈希_使用哈希檢查兩個數組是否相似

perl 哈希數組的哈希Prerequisite: Hashing data structure 先決條件: 哈希數據結構 Problem statement: 問題陳述: Check whether two arrays are similar or not using the hash table. The arrays are of the same size. 使用哈希表檢查兩個數組是否…

codevs3872 郵遞員送信(SPFA)

郵遞員送信 時間限制: 1 Sec 內存限制: 64 MB提交: 10 解決: 5[提交][狀態][討論版] 題目描述 有一個郵遞員要送東西,郵局在節點1.他總共要送N-1樣東西,其目的地分別是2~N。由于這個城市的交通比較繁忙,因此所有的道路都是單行的&#xff0…