https://zhuanlan.zhihu.com/p/87598465
最近有一位朋友和我聊職業發展方向問題,聊了很多 DevOps 和 SRE 話題。 我幾年前剛接觸這兩個概念時也經常將之混淆,惋惜當時沒有人來解答我困惑。 如今這雖然已經極爲流行,可是我發現我這位朋友對這兩個職位還存在一些誤區。 因而我給了一些看法並整理成文章以饕大衆。ios
最多見的誤區:數據庫
DevOps 是字面上 Dev 開發 / Ops 運維二者組合, 嚴格意義上 DevOps 以下(via DevOps - Wikipedia):後端
DevOps(Development 和 Operations 的組合詞)是一種重視「軟件開發人員(Dev) 」和「IT 運維技術人員(Ops)」之間溝通合做的文化、運動或慣例。
SRE 全稱是 Site Reliability Engineering,最先是由 Google 提出,而且在其工程實踐中發揚光大。 他們還出了一本同名書籍「Site Reliability Engineering」, 讓這個理念在互聯網工程師圈子裏普遍傳播。服務器
Google 對 SRE 解釋是(via Site Reliability Engineering - Wikipedia):網絡
Site reliability engineering (SRE) is a discipline that incorporates aspects of software engineering and applies that to operations whose goals are to create ultra-scalable and highly reliable software systems.
我將其翻譯翻譯爲中文:多線程
網站穩定性工程師是致力於打造「高擴展、高可用系統」,並將其貫徹爲原則的軟件工程師。
從定義來看,DevOps 是文化、運動和慣例,而 SRE 是有嚴格任職要求的職位。 文化是軟性定義,文化有更多概念能夠捏造,而 SRE 定義精準,就少了想象空間(也可能 SRE 門檻高 😄)。 按 Google 給出的說法是,SRE 工程師實踐了 DevOps 文化。這個觀點沒錯,可是國內的 DevOps 逐步獨立出 DevOps 工程師, 因此在本文,我着重討論的是 DevOps 工程師和 SRE 工程師兩種職位對比。架構
互聯網需求催生了 DevOps 。在最傳統軟件企業中,是隻有 Dev 沒有 Ops, 那時 Ops 可能仍是隻是技術支持人員。開發按照瀑布流:需求分析、系統設計、開發、測試、交付、運行, 傳統軟件發佈是一個重量級操做。一旦發佈,Dev 幾乎再也不直接操做。 80 後可能會記得 QQ 每一年都會有一個大版本發佈吧,QQ 2000 / 2003 / 2004 等等。 此時 Ops 不用和 Dev 直接高頻接觸,甚至針對一些純離線業務,壓根沒有設立 Ops 這個崗位。併發
互聯網浪潮以後,軟件由傳統意義上桌面軟件演變爲面向網站、手機應用。 這時候業務核心邏輯,好比交易,社交行爲都不在用戶桌面完成,而是在服務器後端完成。 這給互聯網企業給予了極大操做空間:隨時能夠改變業務邏輯,這促進了業務快速迭代變動。 但即使這樣,Dev 和 Ops 是極其分裂的兩個環節。Ops 不關心代碼是如何運做的,Dev 不知道代碼如何運行在服務器上。app
當業界還沉浸在能夠每週發佈版本喜悅中時,2009 年,Flicker 提出了天天發佈 10+ 次概念,大大震撼了業界。 Flicker 提出了幾個核心理念:負載均衡
真是讓人不可思議,今天各類培訓公司和一些知名大 V 在呼喚這些 DevOps 理念, 居然在 2009 年一份幻燈片中就展示淋漓盡致。經典老是不過期,在塵封下閃耀着智慧光芒。 有些人將 DevOps 和運維自動化等同,這是隻看到表象。 DevOps 目標是提升業務系統交付速度,併爲之提供相關工具、制度和服務。 一些我的或培訓機構添油加醋和衍生含義,都是圍繞這 DevOps 本質而發散。
接下來聊聊 SRE 歷史, SRE 出現要晚一些。在 2003 年時候 Google 的 Ben Treynor 招募了幾個軟件工程師,這個團隊設立目的是幫助 Google 生產環境服務運行更穩定、健壯、可靠。 不一樣於中小型規模公司,Google 服務於十幾億用戶服務,短暫服務不可用會帶來致命後果。 所以 Google 走在了時代最前面,SRE 產生了。 這個職位爲大規模集羣服務,小型團隊不須要這樣職位設定(可能也招不起真正 SRE 😊)。 Google 在探索若干年以後,SRE 團隊開始將本身心得體會寫在線上,並在 2016 年將此書出版。
如今很多公司將 DevOps 職能單獨抽取出來,稱之爲 DevOps 工程師。 那讓咱們看看 DevOps 工程師關心什麼:DevOps 文化目的是提交交付速度, DevOps 工程師就天然會關心軟件 / 服務的整個生命週期。 一個簡單的公式:速度 = 總量 / 時間,添上工程行業術語,即 交付速度 = ((功能特性 * 工程質量) / 交付時間) * 交付風險。
功能特性交給產品經理和項目經理管理,DevOps 工程師須要關心剩下幾個因素:工程質量 / 交付時間 / 交付風險。 DevOps 工程師職能以下:
SRE 關鍵詞是「高擴展性」「高可用性」。高擴展性是指當服務用戶數量暴增時, 應用系統以及支撐其服務(服務器資源、網絡系統、數據庫資源)能夠在不調整系統結構,不強化機器自己性能 ,僅僅增長實例數量方式進行擴容。高可用性是指,應用架構中任何環節出現不可用時,好比應用服務、網關、數據庫 等系統掛掉,整個系統能夠在可預見時間內恢復並從新提供服務。固然,既然是「高」可用, 那麼這個時間通常指望在分鐘級別。SRE 職能能夠歸納爲如下:
職責不一樣致使兩個職位工做內容也不盡相同,我將 DevOps 工程師和 SRE 工程師職能列舉以下:
頗有趣的對比,DevOps 和 SRE 都會關心應用生命週期,特別是生命週期裏面中變動和故障。 可是 DevOps 工做內容是主要爲開發鏈路服務,一個 DevOps Team 一般會提供一串工具鏈, 這其中會包括:開發工具、版本管理工具、CI 持續交付工具、CD 持續發佈工具、報警工具、故障處理。 而 SRE Team 則關注更爲關注變動、故障、性能、容量相關問題,會涉及具體業務,產出工具鏈會有: 容量測量工具、Logging 日誌工具、Tracing 調用鏈路跟蹤工具、Metrics 性能度量工具、監控報警工具等。
DevOps 首先是一種文化,後期逐漸獨立成一個職位;SRE 一開始就明確是一個職位; 很多同窗把 DevOps 和 SRE 搞混,是被二者表象鎖迷惑,看上去這二者都有的工具屬性、自動化要求也類似。 甚至有一些開發同窗把這類運維工做都統一理解爲:服務器 + 工具 + 自動化。這是盲人摸象,管中窺豹。
從技能上來講,二者都須要較強的運維技能。 在職業發展天花板上,DevOps 可能缺少 SRE 在一些專業領域的技能: 計算機體系結構能力;高吞吐高併發優化能力;可擴展系統設計能力;複雜系統設計能力;業務系統排查能力。 二者都須要軟實力,可是 SRE 面臨複雜度更高,挑戰更大,要求也更高:
DevOps 具備廣泛意義,現代互聯網公司都須要 DevOps,可是並不是全部團隊對高可用性、高擴展性存在需求,它們不須要 SRE。 DevOps 工程師掌握相關技能以後,也有機會能夠發展爲 SRE 工程師。 而一位合格 SRE 工程師,在有選擇狀況下面,我相信不會去轉型爲 DevOps 工程師。
從專業背景來看,不管是 DevOps 仍是 SRE 工程師,都須要研發背景,前者須要開發工具鏈,後者須要有較強架構設計經驗。 若是有運維工程師想轉型成爲 DevOps 或者 SRE,那麼須要補上相關技術知識。 畢竟,不是會搭建一套 Jenkins + Kubernetes 就能夠自稱爲 DevOps / SRE 工程師。
怎麼樣,有沒有解開這幾個常見誤區呢?但願你看到這裏能夠豁然開朗,最後附上兩個工程師的技能點, 指望有志成爲這兩種工程師的同窗,加油努力。
DevOps:
SRE: