search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

京東金融PE談如何顛覆應用運維認知

導讀:[GO!SRE] 為數人云SRE系列活動專題,本文是3月4日北京站線下活動「當西方的SRE遇上東方的互聯網」中京東金融王超老師的分享。他將從SRE,Devops, PE間的關係開始,介紹企業該如何構建適合自己的運維組織架構並管理團隊,講解持續交付、監控、容量規劃等具體運維場景實操,從工程實踐的角度解讀大規模複雜化的業務場景下運維指導思想的落地。王超 / 京東金融企業高級PE目前在京東金融平台負責一個20人左右的應用運維團隊(PE團隊),也曾負責人人網PE團隊。現階段主要關注運維與業務的融合、業務可用性保障,運維平台建設和團隊管理。我是今天最後的演講者,前面幾位都是很知名的運維專家,對大家提到的很多運維痛點我都感同身受,談到國內運維行業的發展,我沒有在國外工作的經驗,今天講的經驗都是我在國內不算美好的IT行業環境下的親身實踐和總結,其中也吸收了很多國內運維行業專家前輩的指點,希望對大家有借鑒的意義。剛畢業時我在一家世界500強的傳統行業公司信息中心做應用運維,後來換到人人網,再後來就是京東金融。從傳統行業跳到人人網的時候,加入的是一個剛建立的技術運維團隊,我從初期的運維工程師,成長為後來的運維主管。2014年到京東金融的時候,從0開始搭建起整個應用運維團隊,從初期建設團隊到一個比較穩定的狀態,把公司的業務支撐好,這裡面有很多經驗可以和大家分享。

DevOps

DevOps 是傳統瀑布流的交付方式中的Dev(開發)和Ops(運維)的關係。開發和運維有一個矛盾點,開發的人覺得寫好代碼交給運維,就可以上線部署了,後面的事與我無關。代碼像炸彈一樣,上線后如果出了問題總是運維背鍋。運維的人覺得開發的人總是找麻煩,總是不靠譜,於是把控變更的次數和審核流程,使開發的人不能申請更多的上線,比如一個星期只允許上線一次,就這樣阻礙了業務的發展。DevOps解決了這個矛盾,協調了技術運營、QA還有開發三者間的關係。DevOps誤區國內有很多錯誤的做法,比如寫著招聘DevOps職位,但描述的工作職責跟傳統的運維沒有太多明顯的變化,還是做發布和SA;有的團隊把名字改成了DevOps,但是做的是運維開發的工作,要注意「運維開發」不是DevOps。DevOps是一個落實到團隊里的文化理念和最佳實踐,不只是運維團隊做,也不只是開發團隊做,而是大家一起做DevOps,甚至有可能單獨設有有一些協調員去做發布、交付工作。所以,DevOps不只是一個團隊的名稱。我在人人網的時候, DevOps的概念比較火,公司建了一個DevOps團隊,後來在專家的指點下,我們把團隊名稱改成了PE團隊。另外,DevOps並不是系統管理員加上自動化工具就夠了,在部門裡,SA做發布用了很多自動化的工具,但大家要知道,自動化只是一種手段和工具,要想好最終的目標解決的是怎樣的問題。最後,DevOps也不是把root許可權給了開發人員。開發的人員有root許可權會引入很大的風險,DevOps需要控制這個風險。DevOps技術目標DevOps的最終目標DevOps的最終目標是建立一個流水線、准實時交互及時性的業務流程,快速把產品推上線,產生業務價值,最大化業務輸出。做事一定要想公司的路線圖是什麼,公司要做什麼樣的事情。公司新發布一個產品,上線一個在社交網站上的新消息流功能,目標就應該是把這個功能推上線,服務更多的人,而不是簡簡單單的做一個工單的處理。目標不一樣,結果也是不一樣的。從技術的角度或者是架構的角度來講,DevOps需要快速部署的平台。這一點是大家都很認可的,很多現在DevOps培訓都僅僅做技術上的快速部署平台,但是缺少對DevOps其他方面的培訓。DevOps真正的價值是由業務的結果判斷的。最大化輸出業務,而不止是IT項目的範圍或成果,就是對業務產生了多大的影響。Facebook里有兩個詞說得特別多,一個是Vision(視野),另一個是Impact(影響力)。做事前想想這件事對公司是不是有正向的影響,影響力有多大?視野加上影響力很重要。舉個例子,做一個架構的組件,可能短期內公司用不上,但是在明年也許會產生很大的效果,產生很大的改變,那就可以做。做完以後今年可能沒有產生效果,但是明年可能對幾十人、上百人的開發效率產生非常大的提升,這就是有意義的。所以要看最終的結果,而不只從一個項目的角度去考慮。DevOps速度&業務連續性雙峰挑戰。系統基本上都可以分為這兩類:是關注於快速上線的交互型系統,還是關注業務的連續性的記錄型(SOR)系統。我們公司是做金融的,其中的交易系統就屬於對業務連續性要求特別高的。有些產品則更關注於速度,比如web、app的開發,上線后如果有問題馬上回退就好,對用戶不會產生特別大的影響,這就是典型的交互型系統,這類系統也比較適合用DevOps。要區分系統是否適合DevOps,銀行、證券的的核心繫統要把控好,不夠成熟就不要上DevOps。DevOps風險&安全DevSecOps就是除了DevOps,還要注意安全。互聯網公司對三點很關注,那就是速度、成本和質量。要快速的上線、快速的迭代,也要控制好成本。質量不能出問題,業務連續性不能斷,如果經常丟數據,業務不能使用,公司的品牌會受到很大的影響。金融公司則更關注於安全,假如數據被竊取了,用戶數據或交易紀錄被篡改,是致命的。數據非常重要,所以DevOps里又加了一個DevSecOps 。關注風險,但沒有絕對的安全。DevOps的經典書籍《鳳凰工程》里有一段情節,有個做審計的人總是特別鬱悶,因為總覺得IT的人不按審計的要求去修復所有問題,會出非常大的問題。但是最終的結果是審計成功通過,因為公司里財務的人通過業務上的檢查,解決了發現的安全問題,也就是說即使IT上存在一些問題,也可以通過業務的方式彌補,達到最終的安全。DevOps告訴我們,你要關注風險而不簡單是安全,在避免風險的前提下,制度不應妨礙業務的發展和交互。另外,也要通過技術提升安全,簡化流程,盡量實現自動化。設計流程很容易,很多公司裡面都有特別多的工單,但是你要想你的工單是不是有作用?比如說是不是所有的項目的上線都需要安全的人審核,如果能自動判斷沒有風險的話,能否自動化流轉?DevSecOps和DevOps一樣,也要加強人與人之間的溝通、協作,負責安全的人應該和開發、運維、測試人員一起防範風險。

SRE

談談SRE, SRE需要負責可用性、時延、性能、效率、變更管理、監控、應急響應和容量管理等相關的工作,包括工程研發、日常運維以及監控響應方向的工作。

深究PE

重點分享我正在做的PE是什麼,先介紹一下PE的起源。大家比較認可的是從雅虎開始流行的,國內最大的團隊就是阿里的PE團隊,後來受阿里影響很多公司也設了PE職位。PE這個詞有的叫產品運維工程師,有的叫業務運維工程師,也可以直接認為就是應用運維團隊,簡單來說就是負責業務或應用相關的一系列工程上的事務。這是Facebook的招聘描述,PE既擁有軟體也擁有系統方面知識的工程師,要保障Facebook 的服務平滑的運行,有足夠的容量滿足未來的規劃。這也是剛才說的Facebook很強調兩點:一個是視野,一個是影響力。技術人要有視野,能預見公司未來的業務發展,根據視野做設計。一方面要保證服務平滑運行,另一方面要滿足未來的容量規劃,以此設計基礎組件,要有長久規劃設計的能力。每個Facebook 產品,包括基礎設施,都有PE的人。聽阿里畢玄老師說,阿里的PE團隊打散到不同的BU業務單元里。大家要根據自身的情況考慮,Facebook 團隊比較大,每個大團隊都有兩個PE的人跟進,他們有廣闊的視野和經驗,背景也比較好,從整個團隊來看,既有新人也有老手,組成了多樣化的團隊。除了寫代碼,PE也要會寫文檔。做運維的人一定不要抗拒寫文檔,不管在哪裡,文檔都很重要。好的文檔能把事情描述清楚,給別人去看,傳播給更多人,而不只是在自己的腦子裡面。PE要做容量規劃,像京東每年都有兩次大促,618大促,雙十一大促,PE要規劃容量和性能能否夠滿足業務的發展。PE需要調試處理最困難的問題,所有運維都知道調試排查問題(Trouble Shooting),但是能做好的很難。很多公司做問題處理的時候,如果有乙方的支持,只要問題能解決,公司的人就不去想是問題的原因。我們需要反思,再去自我提高,好的PE問題排查和總結範圍的能力都很強,簡單的問題也可以找到深層次的原因並做長期的提升改進。PE要加入到值班輪轉里,在值班的時候處理問題。PE要做產品協調員,和工程師團隊一同協作,這和SRE里相關的部分很像。PE會和很多人打交道,這點對其他職業也是通用的。我很強調人與人之間的溝通協作,PE是一個協調員的角色,要和PM、產品經理、程序員、網工,或者SRE溝通,與各個組協調把事情做好。我招PE的時候,很注意軟技能,如果軟技能方面有問題,只想做技術,很多事情都很難處理,後面的風險會更大。對於個人,不管是運維還是其他職位,想更好的發展都應該提升軟技能方面的能力,更多地與合作夥伴、同事共同協作,大家達成一致的目標,協作完成任務。目標部分再說一下,管理者還要評估PE的績效,保證業務正常運轉,這也是管理者的一項重要工作。PE或應用運維工程師如何做發展計劃?如果不轉型,還是按PE方向發展,我覺得發展為架構師是很好的規劃。總結一下我對PE的定位。首先,PE應該是服務的第一響應者,有問題要馬上處理。大家要有這個意識,有問題要能快速處理,這也要靠公司機制去保證,並不只是靠人。人不可能7X24小時處理問題,但是機制可以保證,包括輪班,一線二線的人分離任務,在保證核心的人不要太累的同時處理問題。性能分析師,利用有限資源承載更多的業務,京東每次大促前都要做全鏈路壓測,做評估、擴容,先做性能分析,然後在進行容量規劃。系統管理員是基本功,要懂操作系統,懂網路,也要能寫Code,開發工具等等。開發工具並不要求是很大的平台,可以和專業開發人員一塊去開發,解決問題就好。最後,產品工程協調員,加強人與人之間的溝通。

PE實踐及心得

如何結合組織架構設計技術架構三個角色的定義都說完了,再說說如何結合組織架構設計技術架構,這裡有很經典的康威定律原則——組織結構會影響技術架構,技術架構會影響到運維架構。康威定律很重要的一點是說,假如團隊里有N個人,每個人都要跟N-1個人去溝通,團隊越大溝通成本越高。如何設計結構降低溝通的成本?傳統模式下很多公司都是職能型的團隊,開發、運維、測試屬於不同的職能團隊,開發的人寫好代碼給運維的人上線就行了。在新的互聯網公司中,除了傳統的職能型團隊以外,還有實施矩陣式管理,做單元化、BU化組織架構的,這樣可以降低溝通協作的成本。我之前在人人網帶的團隊有7、8個人,現在的團隊比較大,有差不多20人。20人的團隊怎麼設計結構?我把業務線打散到兩個不同的業務組裡,這裡也有一個2-pizza team的原則。假如兩個pizza都喂不飽團隊的時候,團隊的溝通成本其實是很高的,管理也有難度。要把團隊打散劃分成更小的線,8人以內是比較合適的。我也會設一些虛擬的小組,類似於矩陣式管理,有一些技術小組做大數據、分散式緩存,Docker、Nginx 等等,目的是什麼?有點像Google SRE的50%原則,50%的時間做開發任務。但是我沒有辦法讓他將50%的時間完全去寫程序,因為有很多事情要去做,而且我們也有專門的開發團隊,但我可以設一些技術的小組,分離業務和技術的事。每個人50%的時間去做跟技術相關的事情,這樣他們自己也會覺得有意思一點,最終的目的不僅是做一個純業務的運維,而是給PE們提升的空間。SLM服務級別管理下技術管理上的實踐,即使是互聯網公司,ITIL這樣偏傳統的管理方式也有很多可取的地方,我們現在也用得著,並不是拋棄掉所有傳統的理念,要根據公司的需要,不管是ITIL還是SRE,還是其它方法都可以借鑒,以此設計你的組織結構。我會保留傳統的東西,像SLM,在SRE里叫SLO。為什麼叫SLO不叫SLA了?因為SLA是服務協議,更多時候是甲方和乙方簽協議。公司內部沒有協議,而是設定一個目標,開發跟運維間達成一致,要有數據化的考量。SLA或SLO都不只是一個可用性的目標,還包括很多的方向,比如維護的時間是否可靠?包括性能、備份、問題解決的時間這些都是考量的指標,不只是數字。我們內部的SLA會分得很細,根據業務的類型,對不同業務的影響會有很細的評估。變更管理80%的故障都是變更引起。變更很頻繁,互聯網公司裡面每天可能都幾十次、上百次的變更,測試環境沒有測試到業務的問題的可能性是很大的。變更管理的內容可以再看一下,比如CMDB,變更的時候還是要有基礎庫做記錄的,有了基礎庫後面才能做很多事情。重大事件及故障管理重大事件及故障管理,公司有問題的時候怎麼快速的解決,有很多的細則要做,我們設有服務台、監控這樣的崗位,通過數據更準確的定位問題,大家一同協作、排查。縮小排查範圍有法可依,比如根因分析法,排錯法。不是簡單的溝通好就行了,還要檢查變更記錄、收集問題。事件處理流程很多時候,現場處理問題動作比較快,後面分析時復原問題說不清楚。操作前儘快的把問題現象記錄下來,包括監控信息、堆棧信息等等,以便於後面分析。處理流程盡量梳理清楚,對應的做分類,看問題是常見的還是非常見的。常見的問題有對應的應急案,快速的進行處理就好,如果是非常見的,需要技術和決策人參與,看到底是緊急的問題還是日常的問題,快速決策和解決。這裡更多的還是需要有協調,有應急預案,應急的預案需要經過演練。故障分析會故障分析會也叫復盤,有了故障以後組織故障分析會,目的是為了避免相同的問題重複的出現,做改進。這時,前面收集的信息就有用了,根據收集的信息復盤故障,大家看看當時發生了什麼問題,怎麼解決的,有沒有更好的辦法去定義故障級別,然後分析根本原因,這很重要。開故障分析會應該放鬆心態,開放共享,不要用指責的態度,而是追求事實,去看根本原因,共同提高、改進,分清因和果。很多時候分析出的問題並不一定是真正的原因,可能有更深層次的原因。五問法, 就是要多問,大家一起討論,不要停留在表面。每一個人從自己的視角去看當時發生了什麼,可以提出很多問題,引導進入深度思考。瑣事—50%時間去做開發或虛擬技術小組的事情,SRE說50%的時間做開發,但是我認為50%的時間不一定全做開發,開發的時候也可以做一些技術的事,只要是長遠講,對你的組、對公司有好的影響的事,我覺得就可以了,目的是一樣的,多做自動化,促進大家提高能力。自動化—減少重複性工作,減少手工操作帶來的不確定性。很多公司做自動化的同時,導致風險也變多了,所以怎麼樣做正確的自動化?正確的自動化減少了重複性的工作,減少了錯誤,解放了人類,但是錯誤的自動化對應的只是把人類機械化了。以前手工做很多次的,現在變成一次就執行了,系統沒有給你正確的反饋。這和DevOps說的一樣,不僅能更快速迭代的發布,還要有反饋的信息,收到有反饋的異常信息以後能快速的回滾,這點很重要。很多的DevOps平台都只是做了自動化,但是風險是不是控制好了?系統能否有效反饋?發布失敗的時候能不能停下來?要做好對應的信息反饋。錯誤的自動化對應的會給出錯誤的信息,導致決策失誤,這是一定要注意的。比如金融證券行業,做了一定的自動化交易(量化分析),程序自動做投資、買賣股權、買賣股票,完全自動化。但是如果系統沒有做好,就是災難性的,風險還是很嚴重的。核心繫統一定不要缺少人工干預,並不是完全自動化就不需要運維了,決策或者風險非常高的地方,還是需要人去做。最後一點,理解構建的東西,設計任何一個系統一定要知道下面具體的實現。發布的時候告訴研發的人後面有什麼風險,系統是怎麼設計的,懂了原理之後才能規避更多的風險。數據化運維現在都說數據化運維,有點類似於運營,有些運維做得比較好的話還是可以往公司的運營方向轉。很巧的是,運維和運營的英文的單詞都是「operation」,都是偏運營的方向,目標也是一樣的,做運維做得好的時候,應該有更多數據化的東西給公司做決策參考。尤其是監控跟線上處理相關的,對應的數據都是你的來源,這些來源都會做智能運維的數據採集,比如說網路監控,操作系統監控,DNS等服務監控,基礎組件的監控。基礎技術組件服務,像DB、緩存、消息等,架構的組件都需要做數據化的參考,沒有這兩部分數據的話,做應用級性能分析的時候就很難。這些信息之間也會做一些聯動,舉個例子,比如某應用的介面訪問慢了,到底是因為網路原因慢了,還是緩存慢了,還是DB慢了?要把這些信息做聯動才能做更好的分析,如果做數據化運維就需要很多數據做分析。京東金融也做了分散式調用的跟蹤,我們現在說的微服務,以前叫服務化,再往前是SOA,對應的都會涉及調用鏈的關係。一個請求下來可能後面有幾十個、上百個應用,這時怎麼發現是鏈條上的哪個請求變慢了?我們用的是自己開發的分散式調用跟蹤系統,也可以使用日誌監控,業務的解決方案,比如ELK、Splunk,日誌易等。自己開發的系統能滿足我們大規模高複雜度場景的需要,還能和我們的CMDB,統一告警中心等系統做深度的整合。下面兩個是業務指標,比如,支付系統會有支付可用率的指標監控,也有對應每個銀行分類的可用率,全局業務的監控大盤,這些都是業務方向的監控需求,方便進行快速的分析決策。所以,對業務連續性要求高的系統大多會設置一個監控中心或是作戰指揮室,有很多監控的大屏,做數據化的運維,用數據做決策、分析。數據化運維今後的發展空間是很大的。智能運維採集大量的數據是基礎,再發展的話,還會做事件匯總,打標籤的數據積累。詳細來講,一方面做數據採集,一方面按事件分類。觸發一次代碼的變更上線,或者業務的機房間流量切換,或者一個網路的工單,都是不同的事件,什麼樣的事件導致了數據的波動,他們是有相關性的,要綜合的分析找出根本問題。再智能一點,像我們報警會做降級或者是升級,自動判斷問題。報警問題對業務是否有影響?是不是重複報警?級別比較低,經常重複報又不需要人去處理的就降低級別。另外,智能預估和自動擴容,人工的規則向機器學習過渡,多打數據標籤,做一些智能化的處理。智能運維是未來的方向,空間還是很大的。

總結

從實踐經驗看,首先一定要明確公司團隊的定位、發展方向,公司的使命、願景和價值觀是什麼。讓每個人都理解,才能產生比較好的團隊作戰能力,根據公司的情況去看組織結構,根據組織架構招到合適的人,設計系統、不斷實踐、持續迭代,分析、總結,長期規劃。我們雖然做技術、管理,很多時候也要借鑒商業的模式,怎樣更快速的做一個新的產業出來。最後一點我說一下「帶來變化」,不管在哪家公司,都應該嘗試一些新的改變,而不是簡單的做重複的事情。要有一些長遠的規劃,多做長期能帶來更大影響的事情,多做推動個人,公司,社會進步的事情。



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦