什麼是DevOps?

什麼是DevOps?

【51CTO精選譯文】如果你對IT管理感興趣,尤其是對Web運維感興趣,那麼最近一定會注意到“DevOps”這一熱詞的出現。現在#DevOps標籤頻繁出現在微博客Twitter上,同時DevOps相關的技術交流聚會也在慢慢增多。

在許多方面,DevOps是一個集合性概念,指的是能夠理順開發和運維之間相互配合關係的任何事物(51CTO編輯注:在英文中,Developer指開發者,Operations指運維,所以DevOps一詞本身含有開發+運維的意思)。但是DevOps背後的理念要比上述說法更深遠。

什麼是DevOps?

人們越來越意識到傳統意義上的開發行爲和運維行爲存在脫節現象,從而導致衝突和低效,因此DevOps應運而生。

正如李·湯普森(Lee Thompson)和安德魯·謝福爾(Andrew Shafer)所言,在開發和運維之間存在一面“混亂之牆”。相互衝突的動機、流程和工具導致了這面“牆”的存在。

相互衝突的動機、流程和工具導致了這面“牆”的存在
開發與運維之間的“混亂之牆”

以開發爲中心的人通常認爲,變化會帶來回報。企業依靠他們來應對不斷變化的需求。因此他們被鼓勵儘可能進行變革。

而運維人員則往往視變化爲敵人。企業依靠他們維持正常業務運維和實施讓企業賺錢的服務。由於變化會影響穩定性和可靠性,運維業務有理由對它說不。我們已經多次聽到過如下統計數字:在所有宕機事件中有80%情況是源於自殺式的改變(根據51CTO之前進行的調查,很多時候,僅僅是給系統應用補丁就會造成生產服務器無法正常重啓)。

開發人員和運維人員認識世界的方法,以及各自所處的角色,存在根本性的差別。他們都認爲自己的做法是正確的。的確,孤立的來看他們都是正確的。

更糟糕的是,開發和運維團隊通常處於公司組織架構的不同部分,通常具有不同管理者的和競爭關係,而且通常工作在不同的地點。

開發和運維團隊通常處於公司組織架構的不同部分
開發與運維通常工作在不同的地點

讓混亂之牆更堅固的還包括開發和運維工具之間的錯位。看一下開發者要求和日常使用的常見工具,再看一下系統管理員,你會發現兩者存在很大不同,開發人員沒有興趣使用運維人員的工具,反之亦然;而且兩部分工具之間也不存在重要的集成。即使在某些工具類型上有一些重疊之處,使用方式也完全不同。

開發者要求和日常使用的常見工具
開發與運維常用工具的不集成

當應用程序變動需要從開發團隊推向運維團隊時,混亂之牆的存在則將變得更加明顯。有人將其稱爲一個“版本發佈(Release)”,有人則稱其爲一次“部署(deployment)”,但有一件事情是公認的,問題可能會隨之而來。下圖雖然是一個抽象化場景,但是如果你經歷過這一過程,一定會感覺到它的真實性。

版本發佈與部署
應用程序變動從開發到運維

開發人員把一個軟件版本“扔”給牆對面的運維人員。後者拿到該版本產品後開始準備將其部署。運維人員手動修改由開發者提供的部署腳本或創建自己的腳本。他們還需要修改配置文件來適應與開發環境大不相同的真實生產環境。最完美的情況是,他們重複在此前環境中已完成的工作;而糟糕的情況是,他們將引入或發現新的漏洞。

運維人員然後開始進行他們自認爲正確的部署過程。由於開發和運維之間的腳本、配置、過程和環境存在差別,這一部署過程實際上也是首次被執行。當然,期間如果發生一個問題,開發人員會被要求來幫助進行排障。運維人員會說開發團隊給的產品存在問題。而開發人員則會迴應稱該產品在他們的環境下運行良好,因此一定是運維人員在部署的過程中做錯了什麼。由於配置、文件存儲位置和過程的不同,開發人員診斷問題也並非一件易事。

沒有一個可靠的方式來把環境回滾到此前已知的正常狀態。本來應該一帆風順的部署過程最後變成一場救火行動,經過反覆測試之後才讓生產環境恢復到正常狀態。

本來應該一帆風順的部署過程最後變成一場救火行動
本來應該一帆風順的部署過程最後變成一場救火行動

部署階段已經非常明顯的需要DevOps理念來解決問題,但需要DevOps的絕不僅僅是這一階段。正如約翰·阿爾斯帕瓦(John Allspaw)所指出的那樣,開發和運維之間的協作需求在部署之前就已存在,同時也會在部署之後的長時間之內繼續存在。

DevOps所帶來的好處

DevOps是一個非常強大的概念,因爲它可以在衆多不同層面上產生共鳴。

從開發或運維的一線人員的觀點來看,DevOps可以讓他們從衆多煩惱中解脫出來。它雖然不是具有魔力的萬靈藥,但是如果你能夠讓DevOps奏效,則會節省大量時間,而且不至於打擊自己的士氣。顯而易見,投入精力將DevOps落到實處,我們應該會更加高效、更加敏捷和減少挫敗感。有些人可能會反駁稱DevOps是一個遙不可及的目標,但這並非說我們不應該去嘗試實現它。

DevOps會節省大量的時間
DevOps會節省大量的時間

對於企業來說,DevOps直接有助於實現兩個強大戰略性企業品質,“業務敏捷性”和“IT融合”。它們可能不是IT人士所擔憂的事情,但是卻應該獲得掌握財政大權的管理者的注意。

IT融合的一個簡單定義是,“企業渴望達到的一個狀態,能夠高效的使用信息技術來達到企業目標——通常是提高公司業績或市場競爭力。”

通過從共同企業目標角度出發來校準開發和運維的職責和流程,DevOps有助於實現IT融合。開發和運維人員需要明白,它們僅僅是一個統一業務流程中的一部分。DevOps思想確保個體決策和行爲應力求支持和改進這個統一的業務流程,無論你是來自哪一個組織架構。

DevOps有助於實現IT融合
DevOps有助於實現IT融合

業務敏捷性的一個簡單定義是,“一個機構以高效、經濟的方式迅速適應市場和環境變化的能力。”

當然對於開發人員來說,“敏捷”有專門的含義(參考51CTO開發頻道的專題:初探敏捷開發),但目標是非常類似的。敏捷開發方法旨在保持軟件開發工作與客戶/公司的目標同步,儘管需求不斷變化,也可以產生高品質軟件。對於多數機構來說,迭代項目管理方法Scrum是敏捷的代名詞。

Scrum
Scrum

業務敏捷性承諾,在企業權益集團作出決策和開發者進行響應之間能夠緊密互動和快速反饋。看一下一家運轉良好的敏捷開發團體的產品,你會看到一個與業務需求保持一致的穩定持續改進。

但是,當你從企業角度回顧一下整個開發-運維週期,敏捷方法的相關優勢通常會變得非常模糊。混亂之牆導致了應用程序生命週期的分裂。開發和運維分別按照不同的節奏進行。實際上,產品部署之間的長期間隔使得一個團體的敏捷工作變成了它一直試圖避免的瀑布生命週期。當存在混亂之牆時,無論開發團體有多麼敏捷,改變企業緩慢和遲鈍的特點是極其困難的。

敏捷開發與企業結構的不同步
敏捷的開發與瀑布式企業結構的步調不同

DevOps使得敏捷開發的優勢可以體現在機構層面上。通過考慮到快速、反應靈敏但穩定的業務運維,使其能夠與開發過程的創新保持同步,DevOps可以做到這一點。

如果你希望在自己的組織內建立一個DevOps項目,務必牢記“IT融合” 和“業務敏捷性”。

如何將DevOps落到實處?

和多數新出現的話題一樣,發現問題的共性特點要比找到解決方案容易的多。

要想實現DevOps相關解決方案,以下三方面需要關注:

1、評價和鼓勵改變文化

改變文化和激勵系統從來不是一件易事。但是,如果你不改變企業文化,兌現DevOps的承諾將非常困難。考察一個企業的主導文化時,你需要緊密關注如何評價和判斷企業業績。評價的內容將影響和刺激行爲的發生。開發-運維生命週期中的所有當事方需要明白,在更大的企業流程中自己只是其中一部分。個體和團隊的成功都要放在整個開發-運維生命週期內來進行評價。對於許多機構來說,這是一個轉變,不再是孤立的來進行業績評價,每一個團隊不再是基於自己的團隊來評價和判斷業績好壞。

2、統一標準化的流程

這是DevOps的一個重要主題,整個開發-運維生命週期必須被看作一個端對端過流程。流程的不同階段可以採取不同的方法,只要這些流程可以被組合到一起創建一個統一的流程。與評價和激勵的問題相似的是,實現這個統一的流程時每個組織可能會有略微不同的需求。

3、統一的工具

這是大多數DevOps討論一直在關注的領域。這一點不令人吃驚,因爲當技術專家在考慮解決一個問題時,第一反應往往就是直接跳轉到工具討論上。如果你關注Puppet、Chef或ControlTier等工具社區,那麼你可能已經意識到人們對在開發和運維工具之間建立橋樑的重大關注。“基礎設施即代碼(Infrastructure as code)”、“模型驅動自動化(model driven automation)”和“持續性部署(continuous deployment)”都是可以劃歸DevOps旗下的概念。

關於把DevOps變爲現實需要哪些類型的工具,傑克·索羅夫曼(Jake Sorofman)提出如下建議:

一個版本控制軟件庫

它可以確保所有系統產品在整個版本發佈生命週期中被很好的定義,且能夠實現一致性共享,同時保持最新信息。開發和QA機構能夠從中取得相同平臺版本,生產機構部署已經被QA機構驗證過的相同版本。

深層模型系統

它的版本系統清晰的描述了軟件系統相關的所有組件、策略和依賴性,從而可以簡單的根據需要複製一個系統或在無衝突的情況下引入變化。

人工任務的自動化

在依賴關係發現、系統構造、配置、更新和回滾等過程中,減少人工干涉。自動操作變爲高速、無衝突和大規模系統管理的命令和控制基礎。

在從開發到運維的生命週期中存在許多不同的工具。工具選擇和執行決策需要根據它們對端到端生命週期的影響來決定。

關於DevOps的澄清

現在某些系統管理員正在試圖把自己的崗位名稱改爲“DevOps”。但是,DevOps不應該是一個單一的位置或職稱。把DevOps變成一個新職位名稱或特定角色是一件非常危險的事情。例如這會導致以下錯誤端點:你是一個DBA?或者是一個安全專家?那麼不用擔心DevOps,因爲那是DevOps團隊的問題。

設想一下,你不會說“我需要招聘一個Agile”或“我需要招聘一個Scrum”或“我需要招聘一個ITIL”,而只是會說需要招聘瞭解這些概念或方法的開發人員、項目經理、測試人員或系統管理員。DevOps也是同樣道理。

與DevOps具有相同理念的術語很多,例如敏捷運維(Agile Operations)、敏捷基礎設施(Agile Infrastructure)和Dev2Ops。還有很多人雖然沒有提及“DevOps”,但卻在遵循着類似的理念。

原文:http://dev2ops.org/blog/2010/2/22/what-is-devops.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章