DevOps中雲開發環境(CDE)的優勢與應用

2024年2月6日 19点热度 0人点赞

在這篇短文中,我將結合對一本優秀書籍《DevOps 手冊(The DevOps Handbook)》的感悟,為您簡明扼要地梳理 DevOps 的發展歷程,並進一步結合個人經驗,與雲開發環境(Cloud Development Environment,CDE)這一實踐緊密相連。CDE 作為一種服務,為開發人員提供了在線訪問和運行開發環境的功能。

在本文中,我將著重闡述 CDE 在推動 DevOps “全面在線化(fully online)”方面所起到的關鍵作用。而我的主要貢獻在於解析開發實踐中這一變革所帶來的益處,同時結合個人觀點進行深入闡述。在探討 DevOps 與 CDE 之間的關聯之前,讓我們首先回顧一下推動當今軟件交付主流方法的一系列重要事件和技術突破。

1、DevOps 誕生的回顧

在 2001 年,《敏捷宣言(The Agile Manifesto)》應運而生,作為對瀑佈法和 Rational Unified Process (RUP) 等傳統、繁瑣的軟件開發方法的反思和革新。該宣言強調了頻繁交付工作軟件的重要性,摒棄了動輒數月甚至更長時間的交付周期,傾向於更短、更高效的時間框架。這一思想在當時無疑是一股清流,引領了軟件開發行業的變革。

在 2008 年多倫多敏捷大會上,Andrew Shafer 提出了一個具有前瞻性的觀點:敏捷原則不僅僅應用於應用程序代碼,還應該擴展到 IT 基礎設施領域。這一觀念的提出,無疑進一步拓寬了敏捷的實踐領域和應用范圍。

到了 2009 年,Flickr 在 Velocity 會議上發表的一篇論文震驚四座,展示了他們如何通過開發和運維的深度協作,實現了驚人的“一天 10 次部署”。這一創舉無疑為敏捷和 DevOps 的理念推廣樹立了生動的范例。

受此啟發,Patrick Debois 在比利時組織了第一屆 DevOps 日活動,這一活動不僅深化了開發與運維之間的交流與合作,更有效地催生了“DevOps”這一概念。DevOps 的出現標志著軟件開發和運營實踐的一個重要裡程碑,它成功地將敏捷的快速適應性和對整個 IT 基礎設施的全面關註結合在一起,為行業的發展開辟了新的道路。

2、DevOps 的三種方式和流程原則

DevOps,作為當前 IT 領域中備受矚目的概念,其實踐和流程原則已經被總結為“三種方式”。這三種方式是 DevOps 的核心指導原則,旨在改善工作流程、擴大反饋回路以及培養不斷學習和實驗的文化

首先,改善工作流程是 DevOps 的核心目標之一。這要求我們消除流程中的瓶頸,降低批量處理的需求,並加速從開發到生產的整個工作流。通過這種方式,我們可以提高開發速度,減少等待時間,並確保更高效地交付軟件。

其次,擴大反饋回路是 DevOps 的另一重要原則。這一原則強調快速、準確地收集和反饋系統中存在的問題或低效情況。通過建立有效的反饋機制,開發團隊可以更好地理解用戶需求和期望,及時調整和優化產品。

最後,培養不斷學習和實驗的文化是 DevOps 的第三個原則。這種文化鼓勵團隊成員不斷嘗試新的方法和工具,通過實驗來發現更好的解決方案。通過持續學習和實驗,我們可以不斷改進和優化 DevOps 的實踐,提升團隊的適應性和創新性。

按照精益生產和敏捷的思路,我們不難理解上述三項原則的定義。不過,對於當前的討論,即 DevOps 歷史如何導致 CDE ,我們隻需看看第一條道路,即流程原則,就能理解其中的因果聯系。

在 CDE 中,這些原則的應用尤為重要。版本控制和容器化技術作為實施 DevOps 流程和建立可靠一致的開發流程的基礎,在雲環境中發揮著核心作用。《DevOps 手冊》的第 9 章詳細闡述了這一點,其中提到“版本控制和容器化技術是實施 DevOps 流程和建立可靠一致的開發流程的核心”。

實現這一流程的關鍵是將所有生產工件納入版本控制,使其成為單一的真相源。這樣,我們可以以可重復和記錄的方式重現整個生產環境,確保自動生成類似生產環境的代碼開發環境,並實現完全的自助服務,無需運營部門的人工幹預。

這種方法對於軟件發佈尤為重要。在發佈時,應用程序的行為,包括真實的負載和生產數據集,將在類似生產的環境中首次被觀察。為了降低可能出現的問題,我們鼓勵開發人員在各自的工作站上運行類似生產的環境。這些環境通過虛擬映像或容器等技術按需創建並提供自助服務。將這些環境置於版本控制之下,可以重新創建整個預生產和構建流程。這裡所提到的“類生產環境”實際上指的是一個環境,除了具有與真實生產環境相同的基礎設施和應用程序配置外,還包含開發所需的其他應用程序和層。

我們鼓勵開發人員使用虛擬鏡像或容器等機制在其工作站上運行類生產環境(Docker 圖標),以減少在生產中出現執行問題的可能性。

3、從開發人員工作站到 CDE 平臺的 DevOps 之旅

在《DevOps 手冊》中,我們已經深入探討了自助服務的概念,並將其視為流程原則的核心驅動力。隨著技術的不斷發展,特別是在 2016 年之後,這一概念得到了進一步的實現和推廣。通過從註冊中心(如 Docker Hub)下載環境文件到開發人員的工作站,我們可以輕松地為他們提供一個預配置的、與生產環境類似的開發環境。這種環境被稱為基礎設施即代碼(Infrastructure as Code),而 Docker 正是實現這一功能的常用工具。

一旦開發人員在自己的機器上設置了這樣的環境,他們就可以開始構建應用程序。具體步驟如下:

  1. 開發人員訪問存儲了開發環境信息的文件,並將其復制到自己的機器上。
  2. 在本地存儲中添加源代碼,以便進行後續的開發和構建工作。
  3. 利用工作站的計算資源在本地構建應用程序。如下圖左側部分所示。

在這個過程中,開發人員實際上是在自己的機器上創建了一個應用程序。一旦應用程序正常運行,源代碼就會被發送到中央代碼庫。隨後,應用程序將在線進行構建和部署,這一過程涉及使用基於雲的資源和應用程序,如 CI/CD 管道。

值得註意的是,除了使用本地集成開發環境進行源代碼編寫(即利用工作站的物理存儲和計算資源)之外,上述三個開發步驟是開發人員在執行 DevOps 操作時所涉及的唯一環節。而其餘的 DevOps 操作,包括使用基於網絡的應用程序以及開發人員和操作人員以服務形式所進行的操作(即使這些應用程序是由組織自行托管的),都依賴於基於網絡的應用程序。CDE 的基本目標是將這些開發步驟也轉移到網絡上,從而進一步簡化和優化整個開發流程。

為此,雲開發環境平臺(CDE platform)為 DevOps 提供了以下基本服務,以實現上述開發流程的全面在線化:

  • 在線管理開發環境:通過將開發環境作為容器或虛擬機進行在線管理,開發人員可以直接訪問預先構建和配置完成的開發環境,從而跳過了傳統的步驟1。這樣,開發人員不再需要手動設置和配置開發環境,而是可以立即開始開發和構建應用程序。
  • 在線編寫源代碼:CDE 平臺提供了集成開發環境(IDE)或終端,讓開發人員可以直接在雲端編寫源代碼。這不僅簡化了步驟2,而且通過雲端的協作和版本控制,還促進了團隊間的協同開發。此外,這種在線編寫源代碼的方式也意味著開發人員可以在任何地方、任何時間進行開發工作,進一步提高了開發的靈活性和效率。
  • 在線構建應用程序:通過在雲端執行構建命令,步驟3也被徹底改變。開發人員可以直接在雲端 IDE 或終端中構建應用程序,無需在工作站上進行本地構建。這種在線構建方式不僅可以加速構建過程,還能確保構建的一致性和可靠性。

圖:(左)傳統開發數據流需要使用本地工作站資源。(右圖)雲開發數據流取代了本地存儲和計算,同時保持了類似的開發體驗。兩邊的操作分別是:(1) 訪問環境信息;(2) 添加代碼;(3) 構建應用程序。

請註意,步驟(2)的替換可以通過多種方式完成。例如,比如集成開發環境可以是基於瀏覽器的(又稱雲集成開發環境),或者本地安裝的集成開發環境可以實現遠程編寫遠程環境中的代碼。也可以通過終端使用 vim 等控制臺文本編輯器。

工作站上通常會使用多個容器化環境進行測試,尤其是與主容器化開發環境結合使用時。因此,雲 IDE 平臺需要重現在 CDE(本身就是一個容器化環境)內運行容器化環境的能力。總的來說,CDE 平臺通過提供上述基本服務,實現了開發流程的全面在線化和自動化。這種轉變不僅簡化了開發流程,提高了開發效率,還為組織提供了更大的靈活性和可擴展性。通過這種方式,組織可以更快地響應市場變化,加速產品上市時間,並提高整體的開發效果和質量。

在 DevOps 中使用 CDE 的好處

在 DevOps 中,CDE 帶來的優勢是多方面的,以下是對這些優勢的總結和深入探討:

1. 簡化工作流程。通過將開發環境從本地工作站遷移到雲端,CDE 簡化了開發人員的工作流程。這不僅確保了開發環境的一致性,還消除了硬件限制,使開發人員能夠專註於應用程序的開發和部署。

2. 環境定義與版本控制。使用 CDE,環境定義和版本控制得以加強。這不僅統一了環境定義,還統一了整個工作流程中的工具,從而實現了標準化開發流程和跨組織團隊的一致性。

3. 集中式環境與自助服務。在分佈式開發活動的基礎上,CDE 通過集中化環境的生產、維護和演進來提升自助服務。這使得開發人員能夠快速訪問和管理他們的環境,無需進行人工操作。

4. 資源利用與成本效益。將計算資源的消耗從本地硬件轉移到集中和共享的雲資源,不僅減輕了本地機器的負擔,還更有效地利用了組織資源,節省了潛在成本。

5. 協作與訪問機制。通過在訪問機制中嵌入安全措施,CDE 確保了對開發環境的無處不在的訪問。這滿足了不同開發人員群體的需求,促進了不同團隊和地域之間的協作。

6. 可擴展性與靈活性。CDE 提供可擴展的雲資源,可根據項目需求進行調整,便於管理多個用於測試和開發的容器化環境,從而支持現代軟件開發團隊的分佈式性質。

7. 安全性和可觀察性。將開發環境集中在雲中不僅能提高安全性,而且由於其在線性質,還能提供即時可觀察性,從而對開發活動進行實時監控和管理。

綜上所述,CDE 已成為現代軟件開發(尤其是雲原生軟件開發)的一種解決方案,並與 DevOps 原則保持一致,以改善流程、反饋和持續學習。