SRE: How Google Runs Production Systems 讀書筆記(三)
發行工程(release engineering)
這章開頭介紹了有關「發行」這個新的學科,在 Google 雖由 SRE 以外的特定角色負責,但 SRE 一樣須要與之密切合作與關注;後半部份介紹發行流程、以及 Google 使用的發行系統 Rapid 與建構工具 Blaze (開源版本為 Bazel)
發行工程師在幹麻?
發行工程是一項獨立出來的工作,核心是 build 跟 deliver,由發行工程師負責
發行工程師的工作不是「負責發行」,而是開發工具、制定 best practice,好讓產品研發團隊能自主發行,也就是 self-serving
發行模式有哪些?
發行的步驟由發行工程師、SWE、SRE 三者一起定義,舉幾個例子:
- 每小時建構一次,再根據變更項目和測試結果挑出要發行的版本
- Push On Green,測試通過就發行
因規模和軟體性質而異,有的發行時間會需要延長到好幾天(如基礎設施)
怎麼建構?
無論使用什麼建構工具(Google 用 Blaze),建構應該要是一致且可重複的,也就是在兩台不同機器上建構同一個版本,應該得到相同結果
建構過程應是密閉的 (hermetic),不應受機器上安裝的其他函式庫或軟體影響
正式站有 bug 怎麼辦?
Google 通常不在 master 分支直接發行,而是從 master 切新的分支用來發行(避免建構後無關的變更影響到 master)
針對 bug 的修復會先上到 master,在發行分支再把該變更 cherry pick 過來,即可重新建構跟發行
怎麼持續建構/部署?
因為這章提到的工具跟元件比較多,從 Florian Rathgeber 的簡報上找到的一張關聯圖來看可能會比較好理解
- Midas Package Manager(MPM):是 Google 使用的套件管理系統,資料元存在 BigTable 上。我粗淺的理解方式是把它「對應」到容器的映像檔,它們都是利用「名稱 + 標籤」作為唯一識別,但比起容器映像檔,MPM 有更進階的功能,例如 ACL 跟簽章;另外一個從根本上不同的是映像檔是有序的 layers,而 MPM 則是無序的 filegroups
- Blaze:建構工具,用來建構 MPM、二進制檔案、對應的測試
- Rapid:分散式發行系統,可執行由建構藍圖 (blueprint) 定義的工作流、利用 Blaze 來跑建構及測試;Worker 是跑在 Borg 上,可以並行處理發行工作
- Sisphus(希臘神話的薛西佛斯):自動化部署的框架,提供更彈性的部署功能、流程儀表板
一句話概括基本流程:Rapid 負責跑測試、建構 MPM(打上特定標籤),Sisphus 負責部署此 MPM 版本