DevOps 組織設(shè)計(jì)
?前言
要基于 DevOps 構(gòu)建 DevOps 平臺(tái)體系,需要深入理解 DevOps 的目標(biāo),厘清 DevOps 體系中的能力和職責(zé),設(shè)計(jì)適合自身實(shí)際情況的 DevOps 組織,這樣才能讓生產(chǎn)關(guān)系適應(yīng)新的生產(chǎn)力的要求,促進(jìn)企業(yè)生產(chǎn)效率的提升。
開發(fā)最終依賴于運(yùn)維團(tuán)隊(duì)的敏捷響應(yīng)能力。如果運(yùn)維做不到敏捷,開發(fā)的敏捷對(duì)整個(gè)應(yīng)用生命周期來說,價(jià)值就沒那么大。而運(yùn)維通常追求的是穩(wěn)定,能不變更就不變更,因?yàn)槊看蔚母淖兌济媾R著不確定性,面臨著意外異常,影響著績(jī)效、評(píng)價(jià)和客戶滿意度。因此需要通過合理的組織和職責(zé)設(shè)計(jì)來平衡運(yùn)維和研發(fā)的利益訴求,通過自動(dòng)化的工具和自服務(wù)在保障業(yè)務(wù)穩(wěn)定性的同時(shí)來提升運(yùn)維的敏捷性,以匹配研發(fā)的敏捷響應(yīng)需求。
理解 DevOps 的目標(biāo)
DevOps 是一種思想、理念和方法論,以其來構(gòu)建的工具、平臺(tái)、組織、應(yīng)用系統(tǒng)等都是這個(gè) DevOps 體系的一部分。DevOps 的目標(biāo)是平衡開發(fā)效率和穩(wěn)定運(yùn)維之間的利益分歧。既要追求研發(fā)的敏捷變更和交付,也要保障運(yùn)行環(huán)境和業(yè)務(wù)應(yīng)用的穩(wěn)定與可靠。因此筆者在最早建設(shè)容器云平臺(tái)的時(shí)候,就強(qiáng)調(diào) “ 以應(yīng)用管理為核心 ” 實(shí)現(xiàn)業(yè)務(wù)應(yīng)用運(yùn)行支撐環(huán)境的穩(wěn)定和可靠。只有這樣,才能實(shí)現(xiàn)研發(fā)的敏捷,保障運(yùn)維的可靠。Google SRE 為什么強(qiáng)調(diào)站點(diǎn)可靠性?而國(guó)內(nèi)大多數(shù)所謂的 DevOps 平臺(tái)只考慮交付流水線、以及指標(biāo)管控等研發(fā)過程,實(shí)和 DevOps 的目標(biāo)有些背離。無論研發(fā)多么敏捷,如果運(yùn)維做不到敏捷和穩(wěn)定,一切都是徒勞的。
如何實(shí)現(xiàn)敏捷研發(fā)和穩(wěn)定運(yùn)行
研發(fā)追求的敏捷交付和運(yùn)維追求的穩(wěn)定運(yùn)行之間是存在一定矛盾的。軟件的質(zhì)量往往取決于研發(fā)人員的個(gè)人素質(zhì),不過人的思維總是有局限的,所以軟件總會(huì)有缺陷的。不是說敏捷交付一定會(huì)帶來缺陷,但卻無法保證不帶來缺陷。在應(yīng)用開發(fā)和運(yùn)維由不同的團(tuán)隊(duì)人員來負(fù)責(zé)的時(shí)候,環(huán)境的每次變動(dòng)都可能帶來意外和異常,因此,對(duì)運(yùn)維人員來說,不變動(dòng)才是最佳的選擇。人都有本能的避重就輕逃避傾向,這也是很多公司業(yè)務(wù)上線流程很復(fù)雜的原因之一。只有理順了彼此的關(guān)系,解決了矛盾,才能實(shí)現(xiàn)敏捷研發(fā)和業(yè)務(wù)的穩(wěn)定運(yùn)行。如同 Google SRE 一樣,可以在業(yè)務(wù)應(yīng)用穩(wěn)定運(yùn)行之前由開發(fā)來維護(hù)和運(yùn)維, SRE 只提供環(huán)境和工具支撐,這樣開發(fā)導(dǎo)致的變更異常由開發(fā)負(fù)責(zé)。業(yè)務(wù)穩(wěn)定運(yùn)行之后交給運(yùn)維來負(fù)責(zé)日常的維護(hù)。
研發(fā)的敏捷依賴于運(yùn)維的敏捷響應(yīng)
準(zhǔn)確的說,研發(fā)的敏捷依賴于運(yùn)維的敏捷響應(yīng)。如果運(yùn)維設(shè)置很多的流程和步驟,研發(fā)再怎么敏捷也沒有意義。運(yùn)維不只是應(yīng)用運(yùn)維,還有基礎(chǔ)設(shè)施資源、安全、網(wǎng)絡(luò)等,任何一個(gè)地方有阻礙,都會(huì)帶來瓶頸和阻礙。比如說,應(yīng)用的部署運(yùn)行需要服務(wù)器、需要開通防火墻、需要配置 IP 地址、需要上線申請(qǐng)等,如果有一堆的流程需要申請(qǐng)審批,這個(gè)時(shí)間可能就需要好幾天。在這幾天里,研發(fā)可能已經(jīng)迭代發(fā)布好幾個(gè)版本了,但是發(fā)布再多的版本也無法及時(shí)更新上線,就是因?yàn)檫\(yùn)維做不到敏捷響應(yīng)。因此, DevOps 建設(shè)的關(guān)鍵是首先確保穩(wěn)定的情況下實(shí)現(xiàn)運(yùn)維的敏捷。這就需要消除團(tuán)隊(duì)之間協(xié)作的繁瑣流程,合理設(shè)置 DevOps 團(tuán)隊(duì),使運(yùn)維支撐團(tuán)隊(duì)通過自服務(wù)能力來賦能上層團(tuán)隊(duì),實(shí)現(xiàn)秒級(jí)或分鐘級(jí)的響應(yīng)能力。比如申請(qǐng)?zhí)摂M機(jī),可能會(huì)涉及網(wǎng)絡(luò)域、 IP 、網(wǎng)段、防火墻端口等,如果能實(shí)現(xiàn)自服務(wù)化,幾分鐘就可以完成虛擬機(jī)的申請(qǐng)、創(chuàng)建、配置和交付,會(huì)極大的提升效率。再者比如說應(yīng)用的部署運(yùn)維,通過容器化 PaaS 平臺(tái),自動(dòng)調(diào)度匹配資源、自動(dòng)彈性伸縮、自動(dòng)故障恢復(fù),用戶無需關(guān)注服務(wù)運(yùn)行在哪里,無需運(yùn)維管理服務(wù)器,通過 PaaS 平臺(tái)的可觀測(cè)能力可以隨時(shí)掌握應(yīng)用的運(yùn)行狀況,通過 PaaS 平臺(tái)的可管理能力隨時(shí)進(jìn)行應(yīng)用的變更和配置調(diào)整。這就極大的提升了應(yīng)用的敏捷性。
實(shí)現(xiàn)敏捷自服務(wù),減少團(tuán)隊(duì)之間的交互
要實(shí)現(xiàn)敏捷,重要的一點(diǎn)是往往需要考慮團(tuán)隊(duì)之間的低交互。這就是為什么敏捷研發(fā)團(tuán)隊(duì)總是強(qiáng)調(diào)幾人小團(tuán)隊(duì)的原因。DevOps 體系中涉及各個(gè)團(tuán)隊(duì)和眾多系統(tǒng)和工具,總的團(tuán)隊(duì)規(guī)模是無法縮減的,那么要實(shí)現(xiàn)敏捷,減少團(tuán)隊(duì)之間的交互,就需要實(shí)現(xiàn)自服務(wù)的能力,賦能上層團(tuán)隊(duì),使其實(shí)現(xiàn)自助(向上賦能)。在 DevOps 體系建設(shè)中,運(yùn)維需要根據(jù)運(yùn)維的職能職責(zé)進(jìn)行分層,比如基礎(chǔ)設(shè)施資源運(yùn)維、平臺(tái)工具運(yùn)維、應(yīng)用運(yùn)維、業(yè)務(wù)運(yùn)營(yíng)等?;A(chǔ)設(shè)施資源運(yùn)維為平臺(tái)工具運(yùn)維提供自服務(wù)的資源申請(qǐng)、擴(kuò)容、維護(hù)能力;平臺(tái)工具運(yùn)維為應(yīng)用運(yùn)維提供資源服務(wù)、平臺(tái)工具服務(wù)能力,比如通過容器云 PaaS 提供應(yīng)用的托管、部署、運(yùn)維自服務(wù)能力;而應(yīng)用運(yùn)維為業(yè)務(wù)運(yùn)營(yíng)團(tuán)隊(duì)提供應(yīng)用服務(wù),業(yè)務(wù)團(tuán)隊(duì)可以使用這些應(yīng)用系統(tǒng)服務(wù)終端客戶。
DevOps 體系職責(zé)設(shè)計(jì)
理解了 DevOps 的目標(biāo),來規(guī)劃設(shè)計(jì) DevOps 體系職責(zé),作為劃分定義 DevOps 組織的基礎(chǔ)和參考。以標(biāo)準(zhǔn)化交付來銜接開發(fā)和運(yùn)維,便于實(shí)現(xiàn)自動(dòng)化的 CI 、 CD 流程;以基礎(chǔ)設(shè)施資源、平臺(tái)工具、應(yīng)用運(yùn)維需求進(jìn)行分層,實(shí)現(xiàn)自服務(wù),向上賦能;用 DevOps 全局、頂層視角來規(guī)劃應(yīng)用、工具、平臺(tái)、資源、團(tuán)隊(duì)、架構(gòu)等才能真正體現(xiàn)其價(jià)值。這有點(diǎn)類似于 PMO 的職責(zé)。
標(biāo)準(zhǔn)化交付、研發(fā)和運(yùn)維自動(dòng)化
DevOps 最重要的就是協(xié)調(diào)研發(fā)和運(yùn)維的關(guān)系,滿足彼此的訴求。通過標(biāo)準(zhǔn)化交付(比如鏡像),實(shí)現(xiàn)研發(fā)和部署流程的自動(dòng)化,無需開發(fā)和運(yùn)維之間的溝通和交互。應(yīng)用研發(fā)和應(yīng)用運(yùn)維可以是一個(gè)團(tuán)隊(duì)來完成,也可以是兩個(gè)獨(dú)立團(tuán)隊(duì),共同完成應(yīng)用生命周期管理過程。在這個(gè)過程中需要眾多的工具和自動(dòng)化能力的支撐,比如說異常、 bug 的反饋與修復(fù)等,使之成為一個(gè)應(yīng)用生命周期管理閉環(huán)。
自服務(wù)賦能,分層實(shí)現(xiàn)向上支撐
在 DevOps 設(shè)計(jì)時(shí),筆者一直強(qiáng)調(diào)分層,很重要的就是通過分層來厘清職責(zé),實(shí)現(xiàn)自服務(wù),向上賦能。這也是 DevOps 設(shè)計(jì)的重要參考。比如說筆者一直強(qiáng)調(diào)通過多云管理平臺(tái)管理各種基礎(chǔ)設(shè)施資源,給容器云平臺(tái)提供各種資源服務(wù)、支持彈性伸縮、按需調(diào)度。傳統(tǒng)運(yùn)維幾乎從服務(wù)器資源、網(wǎng)絡(luò)存儲(chǔ)配置、環(huán)境、數(shù)據(jù)庫中間件、應(yīng)用服務(wù)等什么都負(fù)責(zé),是一種豎井的管理方式,難以實(shí)現(xiàn)敏捷的彈性和快速響應(yīng),也帶來很多的冗余和浪費(fèi)。通過分層自服務(wù),封裝了底層細(xì)節(jié),實(shí)現(xiàn)共享和復(fù)用,也帶來了效率。
全局架構(gòu)、應(yīng)用、服務(wù)規(guī)劃團(tuán)隊(duì)
在設(shè)計(jì) DevOps 組織時(shí),筆者覺得最重要的一個(gè)團(tuán)隊(duì)是全局的規(guī)劃團(tuán)隊(duì)。不止要做架構(gòu)規(guī)劃,也要考慮項(xiàng)目、應(yīng)用、服務(wù)等規(guī)劃,厘清項(xiàng)目之間的聯(lián)系和關(guān)系,定義項(xiàng)目依賴性和優(yōu)先級(jí),明確團(tuán)隊(duì)之間的職責(zé)界線和需要提供的服務(wù)能力,構(gòu)建企業(yè)可復(fù)用中臺(tái)服務(wù),提升復(fù)用效率。SRE 側(cè)重于運(yùn)維端的穩(wěn)定性,沒有從全局進(jìn)行考量,不過做為初始的 DevOps 組織設(shè)計(jì)也無不可。但如果要真正理順 DevOps 體系之間的關(guān)系,還是需要一個(gè)中心化的頂層設(shè)計(jì)團(tuán)隊(duì)來進(jìn)行規(guī)劃設(shè)計(jì)。
DevOps 組織設(shè)計(jì)
按照前面的討論, DevOps 組織可以從服務(wù)層次上進(jìn)行設(shè)計(jì)劃分,比如基礎(chǔ)設(shè)置資源運(yùn)維團(tuán)隊(duì)、平臺(tái)環(huán)境運(yùn)維團(tuán)隊(duì)、應(yīng)用生命周期管理團(tuán)隊(duì)(可再分應(yīng)用研發(fā)、應(yīng)用測(cè)試、應(yīng)用運(yùn)維團(tuán)隊(duì)等)及業(yè)務(wù)運(yùn)營(yíng)團(tuán)隊(duì)(業(yè)務(wù)團(tuán)隊(duì))。
基礎(chǔ)設(shè)施資源運(yùn)維團(tuán)隊(duì)
基礎(chǔ)設(shè)施資源運(yùn)維團(tuán)隊(duì)主要職責(zé)是保障服務(wù)器、虛擬機(jī)、網(wǎng)絡(luò)、存儲(chǔ)等資源的穩(wěn)定運(yùn)行和供給??梢酝ㄟ^統(tǒng)一的資源管理平臺(tái)或多云管理平臺(tái)來為上層平臺(tái)、中間件工具等提供資源服務(wù)。比如說虛擬機(jī)服務(wù)、 GPU 服務(wù)、網(wǎng)絡(luò) IP 服務(wù)、網(wǎng)段服務(wù)、 NAS 存儲(chǔ)服務(wù)、對(duì)象存儲(chǔ)服務(wù)等等。這些資源需要構(gòu)建為可復(fù)用的資源池,按需使用,其實(shí)就是云計(jì)算的思想。至于和傳統(tǒng)網(wǎng)絡(luò)域劃分沖突的問題,可以考慮通過能力封裝來解決,對(duì)上層透明。
平臺(tái)、工具、環(huán)境運(yùn)維團(tuán)隊(duì)
平臺(tái)主要是指應(yīng)用運(yùn)行支撐平臺(tái)比如容器云平臺(tái)、容器化 PaaS 平臺(tái)等;工具指 Kafka 、 ES 、 Redis 、 MySQL 等中間件;環(huán)境等基于這些平臺(tái)工具所構(gòu)建的開發(fā)、測(cè)試、生產(chǎn)等環(huán)境。這些都是由運(yùn)維團(tuán)隊(duì)來進(jìn)行管理和維護(hù)。為應(yīng)用研發(fā)團(tuán)隊(duì)提供平臺(tái)服務(wù)、工具服務(wù)和環(huán)境服務(wù)。這些服務(wù)能力其實(shí)也就是企業(yè)要構(gòu)建的中臺(tái)服務(wù)能力,各個(gè)業(yè)務(wù)所復(fù)用和共享的。由于各種工具平臺(tái)很多,每個(gè)工具平臺(tái)都可能需要相應(yīng)的運(yùn)維人員來負(fù)責(zé),所以平臺(tái)工具及環(huán)境運(yùn)維團(tuán)隊(duì)可能需要根據(jù)實(shí)際情況來進(jìn)行設(shè)置,可以分成幾個(gè)小的團(tuán)隊(duì),也可以作為一個(gè)大的團(tuán)隊(duì),比如基于容器云平臺(tái)的監(jiān)控、日志、認(rèn)證、權(quán)限、消息、緩存、安全等形成一個(gè)統(tǒng)一的平臺(tái)服務(wù)團(tuán)隊(duì)。
應(yīng)用運(yùn)維、測(cè)試、開發(fā)團(tuán)隊(duì)
應(yīng)用生命周期過程中涉及開發(fā)、測(cè)試、運(yùn)維等職責(zé)。DevOps 提倡開發(fā)運(yùn)維一體化(并不是既做開發(fā)又做運(yùn)維),將開發(fā)運(yùn)維作為一個(gè)整體來考慮,實(shí)現(xiàn)應(yīng)用生命周期的平滑閉環(huán):持續(xù)集成、持續(xù)部署、持續(xù)交付、持續(xù)監(jiān)控、持續(xù)反饋。這個(gè)生命周期過程需要應(yīng)用運(yùn)行平臺(tái)、中間件工具、運(yùn)行環(huán)境等的支撐。應(yīng)用研發(fā)、測(cè)試和運(yùn)維不需要去關(guān)心基礎(chǔ)設(shè)施資源、平臺(tái)、工具、環(huán)境搭建,只是使用,類似于 SaaS 服務(wù),這樣就會(huì)簡(jiǎn)單很多。SRE 在應(yīng)用穩(wěn)定運(yùn)行之后會(huì)接手運(yùn)維,讓研發(fā)人員有更多的時(shí)間去做業(yè)務(wù)研發(fā),這很好的解決了研發(fā)人員關(guān)鍵能力釋放的問題。研發(fā)可能不止一個(gè)團(tuán)隊(duì),可能有很多業(yè)務(wù)研發(fā)團(tuán)隊(duì),但運(yùn)維可以不必那么多。研發(fā)和運(yùn)維團(tuán)隊(duì)總體上來說還是可以職責(zé)分開的。
業(yè)務(wù)運(yùn)營(yíng)團(tuán)隊(duì)
業(yè)務(wù)運(yùn)營(yíng)團(tuán)隊(duì)也就是業(yè)務(wù)團(tuán)隊(duì),使用運(yùn)行中的業(yè)務(wù)應(yīng)用系統(tǒng)服務(wù)終端客戶。在使用過程遇到問題能夠便利的反饋到應(yīng)用研發(fā)團(tuán)隊(duì),及時(shí)改進(jìn)變更,形成閉環(huán),不斷提升客戶體驗(yàn)和客戶滿意度。
總的來說, DevOps 組織設(shè)計(jì)需要深入理解 DevOps 建設(shè)的目的和目標(biāo),合適和設(shè)置 DevOps 組織職責(zé),指導(dǎo) DevOps 組織設(shè)計(jì)。通過分層賦能,明確層次職責(zé)劃分,減少部門和團(tuán)隊(duì)之間的交互,形成交付與使用反饋、評(píng)價(jià)閉環(huán),整個(gè)公司的 DevOps 組織架構(gòu)就相對(duì)很清晰。各個(gè)團(tuán)隊(duì)以滿足其上層團(tuán)隊(duì)需求為己任,提供自服務(wù)的能力?;谑褂梅答伜驮u(píng)價(jià),促進(jìn)工具和能力的持續(xù)改進(jìn),從而提升效率,實(shí)現(xiàn)運(yùn)維的敏捷響應(yīng),以匹配研發(fā)的敏捷。
汪照輝,中國(guó)銀河證券架構(gòu)師,專注于容器云、微服務(wù)、DevOps、數(shù)據(jù)治理、數(shù)字化轉(zhuǎn)型等領(lǐng)域,對(duì)相關(guān)技術(shù)有獨(dú)特的理解和見解。擅長(zhǎng)于軟件規(guī)劃和設(shè)計(jì),提出的“平臺(tái)融合”的觀點(diǎn)越來越得到認(rèn)同和事實(shí)證明。發(fā)表了眾多技術(shù)文章探討容器平臺(tái)建設(shè)、微服務(wù)技術(shù)、DevOps、數(shù)字化轉(zhuǎn)型、數(shù)據(jù)治理、中臺(tái)建設(shè)等內(nèi)容,受到了廣泛關(guān)注和肯定。