DevOps 是一個持續改善軟體產品的過程,它通過極短的釋出週期、全面自動化的整合和交付流水線,以及團隊間的緊密共同作業來不斷改善產品。DevOps 的目標是縮短將創意變成使用者可以使用的產品的時間,並降低這個過程的成本。DevOps 充分利用自動化流程來加速開發和部署。如下圖對比傳統軟體構建方法和 DevOps 方法,傳統方法在上,DevOps 在下面:
●半部分的傳統方法,從概念構思到使用者可用的時間週期是八天。基礎設施部署佔用的時間最多,因為工程師需要在網際網路上建立託管軟體所需的元件。另一個大的時間耗費來自部署之間的測試和評審步驟。
●半部分是DevOps ,從概念構思到使用者可用的時間週期縮短到了兩天。這是通過使用處理部署和軟體測試/評審的自動化流程來實現的。
如果一個組織構建軟體的速度能比對手快四倍,那麼這將會給它帶來巨大的競爭優勢。實踐表明,客戶中意的創新產品一開始可以不完整,但要能夠快速穩定地改進。組織可採納 DevOps 來降低開發生命週期的成本和延遲,並響應使用者的要求。
通過 Dev0ps,開發人員僅用數小時就可以釋出新版本軟體,對它們進行測試,並部署給客戶。這並非意味著版本總是可以這麼快地釋出,適當的質量保障(QA,Quality Assurance)需要投入時間,而 DevOps 提供了在必要時能快速行動的能力,展示了持續整合、持續交付及基礎設施即服務這些技術如何被整合在一起以實現快速的釋出週期。
上圖的流水線的關鍵部分是,從開發人員提交修補程式到生產環境中的服務部署這些自動化步驟,最終以完全自動化的方式串聯成的一個鏈條。如果這個鏈條上的任何一個自動化步驟出現失敗,那麼流水線就會停止,程式碼就不會部署。這種機制將確保在所有型別的測試都通過之後,新版本的軟體才能被髮布到生產環境中。
1. 持續整合
將新特性快速整合進軟體的過程叫作持續整合Cl,CI 定義了一個在軟體產品中實現、測試及合併新特性的工作流。產品經理和開發人員定義一組小特性集合,這些特效能在較短的週期內實現。每個特性新增在主要原始碼的一個分支上,並提交評審,由另一位得到授權的開發人員來評審。在評審階段,自動化測試會被執行以驗證程式碼更改是否需要返工,這能維持程式碼的質量水平。在評審通過之後,修改會被合併到中央程式碼倉庫中,這樣就做好了部署的準備。小特性的快速迭代能讓這個流程得以順暢執行,避免了因大規模程式碼修改而對功能造成的破壞。
2.持續交付
將軟體部署到客戶可用的服務中的自動化過程叫作持續交付CD,DevOps推崇工程師用程式程式碼來管理基礎設施以快速應對變化,而不是手動管理基礎設施元件。當開發人員將程式碼修改合併進軟體之後,運維人員在CD流水線上觸發更新後的軟體的部署,流水線會自動獲取最新版本的原始碼,對其進行打包併為它建立新的基礎設施。如果部進行順利,可能在QA團隊人工或自動評審之後,該環境就會被提升為新的演練或生產環境。使用者將被定向到這個環境,而老環境將被銷燬。通過程式碼來管理伺服器和網路的這一過程大大縮短了處理部署通常所需的漫長的等待時間。
3.基礎設施即服務
基礎設施即服務laaS就是雲。它是這樣一種概念,一個組織所依靠的資料中心、網路和伺服器,有時甚至還有系統,統統都由第三方運營。這些基礎設施可以作為服務暴露給運維人員,並且可以通過 API 和程式碼進行控制。laaS 是 DevOps 彈藥庫中的核心工具,因為它在降低基礎設施運營成本方面發揮著舉足輕重的作用。可程式化的特質將 laaS 和傳統基礎設施區分開來,並且鼓勵運維人員編寫程式碼來建立和修改基礎設施,而不是手動執行這些運維任務。
內部運維
許多組織傾向於在內部運營它們的基礎設施,這樣做有各種各樣的原因(監管、安全、成本,等等)。需要注意的是,採用laaS並非意味著將基礎設施的管理外包給第三方。組織可以在內部使用Kubernetes 或 OpenStack 這樣的平臺來部署和運維laaS,而不是直接在硬體上執行應用,從而享受到這些中間管理層帶來的靈活性優勢。
本書中我使用了由第三方運營的 laaS 系統——AWS(Amazon Web Services),它受到許多組織的青睞,因為AWS幫助它們降低了基礎設施管理的複雜性,讓它們可以聚焦於核心產品。但是,我提及的大多數基礎設施安全概念可以應用於任何型別的laaS,無論你是自己控制硬體還是讓第三方替你控制。
管理更低層的基礎設施將帶來一系列全新的問題,例如網路安全和資料中心的存取控制,你必須妥善處理這些問題。本書沒有介紹這些內容,因為它們不是 DevOps 獨有的問題,但是你應該可以輕易地從一些現有文獻中獲得幫助。
AWS 是最具代表性的 laaS,它將作為我們的範例環境貫穿於全書。圖的下半部分展示了由供應方管理的 AWS 元件,上半部分則是由運營方管理的元件。
CI、CD及 laaS 是成功的 DevOps 策略的基本組成部分。深諳CI/CD/laaS 工作流的組織能以全自動化的方式快速地將軟體交付給終端使用者,並能夠做到一天交付數次。測試和部署步驟的全部自動化保證了將流水線操作所需的人工干預降到了最低,這樣在災難發生時基礎設施也是完全可以恢復的。
除了技術上的優勢,DevOps 還影響了組織文化,從很多方面提升了員工的幸福感。