經(jīng)濟(jì)學(xué)有個(gè)概念稱為“看不見的手”,即市場(chǎng)機(jī)制能夠驅(qū)動(dòng)市場(chǎng)內(nèi)每個(gè)人自發(fā)向上從而使整體更有效率發(fā)展,但其中有個(gè)核心要求是充分競(jìng)爭(zhēng),如何讓互聯(lián)網(wǎng)企業(yè)內(nèi)不同業(yè)務(wù)線的運(yùn)維工作人員自發(fā)將風(fēng)險(xiǎn)控制到最低?滴滴用“看不見的手”提供了一個(gè)全新的解決思路。
4 月 20-24 日,QCon 全球軟件開發(fā)大會(huì)將在北京國際會(huì)議中心舉行。本次大會(huì)設(shè)置了《DevOps Top 案例》專題來深入探討新運(yùn)維時(shí)代下研發(fā)、交付、運(yùn)維模式等環(huán)節(jié)的創(chuàng)新方案,其中邀請(qǐng)了滴滴出行運(yùn)維架構(gòu)師華明前來分享《從標(biāo)準(zhǔn)到落地:數(shù)據(jù)驅(qū)動(dòng)的風(fēng)險(xiǎn)防范體系建設(shè)》。
我們借此機(jī)會(huì)采訪了華明老師,他為我們講解滴滴風(fēng)險(xiǎn)量化體系的相關(guān)實(shí)踐細(xì)節(jié),如果讀者想了解更多滴滴如何克服運(yùn)維工作中無法執(zhí)行標(biāo)準(zhǔn)的困難,歡迎報(bào)名參加 QCon 北京站并與華明老師進(jìn)一步交流。
華明,滴滴出行運(yùn)維架構(gòu)師,曾供職于百度運(yùn)維部,七年百度 SRE 運(yùn)維和架構(gòu)經(jīng)驗(yàn),主要負(fù)責(zé)百度搜索廣告和地圖、糯米等服務(wù)的一線 年底加入了滴滴運(yùn)維部,擔(dān)任滴滴運(yùn)維架構(gòu)師,主要負(fù)責(zé)滴滴服務(wù)穩(wěn)定性建設(shè)和滴滴運(yùn)維平臺(tái)的研發(fā)工作。
我在百度和滴滴都是在運(yùn)維部工作,主體工作也都是負(fù)責(zé)服務(wù)的穩(wěn)定性建設(shè)、運(yùn)維效率建設(shè)等等。主要的區(qū)別在于在百度時(shí)我的角色是技術(shù)負(fù)責(zé)人,并沒有明確的團(tuán)隊(duì)管理職責(zé),在滴滴我作為技術(shù)負(fù)責(zé)人的同時(shí)還有管理者的職責(zé)。
在百度通??梢钥吹揭粋€(gè)團(tuán)隊(duì)有管理者加技術(shù)負(fù)責(zé)人這樣的組合,大家都對(duì)團(tuán)隊(duì)和團(tuán)隊(duì)的目標(biāo)負(fù)責(zé),但工作職責(zé)的側(cè)重會(huì)略有不同,技術(shù)負(fù)責(zé)人專注技術(shù)規(guī)劃和實(shí)現(xiàn),管理者側(cè)重目標(biāo)設(shè)定、人員管理、資源協(xié)調(diào)、對(duì)外溝通等,而在滴滴這兩個(gè)角色通常是合二為一的,這兩種方式各有優(yōu)劣。
實(shí)際上滴滴有很多的運(yùn)維人員都有過百度的工作經(jīng)歷,所以總體來講兩者的運(yùn)維文化有很多相似之處。除了前面提到的管理者和技術(shù)負(fù)責(zé)人的角色區(qū)別外,在穩(wěn)定性等重要工作的分工機(jī)制上也略有差別,例如在百度通常是運(yùn)維部作為主體在推動(dòng)服務(wù)的穩(wěn)定性建設(shè),這個(gè)做法是百度運(yùn)維部長期歷史積累形成的有效機(jī)制,讓很多穩(wěn)定性的平臺(tái)、經(jīng)驗(yàn)快速落地到各個(gè)業(yè)務(wù)線,適合百度業(yè)務(wù)線眾多且發(fā)展階段各異的特點(diǎn)。
滴滴運(yùn)維部也是服務(wù)穩(wěn)定性建設(shè)的總體負(fù)責(zé)部門,但前面還有一個(gè)有效的保障,即相關(guān)機(jī)制的制定、職責(zé)的分?jǐn)偟仁怯扇夹g(shù)部門的“星辰花”穩(wěn)定性委員會(huì)來推進(jìn),在執(zhí)行過程中還有裁判(效能平臺(tái)部門)來隨時(shí)組織,這有效地保證了穩(wěn)定性各方的有效參與和相關(guān)工作的快速推進(jìn)。
滴滴的服務(wù)穩(wěn)定性建設(shè)重要內(nèi)容之一是運(yùn)維平臺(tái)的建設(shè),穩(wěn)定性建設(shè)包括的工作內(nèi)容很多,比如流程規(guī)范建設(shè)、風(fēng)險(xiǎn)量化、標(biāo)準(zhǔn)化和自動(dòng)化、架構(gòu)高可用、容量管理、變更管理、服務(wù)監(jiān)控、預(yù)案管理等等。幾乎每項(xiàng)工作要得到有效的落地和長期的執(zhí)行最好都是由平臺(tái)來保證,監(jiān)控、變更、容量管理、預(yù)案管理這些需要平臺(tái)來支撐比較容易理解,也是滴滴運(yùn)維的主要工作之一。
但我們將流程規(guī)范建設(shè)、風(fēng)險(xiǎn)量化等也和平臺(tái)建設(shè)關(guān)聯(lián)起來,比如我們發(fā)布了“服務(wù)變更五條軍規(guī)”,其中包括灰度變更原則、double-check 原則、高峰期不變更原則等等,這些原則最后都落地到變更平臺(tái)來保證執(zhí)行。
再比如風(fēng)險(xiǎn)量化,我們針對(duì)變更的風(fēng)險(xiǎn)建立了評(píng)估標(biāo)準(zhǔn),并進(jìn)行自動(dòng)的計(jì)算量化,形成了變更信用分平臺(tái),可以有效的總結(jié)和量化各個(gè)團(tuán)隊(duì)的變更在穩(wěn)定性上的風(fēng)險(xiǎn)。
滴滴的各項(xiàng)工作非常推崇數(shù)據(jù)量化的作用,任何工作最后都要落地到指標(biāo)上,滴滴內(nèi)部幾項(xiàng)重要的工作會(huì)以競(jìng)賽的機(jī)制來推進(jìn),比如:
把目標(biāo)、效果進(jìn)行量化是這些競(jìng)賽機(jī)制能夠發(fā)揮作用的基礎(chǔ)。在這種機(jī)制下,無論工作的大小,我們都會(huì)首先考慮量化機(jī)制的建設(shè)。
在穩(wěn)定性建設(shè)過程中,我們發(fā)現(xiàn)有很多工作一直以來還沒有被說得太清楚,比如變更一直以來都是影響服務(wù)穩(wěn)定性的重要因素,但變更應(yīng)該做到什么程度才是安全的?很多人并不知道要做好哪些準(zhǔn)備工作、過程中要遵守哪些流程。平時(shí)雖然有針對(duì)變更數(shù)據(jù)的一些分析,比如回滾率等,但都不系統(tǒng)不全面,也嚴(yán)重依賴人工的執(zhí)行,這導(dǎo)致團(tuán)隊(duì)的管理者層面看不到自己團(tuán)隊(duì)變更風(fēng)險(xiǎn)的全貌和嚴(yán)重程度,執(zhí)行者也通常沒有意識(shí)到自己做的不夠好。
另一方面,雖然我們發(fā)布了變更的流程規(guī)范,這些流程規(guī)范很多也都落地到了變更平臺(tái),但流程規(guī)范的執(zhí)行仍然有很多需要人為拿捏的地方,比如灰度檢查通常暫停的時(shí)間越長越有可能發(fā)現(xiàn)問題,但平臺(tái)只能約束至少有暫?;驎和R粋€(gè)固定時(shí)間,更長的暫停時(shí)間則由執(zhí)行者把握。
再比如流程規(guī)定高峰期不能上線,平臺(tái)可以強(qiáng)制不在這個(gè)時(shí)間上線,但一定會(huì)有緊急的需求需要在高峰期操作,平臺(tái)還必須放開這個(gè)口子,這類操作帶來的風(fēng)險(xiǎn)也是確確實(shí)實(shí)存在的,它不應(yīng)該被經(jīng)常執(zhí)行。
諸如這些問題我們希望通過結(jié)合標(biāo)準(zhǔn)制定一個(gè)量化機(jī)制,叫變更信用分機(jī)制,變更信用分標(biāo)準(zhǔn)規(guī)定,比如暫停時(shí)間越長分?jǐn)?shù)越高,高峰期如有操作則需要扣分,同時(shí)不同優(yōu)先級(jí)的模塊采用不同的標(biāo)準(zhǔn),最高優(yōu)先級(jí)的模塊有強(qiáng)制 double-check 的要求,需要兩個(gè)人才能在平臺(tái)完成上線,如果沒有在平臺(tái)執(zhí)行這個(gè)要求也需要扣分。
我們對(duì)每周 2000 個(gè)左右的上線單做這些問題的系統(tǒng)分析,并按團(tuán)隊(duì)做匯總、量化和排名,讓大家能從全局的角度看到問題的總體情況和各自的嚴(yán)重程度,并能夠從上往下索引到各個(gè)團(tuán)隊(duì)具體的變更單、變更人和變更參數(shù),甚至直到具體的變更模塊配置界面,以此促進(jìn)各個(gè)團(tuán)隊(duì)有針對(duì)性的發(fā)現(xiàn)變更風(fēng)險(xiǎn)并清晰的知道如何進(jìn)行完善。
滴滴的數(shù)據(jù)量化文化催生了變更信用分機(jī)制,但這種機(jī)制的實(shí)施具有很大的普適性,其他公司如有需要,是完全可以復(fù)制并做一些適合自己業(yè)務(wù)特點(diǎn)的調(diào)整把它運(yùn)行起來的。
量化首先要有一個(gè)標(biāo)準(zhǔn),這之前我們發(fā)布了“線上變更五條軍規(guī)”和“服務(wù)變更窗口規(guī)定”等等變更流程,這些流程和標(biāo)準(zhǔn)是經(jīng)過評(píng)審得到各業(yè)務(wù)的共同認(rèn)可的。風(fēng)險(xiǎn)量化的機(jī)制基于這些標(biāo)準(zhǔn)產(chǎn)生,我們把這些風(fēng)險(xiǎn)劃分為幾個(gè)大的維度,比如變更暫停、回滾、上線窗口等。
各個(gè)大的維度再細(xì)分到具體的維度,比如變更暫停維度,變更暫停 10min 該單子 80 分、暫停 20min 該單子 90 分,如相應(yīng)的變更有預(yù)發(fā)環(huán)境 100 分,沒有預(yù)發(fā)環(huán)境 0 分具體維度的分值聚合計(jì)算出大維度的分值,大維度的分值再聚合計(jì)算出一個(gè)團(tuán)隊(duì)總體的分值。
這些計(jì)算規(guī)則也要經(jīng)過評(píng)審,當(dāng)然評(píng)審只能使最后的數(shù)值更趨于合理更符合真實(shí)的風(fēng)險(xiǎn)情況,但這還是不夠的,我們需要針對(duì)各團(tuán)隊(duì)計(jì)算出的分值結(jié)合實(shí)際情況進(jìn)行一段時(shí)間的觀察和 Review,并對(duì)規(guī)則做出一些調(diào)整,這樣逐步迭代一段時(shí)間后基本可以較準(zhǔn)確的反映分險(xiǎn)的情況。
而信用分機(jī)制更重要的價(jià)值不在于 100% 準(zhǔn)確的反映風(fēng)險(xiǎn),而是能夠在大家認(rèn)可的標(biāo)準(zhǔn)下,方便大家看到問題的嚴(yán)重程度和具體要改進(jìn)的工作并進(jìn)行完善。比如每周排行榜上會(huì)有各個(gè)團(tuán)隊(duì)的得分排名,每個(gè)團(tuán)隊(duì)可以點(diǎn)擊進(jìn)入查看各個(gè)維度的得分詳情,這周的得分較差是因?yàn)橐恢本蜎]有完善好上線的配置,還是這周的發(fā)布回滾過多,在系統(tǒng)里面可以一目了然的看清。
一是底層的操作單要有詳細(xì)的信息輸出,才能支持對(duì)操作單做各種維度的分析,比如操作暫停時(shí)間計(jì)算、是否在高峰期中有過執(zhí)行、是在哪個(gè)階段執(zhí)行的回滾,為此我們對(duì)部署系統(tǒng)進(jìn)行了升級(jí),支持這些信息的記錄并離線分析。
二是我們希望對(duì)所有變更都做風(fēng)險(xiǎn)量化,除部署外還有數(shù)據(jù)配送、配置開關(guān)等,但各個(gè)系統(tǒng)的差異較大,很難達(dá)成統(tǒng)一的計(jì)算方式,為此我們首先在最重要的上線部署上試點(diǎn),再考慮逐步適配各類變更,后續(xù)線上實(shí)現(xiàn)統(tǒng)一的變更中臺(tái)后將進(jìn)一步方便數(shù)據(jù)的采集。
非技術(shù)的難點(diǎn)是要讓大家真的認(rèn)可這些數(shù)據(jù)及它反映的問題,否則量化將沒有價(jià)值。這方面有些團(tuán)隊(duì)會(huì)自發(fā)的高度重視并積極發(fā)現(xiàn)和改進(jìn),有些團(tuán)隊(duì)可能相對(duì)被動(dòng),我們從三個(gè)方面來提高大家的重視度:
一方面是深入業(yè)務(wù)講解信用分體系的機(jī)制讓大家了解這個(gè)機(jī)制是如何幫組大家量化和發(fā)現(xiàn)風(fēng)險(xiǎn)的;
另一方面我們會(huì)定期的將信用分反映的問題郵件發(fā)送到各個(gè)團(tuán)隊(duì)的 leader,方面他們關(guān)注自己團(tuán)隊(duì)的變更風(fēng)險(xiǎn);
最后技術(shù)部門有各個(gè) boss 都參加的雙周會(huì),在雙周會(huì)上我們會(huì)總結(jié)各個(gè)團(tuán)隊(duì)的風(fēng)險(xiǎn)情況和排名情況,通過這種競(jìng)賽和評(píng)比的方式也進(jìn)一步提高了大家的重視。
建設(shè)風(fēng)險(xiǎn)量化體系并沒有非常大的技術(shù)復(fù)雜度,關(guān)鍵在于底層數(shù)據(jù)的標(biāo)準(zhǔn)化和規(guī)范化,能夠?qū)⒏鱾€(gè)數(shù)據(jù)映射到各個(gè)業(yè)務(wù)線和團(tuán)隊(duì)。
目前我們主要建設(shè)了變更的風(fēng)險(xiǎn)量化、預(yù)案的健康量化,現(xiàn)在正在建設(shè)監(jiān)控的完善分機(jī)制,原理都一樣:標(biāo)準(zhǔn) -》打分機(jī)制 -》采集 -》計(jì)算 -》排名。只要涉及到穩(wěn)定性風(fēng)險(xiǎn)的地方理論上都可以用這種量化的方式來推動(dòng)完善,這也是我們繼續(xù)努力的方向。
不同維度的運(yùn)維數(shù)據(jù)與之相應(yīng)的計(jì)算我們會(huì)從規(guī)范和標(biāo)準(zhǔn)出發(fā)并逐步迭代完善,針對(duì)特別的情況還會(huì)對(duì)業(yè)務(wù)線、模塊設(shè)定不同的優(yōu)先級(jí),給予不同的評(píng)分權(quán)重,總體的原則是業(yè)務(wù)線越重要、模塊越核心,要求也越高。
關(guān)于性能方面,目前我們的指標(biāo)是每周輸出一次,對(duì)性能和實(shí)時(shí)性的要求還不那么高。這些風(fēng)險(xiǎn)量化的數(shù)據(jù)從變更或預(yù)案執(zhí)行的單子中來,本身是有滯后性的,但未來可以考慮做得更為實(shí)時(shí)。
如果實(shí)時(shí)性提高也有可能可以做更多的事情,比如一個(gè)構(gòu)想是如果變更信用分低于某個(gè)閾值,則會(huì)控制該團(tuán)隊(duì)后續(xù)的變更在一定的頻率內(nèi)或提高該團(tuán)隊(duì)變更的審核要求,以降低變更的風(fēng)險(xiǎn)。
總體來說風(fēng)險(xiǎn)量化體系會(huì)逐步覆蓋運(yùn)維中各方面的風(fēng)險(xiǎn),把風(fēng)險(xiǎn)的高低大小通過量化和排名的方式呈現(xiàn)出來以支持運(yùn)維穩(wěn)定性的決策。如前面提到進(jìn)一步的可能也包括提高量化數(shù)據(jù)的實(shí)時(shí)性,把風(fēng)險(xiǎn)的控制做得更為實(shí)時(shí)。
關(guān)于在分值競(jìng)賽評(píng)定上,是否會(huì)面對(duì)“優(yōu)化空間已經(jīng)不大”的情況?在推進(jìn)過程中很多團(tuán)隊(duì)會(huì)積極的根據(jù)量化情況來進(jìn)行完善和改進(jìn),并嚴(yán)格遵守相應(yīng)的標(biāo)準(zhǔn)和流程要求,這確實(shí)可以把信用分保持在很高的水平,把風(fēng)險(xiǎn)控制得很好,這種情況是我們樂于看見的,也希望長期得到保持,并有更多團(tuán)隊(duì)來效仿,大家一起降低運(yùn)維穩(wěn)定性的風(fēng)險(xiǎn)。
InfoQ:感謝華明老師接受我們的采訪,期待華明老師在 QCon 分享的《從標(biāo)準(zhǔn)到落地:數(shù)據(jù)驅(qū)動(dòng)的風(fēng)險(xiǎn)防范體系建設(shè)》,讀者可點(diǎn)擊「閱讀原文」了解更多 DevOps Top 案例。