Artifactory中Maven倉庫配置最佳化——提升Virtual倉庫下載速度
問題背景
隨著研發團隊不斷擴大Artifactory中Maven倉庫也在逐步增多,包括 local、remote、virtual 倉庫,其中往往會涵蓋RELEASE和SNAPSHOT包型別倉庫,為了對使用客戶透明簡化使用者配置,管理人員會透過建立一個virtual倉庫,將所有用到的 local(RELEASE和SNAPSHOT)、remote(RELEASE和SNAPSHOT) 包含到一個virtual 倉庫中。這樣讓客戶統一使用 virtual 倉庫,雖然最大程度上節約了使用者在修改配置的成本,但是也會出現一個致命的問題,拉包速度降低,極端情況下甚至幾Byte/秒的速度。
分析原因
上面說了所有倉庫組合起來之後,會出現拉包速度降低的問題,那麼為什麼會出現拉包慢的情況呢?
首先,Maven在解析 SNAPSHOT依賴包時,會在 virtual 倉庫中所有的 remote倉庫中遍歷下載本次依賴包的 maven-metadata.xml 檔案,這樣做的目的是為了保持與遠端倉庫的強一致性,因為SNAPSHOT更新迭代較快。
其次,Artifactory 對所有 maven-metadata.xml 進行聚合,並找到 latest 版本返回給客戶。
那麼,如果一個 virtual 倉庫中包含 10 個 remote倉庫,則本次透過 gavc 解析一個依賴包需要下載 maven-metadata.xml 10次並進行聚合,相對於一個 virtual 倉庫下只有2、3個 remote型別的倉庫來說,時間消耗增大了 4~5 倍。這也就是倉庫包含的說下載一個包大量的時間都額外消耗在了更新和聚合maven-metadata.xml上。這也就是常見的拉包慢問題的主要原因。
當然拉包慢也不全是這個問題,也有可能是網路或者磁碟速寫速度等問題造成的,這個就不在這裡過多贅述了。
解決方案
1. release 和 snapshot 倉庫分離:
設定三個virtual repository
(1)第一個 maven-snapshot-virtual include 所有maven-snapshot-local
(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
2.減少 virtual 中 remote 倉庫數量
前面說了拉包慢的原因,是因為下載一個包大量的時間都額外消耗在了更新和聚合maven-metadata.xml上,那麼我們降低remote倉庫的數量後,可以直接減少下載 maven-metadata.xml次數,降低在下載和聚合時所消耗的時間。
3. 控制SNAPSHOT包的數量
在倉庫中配置儲存的 SNAPSHOT版本數量(預設儲存數量不限),控制在指定數量內。比如配置5個那麼在倉庫中每個SNAPSHOT版本的包最多隻有5個,這樣在聚合maven-metadata.xml檔案時,聚合檔案的運算量也將有所下降,提升聚合所消耗的時間。
4. 定時清理SNAPSHOT包
可以定時清理SNAPSHOT包,減少包的數量,原因與第三點相同,就是減少包的數量,降低聚合的時間,提升拉包效率。
清理方法可以使用AQL進行清理,清理示例如下:
(1)maven-test-local 倉庫的 test/version 下有5個 snapshot 包:
(2)編寫AQL清理指令碼(保留 3 個最新版本【snapshot-v3.jar、snapshot-v4.jar、snapshot-v5.jar】,清除其餘 maven-test-local 倉庫 test/version 路徑下的 snapshot 包):
(3)使用 JFrog CLI 執行清理命令(--quiet:跳過刪除確認訊息,除錯指令碼階段建議去掉此引數):
jfrog rt del --quiet --spec=delete.json
5. 指定依賴解析路徑:
如本專案只使用特定路徑(com/apache/*)的依賴包,新增多個路徑點選“⊕”,倉庫參考配置如下:
如本專案使用除了特定路徑(com/apache/*)的其他依賴包,新增多個路徑點選“⊕”,倉庫參考配置如下:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69954434/viewspace-2694805/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 《《《maven倉庫下載jar包MavenJAR
- maven的下載、安裝與配置 倉庫配置完整版Maven
- Maven 倉庫Maven
- Maven 倉庫 mvnrepositoryMaven
- Maven私服倉庫配置-Nexus詳解!Maven
- 如何配置極狐GitLab Maven 倉庫GitlabMaven
- maven配置阿里雲及本地倉庫Maven阿里
- 【Maven】配置多個倉庫(第三方和公司內部倉庫)Maven
- Maven中央倉庫地址大全Maven
- Maven 中央倉庫地址大全Maven
- 建立個人Maven倉庫Maven
- Maven-修改maven本地倉庫地址Maven
- maven遠端倉庫配置及含義解釋Maven
- Maven中GeoTools的引入及Maven中央倉庫地址大全Maven
- Maven私有倉庫-Nexus3MavenS3
- IDEA如何配置自己的maven和maven設定阿里雲倉庫IdeaMaven阿里
- Maven高階-本地倉庫訪問私服配置及私服資源上傳與下載Maven
- git下載倉庫指定目錄Git
- 如何配置Yum倉庫?
- Maven推送本地jar包到遠端私有倉庫配置MavenJAR
- Java Maven專案推送到 Maven 中央倉庫JavaMaven
- Maven中央倉庫釋出歷程Maven
- 如何使用GitHub建立Maven私有倉庫GithubMaven
- maven中心倉庫OSSRH使用簡介Maven
- maven 將本地jar打入本地倉庫MavenJAR
- 新增jar包到本地Maven倉庫JARMaven
- maven 多倉庫和映象設定Maven
- yum配置及倉庫搭建
- git倉庫修改遠端倉庫Git
- 將maven、gradle倉庫遷移到d盤MavenGradle
- maven安裝jar包到本地倉庫MavenJAR
- 釋出jar包到maven中央倉庫JARMaven
- sbt更換阿里的maven倉庫源阿里Maven
- MAVEN新增本地倉庫和注意事項!Maven
- 使用Github搭建Maven私有遠端倉庫GithubMaven
- Jenkins之Nexus搭建Maven私有倉庫教程JenkinsMaven
- 處理Maven本地倉庫.lastUpdated檔案MavenAST
- 使用Gradle釋出工件到Maven倉庫GradleMaven