DevOps 溫故知新
DevOps的出現是“左移運動”的具體體現,是為了按時交付軟件產品和服務,可看作開發、運維和質量保障三者的交集,旨在通過改善這三個部門之間的協作,提高組織提供應用程序和服務的速度,從而更好地為客戶服務并在市場中保持競爭力。遺憾的是, 在經典DevOps 環中的“Test”并沒有凸顯QA團隊的作用。
圖片
DevOps的實施涉及到多個方面,包括自動化工具的使用、持續集成/持續部署(CI/CD)的實踐、監控和日志分析系統的建立等。通過這些實踐,DevOps可以確保軟件在開發、測試、部署和運維等各個環節中都能夠保持高效、可靠和一致。
DevOps 的技術組成
DevOps 涉及了技術、組織、文化等多個領域,就相關技術技能而言, 大約包括以下幾個層次:
圖片
基礎的技術技能包括版本控制、Linux 操作系統的操作、編程技能、數據庫和網絡操作等,其中與Ops相關的編程主要是Shell 和Python。CI/CD 是DevOps 的關鍵環節,常見的工具包括Jenkins、Github Action,GitLab CI 等。容器化技術保證了CI/CD 的環境一致性,同時為服務和網絡的編排提供了工具。就具體的部署環境而言, IaC 是實現面向混合云快速部署的關鍵。監控和日志與傳統運維領域的技術類似,區別可能是顆粒度不同。
DevOps 中CI/CD 流水線
CI/CD 是DevOps 的關鍵技術點,工作流及其流水線是工程效率提升的主要體現。
圖片
CI/CD有助于從初始代碼提交到部署的軟件開發過程。通過自動化流水線,它消除了傳統上將代碼運送到生產環境所需的大量手動人工干預。
持續集成(CI)包括自動化構建、執行測試以及將單個開發人員的代碼合并到共享存儲庫中。持續集成的主要目標是有效地將源代碼集成到共享存儲庫中。一旦將更改提交給版本控制系統,就會執行自動構建和測試用例,以確保代碼的功能和有效性。這些過程驗證源代碼如何編譯以及測試用例在執行期間如何執行。
其中代碼入庫可以做成一個單獨的流水線:
圖片
構建和測試作為另一條流水線:
圖片
持續部署(CD)是 CI/CD 流水線中 CI 之后的下一步,是自動部署將自動測試階段傳遞到生產環境的每個代碼更改的實踐。其典型的流水線如下:
圖片
持續部署的重點是在生產環境中快速部署代碼變更。它的根源可以追溯到敏捷宣言,強調“早期和持續交付的有價值的軟件”來滿足客戶。真正的持續部署是具有挑戰性的,而且沒有像 CI 那樣被廣泛采用,但是一個更常見的實踐方式是持續交付(Continuous delivery)。持續交付和持續部署的主要區別在于,持續交付可能側重于“ready for production”,不是自動完成上線,而是完成上線準備。
從DevOps 到MLOps
如果對DevOps中的Dev 進行領域劃分和擴展,就會形成XOps。隨著人工智能的廣泛使用, 機器學習成為了Dev 中的一個重要領域,從而形成了DevOps 的一個變體——MLOps。
MLOps的核心思想是將DevOps的流程和工具應用于機器學習領域,以實現機器學習應用的持續集成、持續交付和持續部署。MLOps的目標是通過使機器學習的開發、測試和部署更加自動化來增強軟件開發的效率和質量。
MLOps可以更好地管理機器學習模型的生命周期,包括數據準備、傳輸和轉換、模型訓練和優化、模型評估和選擇、模型部署和監控等。同時,MLOps也可以幫助團隊管理開發和生產環境之間的差異,保證模型在生產環境中的穩定性和可靠性。簡單而言,MLOps增加了領域特殊性的環節——持續訓練(Continuous Training,CT)。
圖片
MLOps的引入,使得機器學習模型的開發和部署流程更加高效,從而加快了AI應用的創新速度并降低了錯誤率,還有助于加強數據安全性和合規性,并提高機器學習應用的可靠性和可維護性。
至于LLMOps, 后續會有專門的文章重點總結。
面向基礎設施的DevOps
DevOps 不僅僅適用于軟件交付,而是面向整個IT交付領域。那么,如何將DevOps應用于基礎設施呢?如何高效、智能地管理和配置基礎設施呢?
這就需要IaC,IaC 是面向基礎設施的DevOps 的關鍵技術。面對基礎設施尤其是網絡環境的多樣化和差異性,對網絡進行建模是實現IaC的前提。
通過模型驅動的方式,IaC是一種將基礎設施管理過程自動化的方法,通過使用編程語言來描述和管理基礎設施資源,實現對基礎設施的快速部署、配置和管理。