什麼是 DevOps?看這一篇就夠了!

一、前因

我是一個 “DevOps 工程師”,於是總會遇到有人問我:“什麼是 DevOps?”

這個問題看似特別基礎,基礎到很多人懶得回答。但其實冷靜一秒,問自己一句 “什麼是 DevOps?” 可能每個 DevOps 工程師都知道“什麼是 DevOps”,但是他們給出的答案不盡相同。

所以我會怎麼回答這個呢?下面我們展開來聊聊。

特別強調:本文僅代表我個人現階段的粗淺認知,本文觀點不代表思碼逸公司也不代表 DevStream 團隊。

二、記憶

我第一次看到 DevOps 這個詞,大概是在 2016 年的秋天。那時候我在 H3C 從事雲計算研發相關工作。記得我接到的第一個任務是研究 OpenStack 的一個 CICD 相關的組件,叫做 Solum,那是我第一次知道什麼是 CICD,第一次看到 DevOps 這個詞。沒錯,只是看到 DevOps,但是我無法記住 DevOps 的定義。或者說,當時我甚至沒有找到一個清晰易懂的關於 DevOps 的定義。可能很多人和我當年一樣,對 DevOps 的印象,就是 Dev + Ops

2018 年的夏天,我開始在太保成研任雲平臺 PaaS 組負責人,兼任太保雲 CMO(Configuration Management Officer) 一職。沒錯,我依舊是一個 “雲平臺研發工程師”,但是再一次與 DevOps 結緣。太保雲的 CMO,簡單說就是負責太保雲平臺的源碼管理、研發協作流程、版本管理、CICD、製品管理、發版流程等等。這個時候我其實已經開始研究一些 DevOps 相關的工具了,比如 GitLab、Jenkins、禪道、Artifactory、Nexus 等等;同時也在主導一些 DevOps 文化層面的建設,比如怎樣的模式或行爲在團隊裏是被鼓勵的,怎樣的事情是被禁止的…… 不過我只是在制定規則,而沒有意識到這是“文化”。總之,那幾年我也算是投身於 DevOps,致力於提升團隊研發效率、交付效率與交付質量,但是同時我沒有去仔細思考過“什麼是 DevOps?” 這個問題,我也沒有刻意去思考過自己是不是在玩 DevOps。

去年 (2021 年) 年底,我加入了思碼逸,我的 title 第一次從 “xxx 雲平臺研發工程師” 變成了“xxx DevOps 工程師”(xxx 表示初級、中級、高級等)。那天我開玩笑說:“以前,我在雲原生領域兼職玩 DevOps;以後,我在 DevOps 領域兼職玩雲原生”。

好吧,這會我是名正言順的 “xxx DevOps 工程師” 了,我總該知道 “什麼是 DevOps” 吧!

三、他們說……

我們先來看一下幾家典型的公司是如何定義他們眼中的 DevOps 的,包括:

3.1、Atlassian 回答 “什麼是 DevOps?”

Atlassion 有一篇題爲 DevOps 的文章,裏面有這樣一句話:

DevOps is a set of practices, tools, and a cultural philosophy that automate and integrate the processes between software development and IT teams. It emphasizes team empowerment, cross-team communication and collaboration, and technology automation.

我嘗試翻譯一下:DevOps 是一系列實踐工具和一個融合開發及 IT 團隊的文化理念。DevOps 強調賦能團隊、跨團隊溝通與協作以及技術自動化

可以看到 Atlassian 給的等式是:

DevOps = 工具 + 實踐 + 文化

Atlassian 還提到一個 DevOps 團隊包含了開發和 IT 運維,大家一起協作,共同參與產品的整個生命週期,一起爲提升軟件質量和加速軟件開發過程而努力。DevOps 模式下開發和運維不再是獨立的 “筒倉”,而是幾乎被整合成一個團隊,這個團隊的工程師技術棧會覆蓋開發、測試、運維等。同時 DevOps 團隊會利用一系列的 DevOps 工具鏈來實現諸如持續集成、持續發佈、流程自動化、高效協作等等目的。

Atlassion 給的 “無窮環” 長這樣:

DevOps Lifecycle from Atlassion

用 “無窮環” 表示 DevOps 生命週期,是因爲 DevOps 的根本理念是“持續”,也就是“沒有終點”。Atlassion 將整個 DevOps 生命週期分成 6 個階段,分別是:

另外從這個環裏我們還能看到 Atlassian 想強調溝通與協作是貫穿 DevOps 生命週期全過程的

3.2、微軟回答 “什麼是 DevOps?”

微軟這篇 Introduce the foundation pillars of DevOps: Culture and Lean Product 我特別喜歡!這個標題的意思是 “介紹 DevOps 的基柱:文化和精益產品”。

文章第一句話:

DevOps is the union of people, process, and products to enable continuous delivery of value to our end users.

DevOps 是人、過程和產品的結合,使能持續地向終端用戶交付價值

微軟還提到:

Typically, the goal for Development is to deliver more features faster, and the goal of Operations is to achieve better system stability. DevOps aligns these disciplines by using a framework of best practices proven to increase speed to market while improving system stability.

多數情況下,開發的目標是快速發佈更多的新特性,而運維的目標是保證更高的系統可用性。DevOps 通過切實可行的最佳實踐體系來拉齊這兩個目標,在提升系統穩定性的同時加速產品交付到市場的速度。

這裏微軟可以看到微軟給的第一個等式:

DevOps = 人 + 過程 + 產品

然後微軟從 “人 + 過程 + 產品” 進一步提煉了 DevOps 的 4 大基柱:文化、精益產品、架構和技術

也就是:人 + 過程 + 產品 -> 文化、精益產品、架構 + 技術

微軟給的 “無窮環” 長這樣:

DevOps Lifecycle from Microsoft

圖裏描繪的 DevOps 生命週期還是分成 6 個階段,分別是:

外加貫穿整個 DevOps 生命週期全過程的 “協作(Collaboration)”。

在圖外,微軟還定義了對其而言 DevOps 的 8 大能力:

每次看到這裏我總覺得微軟的圖該更新一版

另外微軟有一句特別有深度總結:

What is new? Continuous Everything. The process is a journey and requires a growth mindset to continually evolve and improve.

“Continuous Everything”,鏗鏘有力!微軟強調 DevOps 過程是一段沒有終點的旅途,要求我們抱着成長的觀念模式,持續地改進,永不滿足。

3.3、AWS 回答 “什麼是 DevOps?”

不難猜到,AWS 也有一篇文章來回答 “What is DevOps?”

DevOps is the combination of cultural philosophies, practices, and tools that increases an organization’s ability to deliver applications and services at high velocity.

DevOps 是文化理念、實踐和工具等的組合,能夠提升一個組織快速交付應用和服務的能力

這裏 AWS 給了一個等式:

DevOps = 文化 + 實踐 + 工具

不過這篇文章裏 AWS 不落俗套,沒有畫一個自己的 “無窮環”,而是給了這樣一張圖:

DevOps Lifecycle from AWS

這裏提到了:

還可以看到這個 “交付管道” 和“反饋環”連接的是 “企業” 和“客戶”,可見 AWS 希望強調“DevOps 的目的是更快地向客戶交付”。

四、DevOps 文化

我曾一度片面以爲 DevOps 要解決的問題就只是工具問題,也就是如何選擇或者開發好用的 DevOps 工具 or 平臺,從而提升企業內部整個研發生命週期的運行效率。不記得是哪一天,我突然有一個強烈的想法:工具只是工具而已,文化建設纔是成敗的關鍵!

文化決定了我們如何去做事,工具決定了,決定了啥?可能啥也決定不了。因爲我認爲工具也是被文化所決定的。

4.1、什麼是文化?

簡單說,文化就是一個組織的社交遺產,也就是一個組織對於其成員的各種行爲的響應模式。

比如當我們說一個企業有 “加班文化” 時,其實是在說在這個企業內,員工加班會得到獎賞,而不加班會受到懲罰。或者我們說一個企業是“狼性文化”、“奮鬥者文化”…… 不同的文化背後對應的也就是這個企業對於員工不同行爲的不同響應模式。

一個企業的文化決定了在這個企業內:

  1. 什麼事情是對的,什麼事情是錯的;

  2. 什麼事情是重要的,什麼事情是不重要的;

  3. 什麼事情是值得做的,什麼事情是不值得做的。

所以文化決定了一個企業會去招聘哪些人,會開除哪些人,會提拔哪些人

看到這裏可能你已經在思考自己呆過的企業對員工有哪些要求,在鼓勵什麼,在懲罰什麼…… 沒錯,此刻在你腦海中閃現的一幕幕就是企業文化。

4.2、什麼是 DevOps 文化?

這幅圖大家肯定都不陌生:

DevOps Lifecycle

什麼是 DevOps 文化?

其實從這幅圖中我們就能看到文化的影子。我們都知道 DevOps 強調打通開發團隊與運維團隊的壁壘,要求兩個團隊拉齊認知與責任,不再各自爲戰,而是一起爲更快地交付更高質量的產品而努力。沒錯,這就是最基礎的 DevOps 文化。

那麼如何拉齊認知與責任呢?

首先可以確認的是,我們在組織架構上直接融合 Dev 和 Ops 團隊,這並不是一個 DevOps 團隊。人是不是坐在一起,改變的只是溝通的效率。這裏我想強調兩點:

  1. 責任共擔,在一個 DevOps 模式組建團隊裏,每個人都需要爲軟件開發交付的整個生命週期而負責;

  2. 技能共享,通過持續學習,互相學習,讓本是傳統 Dev 的工程師學習 Ops 的技能,同時傳統 Ops 的工程師也需要學習 Dev 的技能。

Dev 與 Ops 互相學習彼此領域技能,每個人都懂開發又懂運維,抱着 “成長的觀念”,持續學習,不滿足於當前已掌握的技術棧。

但是我們也需要意識到不能要求每個工程師都精通開發與運維,這是不可能的。這裏說的 Dev 掌握 Ops 能力,更多的是 Dev 能夠藉助完善的工具鏈從而掌握 “應用運維” 的能力,能夠在自己完成開發之後,有能力和權限將應用部署上線,同時線上應用出問題後,能夠直接對其負責,定位、修復、更新升級等。而一些基礎設施的運維能力需要獨立出來考慮,比如機房裏的局域網配置、虛擬機掛 NAS 盤等傳統運維能力。

同理 Ops 需要理解應用開發的生命週期,知道 Dev 的痛點,尤其是在流程上的痛點,比如怎樣提升應用的構建速度,怎樣優化應用的 cd 流程等,Ops 要關注應用的 “生產過程”,進而發力去優化這個過程或相應的工具,讓應用能夠更可靠更快速地完成 cicd 流程等,更容易地部署上線或者對外交付。也就是說我們並不是要求 Ops 也去寫業務代碼,而是協助 Dev 去解決業務代碼之外的痛點,讓 Dev 能夠更加專注於業務功能實現。

最後,一個 DevOps 模式組件的團隊中每個人都爲整個軟件研發生命週期的速度和質量負責,每個具體的角色就像一個大頭釘,底部很寬,代表着技術面廣,關注整個軟件研發生命週期的所有環節;同時頂部很高,在某個環節裏專注,做好做精。

DevOps 成功落地的關鍵是什麼?

我們前面說到的 “其樂融融” 的場景,我們希望 Dev 和 Ops 能夠互相學習,共擔責任,一起爲更快更好地交付產品而努力。但是,工程師們爲什麼要這樣做?他們的動力在哪裏?

4.3、領導與激勵

Gartner 曾出過一個分析報告,表明在 2023 年,90% 的 DevOps 改革將會失敗(相較於預期)。而失敗的主要原因是領導層管理方法的侷限。

其實這是顯而易見的,DevOps 可以稱爲一種 “改革”,而很多人是牴觸“變化”,牴觸“新事物” 的。比如 DevOps 鼓勵接受失敗,快速失敗,從失敗中學習經驗,進而在更長的時間維度上爭取更大的成功。但是可能你遇到的剛好是一個 “失敗懲罰型” 領導,那麼你的團隊就會懼怕失敗,從而放棄創造與嘗試新技術,選擇安於現狀。

一個技術團隊的領導首先自己需要懂技術,有豐富的經驗,這是基礎要求。但是除此之外,更重要的是團隊領導能夠激勵整個團隊,去發揮整個團隊的主觀能動性,讓所有團隊成員都能夠有動力持續學習,快速學習,同時也能夠敢於失敗,快速失敗且不懼怕失敗,把失敗當做一個學習的機會,進而不斷成長,讓整個團隊的戰鬥力能夠越來越強。

所以領導怎樣激勵工程師呢?

福利?比如一些大廠提供的免費零食或者定期的下午茶?免費的咖啡或者午餐?

沒錯,作爲一個工程師,這一切的福利都會讓其開心,但是其實無法激勵其更加認真努力地工作。工程師的薪資水平普遍不低,所有這些零食也好,咖啡也好,大概率不會到其月薪的零頭。同理,工程師找工作時,看重的也絕不會是一個企業是否提供免費午餐和下午茶。

那麼工程師看重的是什麼?

在選擇一家企業的時候,可能工程師第一個考慮的是薪資,剩下的可能是成長的空間、工作內容是否感興趣等等等等。但是進入一家公司以後,真正開始工作的時候,工程師看重的是什麼?我認爲可能是:

我們逐個來解釋一下。

1. 精通

我們在某個工作方向做的好,我們擅長某個技術方向,進而很好地完成相應的工作,這時候我們會有一種成就感,滿足感,我們會覺得自己得心應手,同時大概率會獲得認可,讚揚,因此接下來的時間裏我們就更加願意在這個方向上繼續努力,做的更好。也就是說一個工程師能夠有機會專注於自己精通的技術上發力,那麼他大概率會感受到激勵。

反例是什麼呢?比如你是一個 Java 工程師,但是你的領導擅長 PHP,並且覺得 PHP 是世界上最好的語言,於是要求整個團隊轉向使用 PHP,這時候你會放棄自己研究多年的 Java 技術棧,努力學習 PHP 並決心幹出一番成績嗎?

2. 自驅

我們希望組建一個學習型、創造型的團隊,每個人能夠持續成長,樂於創新,自我驅動。這就需要領導能夠允許團隊花時間去學習,去輸入,而不是一味地輸出,每時每刻彙報自己寫了幾行代碼。同時這也要求領導自身勇於接受新事物,擁抱變化,而不是 “不求有功,但求無過”。舉個例子:假如你的領導最擔心的是線上應用出事故,並且他認爲穩定的第一要素就是不要引入新技術,新工具,那麼這時候你的領導也不會在意你是不是有時間學習,也不會允許你花時間去研究新技術,因爲這一切只會帶來不穩定。如果領導害怕失控,因而拒絕創新,那麼這樣的團隊成員也就只能滿足於實現日復一日的常規需求開發迭代,而不會享受技術,自我驅動,擁抱創新。

3. 目標

顯而易見,團隊每個成員都需要知道自己爲什麼做?目的是什麼?目標是什麼?而不是領導心裏藏着一個目標,然後簡單地指揮團隊成員完成一件件具體的零散的工作項。如果團隊成員只知道今天需要完成事務 A,明天需要完成事務 B,而不知道爲什麼要做,最終要做成什麼樣,那麼大家只會滿足於機械地完成任務,而不會有動力追求 “如何做得更好”。

五、總結

所以 DevOps 是什麼?

我嘗試給出我的答案:

DevOps 是一種文化理念、工具與實踐的結合,目的是更快更可靠地向用戶持續交付價值。其中最重要的是文化,文化要求 Dev 和 Ops 團隊責任共擔,目標一致,也要求整個團隊持續學習,抱着成長的心態,Continuously Everything。其次 DevOps 離不開高效的工具集,工具是自動化的基礎。最後我們要在各個環節追求最佳實踐,不管是工具的使用,還是團隊的協作模式,溝通方法上面。

最後,關於標題 “什麼是 DevOps?看這一篇就夠了!”,我想告訴你,DevOps 文化裏不存在 “夠了”,所以我不得不承認,我撒謊了。本文只代表我個人現階段的粗淺認知,我建議你查閱更多的資料,持續學習,永不滿足。當然如果本文對你有一點點的幫助,那麼我很滿足。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/zLNMD9hDzt9iIl0vcVBSXA