DevOps & SRE
Table Of Content
DevOps 的名字由來,是 Development + Operations(開發營運)
常有人會問 DevOps === CI/CD ?
我的回答:是,但不回是全部。DevOps 可以說是一個原則。DevOps 原則內由包含 CI/CD,可以說是一個很多人聽到 DevOps 是會聯想到 CI/CD。
傳統的開發如下:
- 設計新功能
- 寫程式
- 找 Bug
- 修 Bug
- 生出更多的 Bug
我們知道 DevOps 會有 Develop 和 Operations
Develop 開發 | 左右間的問題 | Operations 維運 |
---|---|---|
設計新功能 | 衝突 | 確保系統穩定 |
工程師的名言:服務能動就不要動他!但,這樣這的好嘛?
傳統的開發面臨的問題
- 溝通不良
- 交付速度慢
- 開發速度慢
- 協作障礙
DevOps 原則就是一個以解決衝突為前提的原則,原則內也有搭配自動化提升效率
RD 會問:開發人員也要有維運的觀念? SRE 回答:我想要要一起協作!
SRE 工程師會參與產品的
-
計畫 Plan
- 決定目標
- 釐清要做的事
- jira 或 google docs
-
程式碼管理 Code
- 程式碼建立
- 軟體建立
- 版本控制
- github 或 gitlab
-
建置 Build
- 編譯、封裝程式碼
- Docker Image 建置
- docker、npm 或 maven
-
測試 Test
- 確保 Function 的可行性
- 確保 Source Code 的可行性
- 單元測試
- 元件測試
- 整合測試
- vitest、crypress.io、mock 或 pytest
-
發布 Release
- Image 的版本
- 兼容性問題
- node 20 升級成 node 21
- python 3.11 升級成 python 3.12
-
部屬 Deploy
- 將軟體部屬至機器上
- Cloud Build、Helm 或 Kubectl
- 將軟體部屬至機器上
-
操作/維運 Operate
- 緊急事件回應
- 日誌管理
- 故障排除
- Cloud Run、Cloud Function、GCE 或 GKE
-
監控 Monitor
- 警報
- Google Chat、Telegram 或 Skype
- 分析趨勢
- 建立儀表板 (四項黃金指標)
- 分別是延迟(Latency),流量(Traffic),错误(Errors)和饱和度(Saturation)
- Cloud Logging、Cloud Morniting 或 Datadog
- 分別是延迟(Latency),流量(Traffic),错误(Errors)和饱和度(Saturation)
- 警報
就這樣?監控之後就沒有事情做了?
當然不是!監控完,下一步就會根據監控的結果制定出新的計畫。服務哪裡可以優化的、流量調整和趨勢優化等…
制定計畫(Plan) 後就繼續 code → Build → Test → Release → Deploy → Operate → Monitor
這就是 DevOps 圖片的由來
根據上圖的 DevOps 流程,會發現像是建置、測試、發布和部屬。都是屬於重複性的工作,將重複的事情交給機器去做?
CI 內有 Build 和 Test Stages 工作可以交給 Circle CI、Gitlab Runner、Github Actions 或 Jenkins CI 來實現
CD 內有 Deploy Stages,CD 會分成兩個部分
-
Continuous Delivery 持續交付
- 自動發布至儲存庫
- 手動部署至 Production 環境
-
Continuous Deployment 持續部署
- 自動部署至 Dev、QA 和 Staging 環境
DevOps 實踐