SlimFast Maven外掛:HubSpot避免SpringBoot肥胖巨大JAR的方法

banq發表於2019-06-19

在現代Java Web開發中,構建和部署胖JAR大型檔案可能存在明顯的缺點。HubSpot工程團隊建立了一篇精彩的部落格文章,解釋了他們在將大型胖JAR持續部署到AWS雲時,內部開發迴圈和網路頻寬使用帶來的一些挑戰。

該部落格解釋了團隊最初如何使用Maven Shade外掛來構建和打包應用程式,但這使得一個應用程式包含70個類檔案 - 在原始JAR中總計210 KB,不包含任何依賴項 - 轉換為150多MB大小的肥胖Jar。使用Shade將100,000多個檔案合併到一個存檔中也是一個緩慢的過程,然後當構建伺服器將生成的JAR複製並部署到AWS S3儲存服務時,這會消耗時間和網路資源。HubSpot團隊擁有100名工程師,每天不斷提交併觸發1,000-2,000次構建,這種情況得到了放大。他們每天產生50-100 GB的構建工件!

HubSpot團隊最終建立了一個新的Maven外掛:SlimFast。這個外掛與Shade外掛的不同之處在於它將應用程式程式碼與相關的依賴項分開,因此構建並上傳兩個單獨的工件。單獨構建和上載應用程式依賴項可能聽起來效率低下,但只有在依賴項發生更改時才會執行此步驟。由於依賴項不經常更改,HubSpot團隊宣告此步驟通常是無操作; 包依賴關係的JAR檔案只上傳到S3一次。

HubSpot部落格文章和相應的GitHub儲存庫提供了全面的詳細資訊,但實際上,SlimFast外掛使用Maven JAR外掛向Skinny JAR新增一個Class-Path清單條目,指向依賴項的JAR檔案,並生成一個JSON檔案有關S3中所有依賴項工件的資訊,以便以後可以下載這些工件。在部署時,HubSpot團隊會下載所有應用程式的依賴項,但隨後會在每個應用程式伺服器上快取這些工件,因此這一步驟通常也是無操作。最終結果是在構建時只上傳了應用程式的瘦小JAR,這只是幾百千位元組。在部署時,只需要下載相同的瘦JAR,這需要幾分之一秒。

SlimFast外掛目前與AWS S3繫結用於儲存工件,但程式碼可在GitHub上獲得,其原理可適用於任何型別的外部儲存。

相關文章