Artifactory中Maven倉庫配置優化——提高Virtual倉庫下載速度

問題背景
隨着研發團隊不斷擴大Artifactory中Maven倉庫也在逐步增多,包括 local、remote、virtual 倉庫,其中每每會涵蓋RELEASE和SNAPSHOT包類型倉庫,爲了對使用客戶透明簡化用戶配置,管理人員會經過建立一個virtual倉庫,將全部用到的 local(RELEASE和SNAPSHOT)、remote(RELEASE和SNAPSHOT) 包含到一個virtual 倉庫中。這樣讓客戶統一使用 virtual 倉庫,雖然最大程度上節約了用戶在修改配置的成本,可是也會出現一個致命的問題,拉包速度下降,極端狀況下甚至幾Byte/秒的速度。apache

分析緣由
上面說了全部倉庫組合起來以後,會出現拉包速度下降的問題,那麼爲何會出現拉包慢的狀況呢?json

首先,Maven在解析 SNAPSHOT依賴包時,會在 virtual 倉庫中全部的 remote倉庫中遍歷下載本次依賴包的 maven-metadata.xml 文件,這樣作的目的是爲了保持與遠端倉庫的強一致性,由於SNAPSHOT更新迭代較快。微信

其次,Artifactory 對全部 maven-metadata.xml 進行聚合,並找到 latest 版本返回給客戶。網絡

那麼,若是一個 virtual 倉庫中包含 10 個 remote倉庫,則本次經過 gavc 解析一個依賴包須要下載 maven-metadata.xml 10次並進行聚合,相對於一個 virtual 倉庫下只有二、3個 remote類型的倉庫來講,時間消耗增大了 4~5 倍。這也就是倉庫包含的說下載一個包大量的時間都額外消耗在了更新和聚合maven-metadata.xml上。這也就是常見的拉包慢問題的主要緣由。maven

固然拉包慢也不全是這個問題,也有多是網絡或者磁盤速寫速度等問題形成的,這個就不在這裏過多贅述了。ide

解決方案優化

  1. release 和 snapshot 倉庫分離:

設置三個virtual repositoryui

(1)第一個 maven-snapshot-virtual include 全部maven-snapshot-local3d

(2)第二個 maven-release-virtual include 全部maven-release-local調試

(3)第三個 maven-remote-virtual include 全部remote repository

其中remote virtual 倉庫只包含release 類型的遠程倉庫,如需snapshot,加到第一個virtual倉庫中經過Artifactory set me up生成的setting.xml,選擇 maven-snapshot-virtual和maven-release-virtual

在生成後的setting.xml,中添加maven-remote-virtual 相關配置,而且disable remote-virtual
Artifactory中Maven倉庫配置優化——提高Virtual倉庫下載速度

2.減小 virtual 中 remote 倉庫數量

前面說了拉包慢的緣由,是由於下載一個包大量的時間都額外消耗在了更新和聚合maven-metadata.xml上,那麼咱們下降remote倉庫的數量後,能夠直接減小下載 maven-metadata.xml次數,下降在下載和聚合時所消耗的時間。

  1. 控制SNAPSHOT包的數量

在倉庫中配置存儲的 SNAPSHOT版本數量(默認存儲數量不限),控制在指定數量內。好比配置5個那麼在倉庫中每一個SNAPSHOT版本的包最多隻有5個,這樣在聚合maven-metadata.xml文件時,聚合文件的運算量也將有所降低,提高聚合所消耗的時間。

Artifactory中Maven倉庫配置優化——提高Virtual倉庫下載速度

  1. 定時清理SNAPSHOT包

能夠定時清理SNAPSHOT包,減小包的數量,緣由與第三點相同,就是減小包的數量,下降聚合的時間,提高拉包效率。

清理方法可使用AQL進行清理,清理示例以下:

(1)maven-test-local 倉庫的 test/version 下有5個 snapshot 包:
Artifactory中Maven倉庫配置優化——提高Virtual倉庫下載速度

(2)編寫AQL清理腳本(保留 3 個最新版本【snapshot-v3.jar、snapshot-v4.jar、snapshot-v5.jar】,清除其他 maven-test-local 倉庫 test/version 路徑下的 snapshot 包):
Artifactory中Maven倉庫配置優化——提高Virtual倉庫下載速度

(3)使用 JFrog CLI 執行清理命令(--quiet:跳過刪除確認消息,調試腳本階段建議去掉此參數):

jfrog rt del --quiet --spec=delete.json

Artifactory中Maven倉庫配置優化——提高Virtual倉庫下載速度

  1. 指定依賴解析路徑:

如本項目只使用特定路徑(com/apache/*)的依賴包,添加多個路徑點擊「⊕」,倉庫參考配置以下:
Artifactory中Maven倉庫配置優化——提高Virtual倉庫下載速度

如本項目使用除了特定路徑(com/apache/*)的其餘依賴包,添加多個路徑點擊「⊕」,倉庫參考配置以下:

Artifactory中Maven倉庫配置優化——提高Virtual倉庫下載速度

更多精彩內容能夠專一咱們的在線課堂

微信搜索公衆號:jfrogchina 獲取課程通知

相關文章
相關標籤/搜索