極速 Zadig 構建效率是這樣煉成的

語言: CN / TW / HK

Zadig 提供了面向容器執行時環境、大規模微服務的雲原生持續交付方案,被企業和社群廣泛採用。在實際使用中,批量服務接入 ok 了,多套環境拉起完美了,最後卻在構建上遭遇滑鐵盧:一個工作流任務耗時很長才結束,多個工作流任務一直在排隊等待...

這 Zadig 到底該怎麼用,才能讓構建效率最大化?別慌,最佳實踐姿勢和常見排障思路來了。下面我們給出能提升構建效率的系統配置實踐,就 Java/Golang/NodeJS 技術棧給出 demo 示例,並在文末提供一些關於構建效率常見的優化思路。

叢集配置

叢集快取配置

系統管理員訪問 系統設定 -> 叢集管理,編輯叢集配置,快取資源使用叢集 PVC 儲存。系統還支援對不同的專案/工作流/服務元件實現獨享快取,可參考 快取配置 | Zadig 文件

經測試,相比物件儲存快取,使用叢集 PVC 快取平均可提升構建效率 40%+。

Dind 配置

在叢集管理裡修改 Dind 資源配置,按需調整 Dind 副本數和資源規格,並使用叢集儲存資源作為映象快取。

  1. 設定 Dind 多副本後,同一個服務的構建任務會被儘可能排程到同一個 Dind 例項,不同服務的構建任務會被儘可能打散排程到不同的 Dind 例項,避免因單個 Dind 例項承載過多的構建任務而增加失敗概率。
  2. 使用叢集儲存資源可避免因 Dind 重啟後導致已有快取失效的問題。

構建快取配置

修改構建,開啟快取配置,在自定義目錄中指定需要快取的目錄。下文中也提供了 Java/Golang/NodeJS 技術棧的構建快取配置示例。

工作流配置

編輯工作流,開啟併發執行策略。開啟後,當多個工作流任務先後產生時無需排隊等待即可併發執行,縮短整體執行時間。

工作流任務併發數依賴系統資源的上限,系統管理員可根據實際情況設定,參考:任務併發數

Demo 示例

下面分別演示 Java、Golang、NodeJS 技術棧中,構建快取具體該如何配置。

Java

以 Maven 構建工具為例,其預設配置檔案位於 ${M2_HOME}/conf/settings.xml 檔案中,可在安裝軟體包時指定 localRepository 來設定快取目錄,並在構建配置中指定。 以 Zadig 內建的 maven 3.3.9 為例說明,安裝時指定 localRepository$WORKSPACE/.m2/repository

mkdir -p $HOME/maven
tar -C $HOME/maven -xzf ${FILEPATH} --strip-components=1

# customize .m2 dir
export M2_HOME=$HOME/maven
mkdir -p $WORKSPACE/.m2/repository
cat >$HOME/maven/conf/settings.xml <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <localRepository>$WORKSPACE/.m2/repository</localRepository>
  <pluginGroups/>
  <servers/>
  <mirrors>
    <mirror>
      <id>repo1</id>
      <mirrorOf>central</mirrorOf>
      <name>repo1</name>
      <url>http://repo1.maven.org/maven2</url>
    </mirror>
  </mirrors> 
  <profiles/>
</settings>
EOF

構建快取配置如下:

Golang

Golang 快取路徑通過 $GOCACHE 環境變數控制,可在構建指令碼中顯式修改。 在應用構建快取配置的自定義目錄中,可以填寫上述配置的 $GOCACHE 路徑。

NodeJS

在構建指令碼中使用 npm install <*> -g --prefix <指定目錄>,再在高階配置中將目錄快取即可。

優化指南

  1. 系統按照下載依賴軟體包 -> 拉取程式碼 -> 執行構建指令碼 -> 推送構建映象到映象倉庫的順序來執行構建,每一個環節對於網路的需求因構建配置而異,可根據具體配置確定叢集所在的節點是否存在網路問題。
  2. 對於執行構建指令碼耗時長的情況,可以在指令碼中每一個步驟執行前後增加時間戳輸出,統計每一步的耗時,找到耗時長的步驟後有的放矢的解決。
  3. 更多排查思路可閱讀:診斷手冊 | Zadig 文件

Zadig,讓工程師更專注創造。

歡迎加入 開源吐槽群🔥

Zadig on Github
Zadig on Gitee