近期有很多文章在探討運維崗位去留的問題,我主持的SRETalk公眾號裡也發了多個維運總監的觀點,個人也和業界挺多人做了交流,有些許小小的想法,記錄下來,供各位CTO/CIO參考,作為運維/SRE的你如果覺得迷茫,也推薦你仔細讀本文。
我自認為這是一個深度的思考了,可能很枯燥,但對擇業和團隊建立都會有些幫助。本文歡迎有理有據的討論,不歡迎槓精,另外,很多事情其實也沒有非黑即白,文章內容對你有些啟發,對CXO們的決策帶來新的思考,那就是極好的。
另外,SRETalk的維運總監訪談還會繼續,還會有更多不同的觀點持續輸出,供大家參考,而我的觀點,不一定對,也是僅供參考哈。
先說標題,《如何建立維運/SRE能力》,這裡我沒有寫搭建團隊,而是建構能力,因為有些目標的達成未必一定需要自建團隊,從成本、結果可預見性、長期投入維護的角度來看,需要慎重決策,決策錯了,未來將是一地雞毛,這個後文再展開。
另外一點也要事先澄清,文中提到的維運/SRE團隊都是為業務服務的,業務的成功是第一要務。有些維運團隊做了一些產品在對外商業化輸出,本身成了一條業務,這個另當別論,而且,以我在老東家的經驗來看,運維/SRE團隊這樣的做法(對外商業化輸出)不可取,尤其是在一個沒有ToB基因、沒有相應的ToB組織建設的公司。
既然一切都是為了業務成功(不考慮業務,只考慮自己能否晉升能否忽悠老闆的另當別論),我們就重點來看業務需要哪些維運能力(後文詳細講解),需要從哪裡取得這些運維能力,典型的取得方式有三種。
首先是透過自建團隊提供相關能力,這個方式大家最為熟悉,自建的團隊對業務的交付物通常包括兩個部分:產品服務。先說產品:
其次就是服務,這裡所謂的服務,說的是向業務端輸出的專家經驗。例如自建團隊做了一個監控產品,這個團隊需要給公司內部的「客戶」輸出監控的最佳實踐、監控產品出問題的時候需要這個團隊快速解決。其實,公司內部的中後台團隊需要有很強的服務意識,同時還得了解行業最佳實踐,否則,就容易被業務牽著鼻子走,走出了和行業最佳實踐背道而馳的路子,後面,就都是問題了。
服務的核心,是靠人(當然,能把最佳實踐固化到產品裡,那自然是極好的),作為管理者,要想讓這個團隊輸出好的服務,就需要考慮很多人的問題,例如:能否招募相關的人才、能否留住相關的人才(發展空間、薪資等)、自建團隊每個方向至少兩個人互備,成本是否可以接得住。
透過第三方供應商取得維運能力,是另一個路子,供應商的交付物顯然也包括兩個部分:產品 服務。產品分為開源、閉源兩種類型,有哪些考慮點呢?
其次是服務,供應商比起自建的團隊,通常會有優勢。原因如下:
另外說一下成本問題,供應商的收費大概率是比自己招人(前提是招到合適的人)來的划算,否則的話,商業邏輯不成立。這個道理顯而易見不再贅述。
從第三方供應商取得運作能力,看起來是碾壓自建團隊的,所以,後面的文章還用讀麼?其實也不盡然,對於某個運維能力,到底更看重的是產品能力,還是服務能力,你最需要的是產品能力還是服務能力,需要case by case 的看,後文,我會從業務側需要的各個面向的維運能力分別拆解。
維運本質是一類技術支撐能力,跟基礎架構團隊很像,有些活放到維運團隊是可以的,放到基礎架構團隊問題也不大,甚至有些公司直接把這類人放到業務研發團隊,我們暫且不管分工的問題,先來整理一下業務需要什麼樣的技術支撐能力。
這張圖其實已經很能說明問題了,我再稍微囉嗦一下:
上面談及的四個能力,應該如何取得?下面我們就掰開了揉碎了講一講。
首先說基礎硬體環境,顯然有兩種選擇,上雲or 自建,如果是政策有要求必須自己折騰,那沒有辦法,以政策為準。如果可以自行選擇,現在這個時代,大機率是上雲比較合適,除非公司體量很大,機器量很大,自建才可能有優勢。注意,我這裡說的是才可能,算成本的時候切記要把人力成本算上,別只算了硬體的成本。
關於擇業:對於系統維運工程師、網路維運工程師,看起來並不是個好消息,雲的出現確實搶佔了一部分這類崗位的空間,沒辦法,時代的車輪滾滾向前,大家都是歷史的塵埃。
再說元件,像是MySQL、Redis、MongoDB、Kafka、ElasticSearch、Nginx、Kubernetes等等,顯然有3種選擇,使用雲端PaaS產品or 自己折騰or 自己出硬體供應商出方案和服務。針對每種選擇,我們分別做點評:
關於擇業:各組件的資深老炮,第一選擇是去雲廠商工作或創業輸出經驗,第二選擇去自建組件的大廠,普通中小廠,很難有高薪,畢竟第三方的專家服務性價比不低。
業務研發最常做的變更是二進位、配置的變更,當然,還有對基礎環境以及元件的變更需求。
我們先說二進位、配置的變更,怎麼做才能又快又安全的迭代呢?可以分階段,公司還比較小的時候,不用太關注工具的建設,只需要定好規範和流程。規範方面例如:部署在哪個帳號下,哪個目錄下,日誌怎麼放,進程怎麼託管,任何變更必須能夠可回滾等等,流程方面比如:變更通報機制、多模組協同上線機制、無法回滾的需要有審批機制等等。
然後,需要有歷史變更的量化數據,例如某個團隊最近一個季度有多少次變更,回滾率如何,故障率如何,各個團隊有個對比,做的不好的團隊就會在下個季度好好改善的。
當公司繼續變大,就可以投入人力做變更類的平台,把規範制度落實到平台上,產出量化數據,因為不同的公司情況各異,在傳統的物理機虛擬機時代,很少看到有商業化的變更系統。當然,Kubernetes起來之後,屏蔽掉了底層的許多差異,基於Kubernetes做變更平台通用性強了很多,開始有相關的產品出來。
生產環境的變更,和測試環境、聯調環境的變更還不太一樣,生產環境對穩定性要求比較苛刻,測試環境、聯調環境則相對沒有太高的要求。所謂的CI/CD的系統,大都是針對測試環境、聯調環境的,能夠對生產環境做到CD的公司,屈指可數。
底線重點:測試、聯調環境的CI/CD系統,更多的是為研發效率提速;生產環境的變更系統,更多的是確保穩定性、落地規範制度的。公司前期體量小,靠規章制度就夠了,後面就需要規章制度 變更平台協同發力了。
規範的製定其實偏前期,可能維運團隊都還沒有的時候規範就已經有了,所以,大概率是CTO以及下轄的Core團隊來製定就好了。如果之前沒有製定過,維運總監(運維總監上場了)可以牽頭制定,CTO下轄的Core團隊來評審(大家有參與度),最後CTO拍板(自頂向下)發布,大家執行。
變更平台的開發,由維運團隊來開發相對比較合適,後文還會介紹一些其他的平台,成立一個專門的維運團隊(這裡我說的運維和SRE沒有差別,你也可以管這個團隊叫SRE團隊)是合適的。變更平台因為要落地公司的規範,外採的情況比較少,公司大到一定規模之後,基於開源的東西自研、攢,是個大概率的選擇。
關於擇業:變更管理是企業中的重要一環,同時服務於穩定性系統。這是典型的DevOps崗位,天花板大概在P7 的水平(純屬個人看法,僅供參考)。
另外就是基礎元件和環境的變更,典型的例如MySQL表結構、Nginx配置、DNS、VIP等等,這類變更可以內化到元件管控平台裡,讓組件能力提供方提供變更入口和管控能力。
這個能力非常重要,SRE就是Site Reliability Engineering的縮寫,也就是站點可靠度工程。從CTO的角度,軟體部署到生產環境,後續可能會有各種問題發生,希望能有一套工程系統來保障可靠性。這是一個巨大的議題,本文不會事無鉅細,只是理清楚哪些事哪些人來負責即可。
所謂的可靠性,就是與故障做鬥爭的過程,所以,我們還是來看故障的生命週期,從生命週期的各個環節著手,把故障打趴下,甚至直接把它扼殺在搖籃之中。
事前的預防和風控,有很多的工作。例如:制定告警完備性標準並對各個業務線做量化評估;制定定位原則和流程以及故障定級定責的標準;提前梳理各個業務的核心功能和服務模組的對應關係,建立全局穩定性視圖或者作戰室,方便快速揪出故障模組或介面;對架構做最佳化;梳理故障計畫並定期演練保鮮,也就是混沌工程那攤事;等等等等。
這裡有些事情是需要業務研發來搞定的,例如架構優化,剩下的事情,我的建議是:讓維運團隊來牽頭,研發配合。例如CTO下轄的Core團隊大概率既有運維一號位也有各個業務的技術一號位,名義上要CTO拍板,授權運維一號位來牽頭,各個業務的研發一號位來配合,當然了,實際操刀的時候,運維一號位可能是找了一個得力幹將來實操,各個業務線可能也是有技術一號位依仗的人來做接口人配合。
除了架構優化之外,其他這些事情都是橫向的事情,是可以有一些方法論和最佳實踐的,把大家拉通,有利於共享這些方法論和最佳實踐。當然,有些人會有疑問:我們能否直接在研發團隊找個人來組成這麼穩定的虛擬組織,共同推動這個事情呢?其實也可以嘗試。不過會有這麼幾點問題:
劃重點:事前的預防和風控,請各位CXO找維運總監要結果,但必須給予極大的配合,從上往下推。對於搞定這攤事的SRE工程師角色,看起來是需要非常專業的高層人士,工作5年以內大概率認知跟不上,或許,從資深研發團隊招SRE是一個不錯的選擇,各位CXO可以嘗試下。
一旦故障發生,我們的首要目標就變成降影響了。相關團隊立刻協作起來,快速定位直接原因、快速停損,事後再慢慢排查根因即可。這裡會涉及以下一些工作內容:
OK,上面洋洋灑灑一片,回歸問題,針對這塊工作內容,CTO找誰要結果?我的建議是:SRE團隊(文中多次出現維運、SRE字眼,在本文中基本上都代表一個意思,這裡的維運不止是Operations)。顯然SRE無法搞定所有的故障,應該說大部分故障都得借助其他團隊的人,但是CTO總不能一會兒找A團隊一會找B團隊吧。所以,SRE要攜CTO的尚方寶劍,牽頭整體的穩定性建設,各個業務需要出接口人極力配合,所謂的穩定性建設,包括事前的預防風控、事中的統籌協同、事後的複盤推進,這也是SRE對公司的最大價值。
這個內容很多,例如用什麼機型套餐比較合適,用什麼組網方式比較合適,用哪些組件公司具有更好的掌控力、可以得到更好的支援(不管是內部團隊還是藉助第三方供應商),公司推薦甚至要求的程式語言、框架是什麼,業界推薦的接取層方案是什麼?變更方案是什麼?可觀測性怎麼做?等等等等。
不可否認,牛逼的業務研發團隊,這些實踐方式是門清的,但是同樣不可否認,業務線多了之後,水平是良莠不齊的,水平差的團隊勢必需要教練角色的人,總不能啥事都去找CTO吧,SRE團隊作為一個橫向的技術團隊,特別適合負責這攤事。但顯然,這是一個高端職位,新瓜蛋子乾不來,招募高階人士做業務BP是推進技術棧趨於統一的有效手段,如果CTO用不好這個抓手,技術體系會百花齊放,後面則是各種治理困局。
上面的四個支撐能力,業務側應該如何獲取,CTO應該如何統籌,各團隊應該如何配合,大致就說這麼多。下面我們再做兩個小結。
顯然,CTO不需要親力親為,但CTO要做好把關,CTO要頒發政策,是全軍統帥。橫向的工作落給SRE團隊,各團隊出接口人極力配合,大機率是個最佳實踐。如果把橫向的工作目標完全打散到業務團隊自閉環,就無法享受到橫向團隊帶來的經驗傳播能力。而且,屁股決定腦袋,不在其位不謀其政,各個業務自己容易有小九九,中心的橫向組織也是一個削藩機制,抱歉這個詞用的重了,本意是好的,你要自己體會啦。
另外補充一點FinOps的話題,FinOps也是一個橫向能力,是否也要交由SRE來做呢?這個倒是未必。就讓業務自閉環我覺得也挺好的,業務自己要負責盈虧,IT支出是支出大頭,業務的GM理應是很上心的,CEO把營收淨利相關的KPI壓給業務GM,業務GM可以自閉環做好折中的。
如果沒有太高的職級和薪資期望,做一些相對基礎的Operations工作也是可以的,10年內這個崗位大概率不會消亡。如果對職級和薪資有更高期望,先深紮某個細分領域,做到行業專家,是一條行之有效的路徑。再之後,則講究多個技術方向的融會貫通了,又要往廣度發展。再之後,創業或高階主管。
秦曉輝,Open-Falcon、Nightingale 創業研發,極客時間《維運監控系統實戰筆記#》作者,公眾號SRETalk 主理人,快貓星雲創業合夥人,創業方向是穩定性保障方向,如有需求歡迎聯絡我做交流。
以上是從CTO視角來看:如何建構維運/SRE能力的詳細內容。更多資訊請關注PHP中文網其他相關文章!