關於DevOps你必須知道的11件事

本文轉載於Infoq,雖然是幾年前的文章,確實是非常好的一篇文章。

作者 Gene Kim ,譯者 戚一品

Infoq鏈接:infoq.com/cn/articles/1

關於作者

Gene Kim在多個角色上屢獲殊榮:CTO、研究者和作家。他曾是Tripwire的創始人並擔任了13年的CTO。他寫過兩本書,其中包括《The Visible Ops Handbook》,目前他正在編寫《The Phoenix Project: A Novel About IT, DevOps, and Helping Your Business Win》和《DevOps Cookbook》。Gene是 IT運維的超級粉絲,痴迷於改進運維流程——在不影響當前IT生產環境的情況下,使得開發人員可以向生產交付更多可運行的功能,而非只是完成代碼。他與多個頂級互聯網公司合作過,致力於改進他們的發布流程,提高IT運維流程的完整性。2007年,Computer World將Gene列入了「40歲以下的40個創新IT人士」的名單中,普度大學還給他頒發了傑出校友獎以表彰他在專業領域的成就和領導力。

1. 什麼是DevOps

術語「DevOps」通常指的是新興的專業化運動,這種運動提倡開發和IT運維之間的高度協同,從而在完成高頻率部署的同時,提高生產環境的可靠性、穩定性、彈性和安全性。

為什麼是開發和IT運維?因為典型的價值流就是在業務(定義需求)和客戶(交付價值)之間。

DevOps運動的起源通常被放在2009年前後,伴隨著許多運動的相輔相成和相互促進——效率研討會運動,特別是由John Allspaw和Paul Hammond展示的開創性的「一天10次部署」,基礎設施即代碼」運動(Mark Burgess 和Luke Kanies),「敏捷基礎設施運動」 (Andrew Shafer),「敏捷系統管理」運動(Patrick DeBois),「精益創業」運動(Eric Ries),Jez Humble的持續集成和發布運動,以及Amazon的「平台即服務運動」等這些運動的相輔相成和相互促進而發展起來的。

DevOps的合著者John Willis寫了一個非常好的帖子在這裡:itrevolution.com/the-co

2. DevOps與敏捷有哪些不同?

相對於瀑布開發模式,敏捷開發過程的一個基本原則就是以更快的頻率交付最小化可用的軟體。在敏捷的目標里,最明顯的是在每個Sprint的迭代周期末尾,都具備可以交付的功能。

部署的高頻率經常會導致部署堆積在IT運維的面前。StreamStep公司的創始人,Clyde Logue總結過一句話:「敏捷對於開發重新獲得商業的信任是大有益處的,但是它無意於將IT運維拒之門外,DevOps使得IT組織作為一個整體重新獲得商業的信任」。

DevOps和敏捷軟體開發是相輔相成的,因為它拓展和完善了持續集成和發布流程,因此可以確保代碼是生產上可用,並且確實能給客戶帶來價值。

DevOps不僅僅創建了一個面向IT運維的工作流,當代碼已經開發完成但是卻無法被部署到生產上時,這些部署就會堆積在IT運維的面前,客戶也將因而無法享受到任何價值,更糟糕的是,部署經常導致IT環境的中斷和服務不可用。

DevOps具有與生俱來的文化變革的基因組成,因為它革新了開發和IT運維之間的工作流和傳統的衡量標準。John Willis和Damon Edwards(兩位都是《DevOps Cookbook》合著者)就這個話題寫過很多文章:

itrevolution.com/devops

3. DevOps與ITIL和ITSM有什麼不同?

儘管很多人視DevOps為ITIL和ITSM的顛覆,而我則有著不同的看法,在支撐IT運維的業務流程方面,ITIL和ITSM流程無疑還是最好的。實際上,他們描述了需要被IT運維支持的功能集合,這些功能集合足以支撐DevOps式的工作流。

敏捷和持續集成以及持續發布是開發的輸出,這些輸出同時作為IT運維的輸入,為了適用跟DevOps相關的快速部署的節奏,ITIL流程的很多方面,特別是圍繞著變更、配置和發布流程方面,需要自動化。

DevOps的目標不僅只是增加變更的頻率,而且也支持在不中斷和破壞當前服務的基礎上,確保功能部署成功,同時也可以快速檢測和修復缺陷。這引入了服務設計,事故和問題管理方面的ITIL新準則。

4. DevOps和可視運維如何搭配

2004年,我與Kevin Behr以及George Spafford合著了《The Visible Ops Handbook》,可視運維是一個說明性的指南,該指南使得高性能IT運維能順利實現「從優秀到卓越」的轉變,關鍵點之一是如何控制和減少計劃外的工作。

在開發和IT運維之間,DevOps不僅聚焦在創建快速和穩定的計劃工作流,而且DevOps也有一個更全面的方法來系統的消除計劃外工作,定義開發彈性準則,並負責管理和減少技術債務。

5. DevOps的基本原則

在《The Phoenix Project: A Novel About IT, DevOps, and Helping Your Business Win》和《DevOps Cookbook》的書里,我們描述了DevOps的支撐原則——「DevOps三個基本點」,所有的DevOps模式都可以源自這3個基本點。

第一個基本點強調整個系統的性能,而非將性能局限於特定的工作領域裡,這個工作領域可以大到一個部門(例如開發和IT運維)或者小到一個個人貢獻者(例如開發者,系統管理員等)。

重點是由IT推動的的業務價值流,換句話說,它始於需求定義(比如被業務或IT部門定義),進行開發構建,又交給IT運維,最後價值以一種服務的形式交付給客戶。

實踐第一個基本點的結果——決不傳遞一個已知缺陷至下游,決不因小失大,總是致力於改進流程,執著於深刻理解系統需求(根據戴明的理論)

第二個基本點是關於創建從右至左的反饋迴路,幾乎所有的流程改進計劃的目標都是縮短和放大反饋迴路,以便可以持續進行必要的修正。

應用第二個基本點的結果——包括理解和回應所有內部和外部客戶,縮短和放大所有的反饋迴路,必要時,非常容易的嵌入客戶需要的知識。

第三個基本點是打造一種文化用來促進兩件事情——持續不斷的探索精神,勇擔風險的精神以及從成功和失敗中來學習的能力,同時也得謹記:重複和實踐是融會貫通的前提。

這兩件事情對我們來說同等重要,探索精神和勇擔風險的精神可以確保我們持續改進,它甚至意味著我們可能到達了之前曾未到過的危險區域,因此這也迫使我們去學習,掌握並融會貫通那些技能,因而使得我們能夠順利離開危險區。

第三個基本點的結果——分配時間去改進每天的例行工作,培養一種獎勵冒險精神的風氣,同時主動引入故障到系統中,從而提高彈性。

6.DevOps模式的應用領域

在《DevOps Cookbook》里,我們將DevOps模式分成4個領域,

領域一,將開發延伸至生產中——包括拓展持續集成和發布功能至生產,集成QA和信息安全至整個工作流,確保代碼和環境可在生產中直接部署,。

領域二,向開發中加入生產反饋——包括建立開發和IT運營事件的完整時間表用於幫助事件的解決,使得開發融入無指責的生產反思,儘可能使得開發可以自助服務,同時創建信息指示器用來表明本地的決策如何影響全局的目標。

領域三,開發嵌入到IT運維中——包括開發投入到整個生產問題處理鏈,分配開發資源用於生產問題管理,並協助退回技術債務,而且開發為IT運維提供交叉培訓,增加IT運維處理問題的能力,從而降低升級問題的數量。

領域四,將IT運維嵌入至開發——包括嵌入和聯絡IT運維資源至開發,幫助開發創建為IT運維(部署,生產代碼的管理等)使用的可重用的用戶故事,定義一些可以被所有項目共用的非功能性需求。

7. DevOps的價值

我相信企業在應用了DevOps之後可以得到3個業務優勢:產品快速推向市場(比如,縮短開發周期時間和更高的部署頻率),提高質量(比如,提高可用性,提高變更成功率,減少故障,等等)並提高組織的有效性(比如,將時間花在價值增加活動中,減少浪費,同時交付更多的價值至客戶手中)。

產品快速推向市場:

2007年,在IT流程協會,在評測了超過1500個IT組織結構之後,我們得出結論:相比較於一般的組織,高效的IT組織的效率要高出5到7倍。變更要多出14倍,變更故障率只有前者的1/2,第一次修復率要高出4倍,而且一級事故時間要短10倍。 重複審計發現要少4倍,通過內部控制來檢測漏洞方面要高出5倍左右,並且8倍於前者的項目到期日表現!

在我們的研究中,觀察到的最高部署頻率大約是每周1000次生產變更,變更成功率為99.5%,我們認為這真得很快……

其中一個高績效的特點是,最好正在繼續變得更好。這絕對是發生在部署頻率的領域內。 在應用了DevOps實踐的組織正表現出更快的快速部署和實施,而且相比於一般組織要快幾個數量級。

埃森哲最近做了一個研究:互聯網公司都在做什麼? 通過亞馬遜的記錄顯示,他們在保持目前每周部署1000次的情況下,同時還能保證99.999%的成功率!

youtube.com/watch?

slideshare.net/slidesho)

維持高部署率(即,快速的迭代次數)的能力轉化為業務價值的兩種主要方式:

組織如何快速的把一個想法變成價值交付到客戶手中(比如,Damon Edwards 和John Willis說得「概念到落地」),組織同時可以做多個嘗試。

對我來說,如果我在一個每9個月才能部署一次的機構里,而我的競爭對手可以每天部署10次,那麼無疑我將有著明顯的競爭劣勢。

高頻率部署也實現了快速和持續不斷的部署。Intuit公司的創始人,Scott Cook一直在組織的各個層面,不停的倡導「犀利創新文化」,我最喜歡的例子之一就記錄在network.intuit.com/2011

「每一位員工應該能夠做到快速,高速的交付……Dan Maurer負責我們的消費者部門,包括TurboTax網站。當他接手的時候,我們一年只做幾次部署,但是通過營造一個犀利的創新文化,在報稅季節的3個月里,他們現在能做165次部署。商業價值? 網站轉化率高達50%。員工價值?這幫傢伙們真得喜愛它,因為可以將他們的想法很快交付到市場中」

對我來說,Scott Cook的故事最令人震驚的是,他們在繁忙的報稅季節做所有這些部署!在旺季,大多數組織都會凍結任何變更(例如,從十月到一月,零售商可能經常有變更凍結)。但如果在旺季,若你能提高轉換率,而你的競爭對手不能,那麼這就是一個真正的競爭優勢。

達到這個效果的前提就是,在不影響客戶的基礎上,可以快速的完成並部署很多小的變更。

減少IT浪費總量:

Mike Orzen和我很早就談到了IT價值流中的巨大浪費,這些浪費是緣起於交付期限延長,不良的交接,計劃外工作和返工。基於Michael Krigsman的一篇文章,在應用了DevOps的原則之後,可以挽回很多價值而非浪費。

我們計算過,如果能夠減少一半的IT浪費量,然後把這些省下來的錢重新投資,若能得到5倍的投資回報,那麼每年可以產生30萬億美元的價值。

這就是溜過我們指尖的巨大的價值和機會。佔了全球GDP的4.7%,甚至超越整個德國的經濟產出。

我覺得這真的很重要,尤其是當我想到我的三個孩子將繼承的這個世界,這些浪費對生產率,生活水平和經濟繁榮的潛在影響正在不斷增加,讓我覺得不得不改變。

然而,還有一個更大的成本,在大部分的IT組織結構里,工作是吃力不討好和令人沮喪的,人們覺得他們自己就像被困在一部不斷重複的恐怖電影里,無法改變最終的結局。管理人員本應將IT管理的很好,但是他們放棄了這樣的職責,直接導致開發,IT運維與信息安全之間無休止的部門衝突,而審計師的出現只會讓事情變得更糟。

長期來說,必然的結果就是進步遲緩。IT專業人士的生活往往令人泄氣和沮喪的,通常導致滲透在生活方方面面的無力感和高壓狀態。IT專業人員面臨著壓力相關的健康問題、社交問題、宅在家裡等問題,這樣使得他們不但不健康,同時生活也很可能難以為繼。

作為人,我們註定就是去貢獻,感覺就好像我們正在積極發揮作用,與眾不同。但是,往往當IT專業人員向他們的組織尋求幫助的時候,他們會得到回答:「你不明白」,更糟的是,他們甚至會得到「你不重要」這樣的待遇。

8. 信息安全和QA如何融入DevOps工作流

DevOps的高部署頻率通常會給QA和信息安全帶來很大的壓力,考慮這樣一種情形,開發每天部署10次,而信息安全通常需要4個月的時間來評估應用的安全。很顯然,在代碼開發和代碼安全審計方面的速率一點都不匹配。

2011年Dropbox故障就是一個著名的例子,其體現了未經充分測試的開發代碼帶來的風險有多大。因為這次事故,認證功能被關閉了4個小時,從而導致未授權的用戶可以訪問所有存儲的數據。

當然對QA和信息安全來說,也不全是壞消息, 開發會通過持續集成和好的發布慣例(持續測試的文化)來維持高頻率部署。換句話說,一旦代碼被提交,自動測試便開始運行,而且一旦發現問題,必須馬上解決,就像開發人員在檢查還沒編譯的代碼。

通過集成功能測試,集成測試和信息安全測試到開發的每天例行工作中,問題將會被更快發現,同時也會被更快解決。

同樣,也有著越來越多的信息安全工具,比如Gauntlet和Security Monkey, 可以幫助我們在開發和上線的過程中測試安全對象,達到信息安全目標。

但是也有一個很重要的問題需要考慮,靜態代碼分析工具通常需要花費很長時間才能運行完,以數小時或天記。在這種情況下,信息安全就必須註明特定的有安全隱患的模塊,比如加密,認證模塊。只要這些模塊變化,一輪全面的信息安全測試就運行,否則部署就可以繼續,而不需要全覆蓋信息安全測試。

需要特別提到的一點是,我們觀察到,相較於標準的功能單元測試,DevOps工作流依賴於檢測和恢復更多一點。換句話說,當然開發以軟體套件的方式交付的時候,那麼部署變更和補丁就比較困難,同時QA也嚴重依賴代碼測試來驗證功能的正確性。另一方面,當軟體以服務的形式交付,缺陷就可以被很快修復。而且QA也可以減少測試依賴,取而代之的更多依賴缺陷的生產監控,只要缺陷能被快速的修復。

代碼故障恢復可藉助於「功能標籤」等手段,通過以配置的形式來啟用或禁用某些代碼功能,從而達到避免推出一個全功能部署,而只部署通過測試的功能至生產。

當功能不可用或性能出現下降等較壞的情況發生的時候,依賴於檢測和恢復進行QA將會一種更好的選擇。但是當面對損失保密性或數據和系統一致性的時候,我們就不可以依賴檢測和恢復這種方法。取而代之的是,在部署之前,必須進行充分的測試,否則可能導致重大的安全事故。

9. 我最喜歡的DevOps模式一

通常,在軟體開發項目中,開發都會用完所有計劃中的時間用於開發功能。這樣會導致無法充分解決IT運維的問題,於是他們就在定義,創建和測試資料庫、操作系統、網路、虛擬化等代碼依賴的方面直接抄捷徑,以此節省時間。

所以這就是開發和IT運維以及次優結果之間的永恆的緊張關係的主要原因。後果很嚴重,比如不適當的定義和指定環境、無法重部署、代碼和環境的不兼容等等。

在這種模式下,我們會再開發過程的早期提出環境要求,並強制代碼和環境必須被一起測試的策略,一旦使用敏捷開發方法,我們可以做到非常簡潔和優雅。

按敏捷的要求,在每個迭代結束後,我們就會發布能運行且可被部署的代碼,通常時間為兩周。我們將修改敏捷迭代周期策略,不僅僅只交付能運行且可被部署的代碼,同時在每個迭代周期的早期,還必須準備好環境用於部署這些代碼。

由此,我們不再讓IT運維負責創建生產環境的規格要求,取而代之的,建立一個自動化的環境創建流程,這種機制不僅僅只創建生產環境,同時也包括開發和QA環境。

通過使得環境早期即可用,甚至可能早於軟體項目開始之前,開發和QA可以在統一和穩定的環境中運行和測試他們的代碼,從而控制不同環境之間的差異。

此外,通過保持不同階段(例如,開發、QA、集成測試、生產)儘可能小的差異,在生產部署之前,我們就能發現並修復代碼和環境之間的互操作性問題。

理想情況下,我們建立的部署機制是完全自動化的。可以使用像Shell腳本、Puppet、Chef、Soaris Jumpstart、Redhat Kickstart、Debian Preseed等等很多工具來完成。

10. 我最喜歡的DevOps模式二:

BrowserMob前CEO,Patrick Lightbody曾經說過,「當我們在凌晨2點叫醒開發工程師來解決問題時,缺陷被修復的比以前更快了,這真是一個驚人的反饋迴路」,

這是我最喜歡的引用之一。

它強調了問題的關鍵點,開發一般會在周五的5點提交代碼,然後高高興興的回家,而IT運維則要花費一整個周末來收拾殘局。更糟的是,缺陷和已知錯誤在生產上不斷遞歸,迫使IT運維不停的救火,而根本原因從不被修復,造成這種現象的原因就是開發總是關注開發新功能。

第二種模式的一個重要要素就是縮短和放大反饋迴路,使得開發更貼近客戶體驗(包括IT運維和最終用戶)

注意這裡的對稱性,模式一討論的儘早讓環境統一併可用即是將IT運維嵌入到開中發,而模式二則為將開發嵌入到IT運維中。

我們將開發嵌入進IT運維的問題升級鏈中,可以將他們放在三級支持中,甚至使開發對整個代碼的部署成功負責。要麼回滾,要麼修復缺陷,直到服務恢復。

我們的目標不是讓開發取代IT運維,相反,就是想確開發看到他們工作和變更的下游變化,激勵他們以IT運維的視角來更快的解決問題,從而達到一個全局的目標。

11. 我最喜歡的DevOps模式三:

在開發和IT運維之間DevOps價值流中,另一個經常發生的問題就是不夠規範。這方面的例子是,每個部署都帶有其特殊性,因此也使得每次部署後的環境帶有特殊性,一旦這樣的事情發生,那麼這個組織里就沒有針對流程配置的控制。

在這種模式下,我們定義可重用且可跨多個項目的部署流程,敏捷方法里有個很簡單的解決方案。就是將部署的活動變成一個用戶故事。例如,我們為IT運維構建一個可重用的用戶故事,叫做「部署到高可用環境」,這個用戶故事定義了明確的構建環境的步驟、需要多長時間、需要哪些資源等等。

那麼這些信息可以被項目經理用來集成部署內容到項目計劃中去。例如,如果我們知道在過去的3年時間裡,「部署到高可用環境」用戶故事被部署了15次,每次的平均部署時間為3天,加或減一天,那麼我們對自己的部署計劃將會非常有信心。

此外,我們還可以因部署活動被合適的集成到軟體項目中而獲得信心。

我們也得認識到有些特定的軟體項目要求特別的環境,且其不被IT運維官方支持,我們可以允許這些被生產允許的環境中的例外,但是被IT運維部門外面的人提供支持的。

通過這種方法,我們即獲得了環境標準化的好處(比如,減少生產差異,環境更一致,IT運維的支持和維護能力增加),又能再允許的特殊情況下,提供業務需要的靈活性。


推薦閱讀:

移動互聯網時代,如何挖掘門店價值?
【韋瑋Python分享合集】如何快速掌握Python編程基礎實戰?這裡有你掌握Python編程世界的秘鑰!
學插花、繪畫、書法,對生活品質有哪些提高?
軟體項目開發,全系列規範及約束文件
定製化軟體的優點

TAG:運維 | 軟體開發 | DevOps |