本文來(lái)自微信公眾號(hào)“twt企業(yè)IT社區(qū)”,汪照輝,中國(guó)銀河證券架構(gòu)師,專(zhuān)注于容器云、微服務(wù)、DevOps、數(shù)據(jù)治理、數(shù)字化轉(zhuǎn)型等領(lǐng)域,對(duì)相關(guān)技術(shù)有獨(dú)特的理解和見(jiàn)解。擅長(zhǎng)于軟件規(guī)劃和設(shè)計(jì),提出的“平臺(tái)融合”的觀點(diǎn)越來(lái)越得到認(rèn)同和事實(shí)證明。發(fā)表了眾多技術(shù)文章探討容器平臺(tái)建設(shè)、微服務(wù)技術(shù)、DevOps、數(shù)字化轉(zhuǎn)型、數(shù)據(jù)治理、中臺(tái)建設(shè)等內(nèi)容,受到了廣泛關(guān)注和肯定。
跟一個(gè)朋友聊DevOps的問(wèn)題,我提出“以SRE的實(shí)踐經(jīng)驗(yàn)來(lái)看,運(yùn)維的敏捷才能支撐研發(fā)的敏捷”,他直接告訴我說(shuō)“運(yùn)維平臺(tái)不能敏捷,敏捷=不穩(wěn)定,運(yùn)維不能不穩(wěn)定”,也就是說(shuō),為了系統(tǒng)的穩(wěn)定,運(yùn)維是沒(méi)法做敏捷的。這直接把敏捷和穩(wěn)定運(yùn)行對(duì)立起來(lái)了。可能也是最近幾年很多人鼓吹的敏態(tài)和穩(wěn)態(tài)二元運(yùn)維所導(dǎo)致的。但敏態(tài)運(yùn)維和穩(wěn)態(tài)運(yùn)維真的就對(duì)立嗎?只能二選一?那運(yùn)維自動(dòng)化算敏態(tài)還是穩(wěn)態(tài)?AIOps算敏態(tài)還是穩(wěn)態(tài)?
穩(wěn)態(tài)和敏態(tài)
什么是敏態(tài)?什么是穩(wěn)態(tài)?敏態(tài)和穩(wěn)態(tài)原是動(dòng)態(tài)系統(tǒng)理論中的概念。穩(wěn)態(tài)指系統(tǒng)在長(zhǎng)時(shí)間運(yùn)行后收斂到的穩(wěn)定狀態(tài)。敏態(tài)表示系統(tǒng)對(duì)外界擾動(dòng)的響應(yīng)能力。穩(wěn)態(tài)用來(lái)描述系統(tǒng)在無(wú)外界干擾的情況下的平衡狀態(tài),長(zhǎng)期均衡下的運(yùn)行狀態(tài);敏態(tài)用于描述系統(tǒng)對(duì)內(nèi)外部環(huán)境變化的敏感程度和適應(yīng)能力。敏態(tài)系統(tǒng)具有較高的靈活性和適應(yīng)性,能夠面對(duì)變化時(shí)快速調(diào)整,并恢復(fù)到一個(gè)新的穩(wěn)定狀態(tài)。
穩(wěn)態(tài)和敏態(tài)分析都是用來(lái)描述系統(tǒng)行為的概念,用來(lái)評(píng)估系統(tǒng)的穩(wěn)定性和可靠性。不管穩(wěn)態(tài)或者敏態(tài),最終都要達(dá)到一種穩(wěn)定的平衡狀態(tài)。穩(wěn)態(tài)更多是一種行為結(jié)果狀態(tài),而敏態(tài)是一種響應(yīng)變化的能力,其最終需要回歸穩(wěn)態(tài)運(yùn)行。用穩(wěn)態(tài)和敏態(tài)的概念來(lái)討論運(yùn)維,有助于我們理解業(yè)務(wù)應(yīng)用系統(tǒng)的動(dòng)態(tài)狀態(tài)變化和穩(wěn)定性以及適應(yīng)性。
穩(wěn)態(tài)應(yīng)用和敏態(tài)應(yīng)用
在討論業(yè)務(wù)應(yīng)用系統(tǒng)運(yùn)維之前,我們先從響應(yīng)需求看下應(yīng)用類(lèi)型。有些業(yè)務(wù)需求變化比較快,比如我們常說(shuō)的互聯(lián)網(wǎng)類(lèi)業(yè)務(wù),需要經(jīng)常策劃一些營(yíng)銷(xiāo)、秒殺等活動(dòng)以提升營(yíng)收和影響力;這些業(yè)務(wù)應(yīng)用系統(tǒng)通常我們稱(chēng)為敏態(tài)業(yè)務(wù)應(yīng)用。而一些不需要經(jīng)常變更的應(yīng)用系統(tǒng),比如說(shuō)財(cái)務(wù)、人力等管理類(lèi)應(yīng)用,并不需要頻繁的變更,可以稱(chēng)為穩(wěn)態(tài)應(yīng)用。不過(guò)也有很多人把傳統(tǒng)開(kāi)發(fā)模式開(kāi)發(fā)的應(yīng)用系統(tǒng)稱(chēng)為穩(wěn)態(tài)應(yīng)用,用敏捷研發(fā)模式開(kāi)發(fā)的應(yīng)用系統(tǒng)稱(chēng)為敏態(tài)應(yīng)用,從而形成以雙態(tài)研發(fā)模式來(lái)劃分敏態(tài)和穩(wěn)態(tài)業(yè)務(wù)。這種方式有點(diǎn)簡(jiǎn)單粗暴,并不能體現(xiàn)真正的業(yè)務(wù)真實(shí)的需求。管理類(lèi)系統(tǒng)也可以采用敏捷的研發(fā)方式,但他們可能并不是敏態(tài)應(yīng)用系統(tǒng),并不需要非常敏捷的響應(yīng)能力。通常這些系統(tǒng)的變更是基于政策或規(guī)則的變化才需要變更,比如說(shuō),財(cái)務(wù)計(jì)稅政策和規(guī)則的變革,就需要變更財(cái)務(wù)應(yīng)用。但這通常是有一定的緩沖期。因此穩(wěn)態(tài)應(yīng)用和敏態(tài)應(yīng)用不能簡(jiǎn)單以研發(fā)模式來(lái)劃分,而應(yīng)該看需求響應(yīng)是否需要敏捷來(lái)定義。
穩(wěn)態(tài)業(yè)務(wù)運(yùn)維和敏態(tài)業(yè)務(wù)運(yùn)維
穩(wěn)態(tài)業(yè)務(wù)并不需要頻繁的變更,通常使穩(wěn)態(tài)應(yīng)用系統(tǒng)保持平衡狀態(tài)穩(wěn)定運(yùn)行,做好災(zāi)備、備份等就可以了。但穩(wěn)態(tài)也并不是不能做到敏捷變更,敏捷變更對(duì)穩(wěn)態(tài)業(yè)務(wù)應(yīng)用同樣重要,這是系統(tǒng)應(yīng)用對(duì)變化的適應(yīng)能力,響應(yīng)越快,就越快地重新達(dá)到平衡和穩(wěn)定運(yùn)行。而敏態(tài)業(yè)務(wù),則是必須具有的敏捷響應(yīng)能力。業(yè)務(wù)的類(lèi)型并不一定和業(yè)務(wù)系統(tǒng)的維護(hù)方式保持一致,穩(wěn)態(tài)業(yè)務(wù)和敏態(tài)業(yè)務(wù)都可以采用敏捷的研發(fā)方式和敏捷的運(yùn)維方式。比如說(shuō),都可以采用微服務(wù)架構(gòu)方式,從而實(shí)現(xiàn)更多的復(fù)用和共享。
不管是否是敏態(tài)應(yīng)用,在系統(tǒng)出現(xiàn)意外故障時(shí),敏捷的響應(yīng)能力是否對(duì)系統(tǒng)的恢復(fù)具有幫助?這樣的能力是否可以稱(chēng)為敏捷運(yùn)維能力?是否同樣可以構(gòu)建敏捷運(yùn)維平臺(tái)?因此,敏捷不是只指研發(fā)。系統(tǒng)的穩(wěn)定運(yùn)行也不代表不能具備敏捷的響應(yīng)能力、敏捷的運(yùn)維能力。異常情況、意外情況,快速的恢復(fù)是至關(guān)重要的能力。即便穩(wěn)態(tài)的業(yè)務(wù),具備敏捷的變更能力,甚至用戶無(wú)感、業(yè)務(wù)無(wú)影響的變更能力,而不只是敏捷研發(fā)迭代,都是企業(yè)運(yùn)維和研發(fā)能力的重要體現(xiàn)。僅有敏捷研發(fā)遠(yuǎn)遠(yuǎn)不夠。
敏捷不是只指研發(fā)
有人把研發(fā)分為敏捷研發(fā)和傳統(tǒng)研發(fā)兩種模式,從而也讓很多人覺(jué)得運(yùn)維也存在敏態(tài)和穩(wěn)態(tài)運(yùn)維,敏捷研發(fā)的系統(tǒng)就是敏態(tài)運(yùn)維方式,傳統(tǒng)方法研發(fā)的系統(tǒng)就沿用傳統(tǒng)的運(yùn)維模式??赡芤彩鞘鼙姸鄰S商的所謂的DevOps思想的影響,關(guān)注持續(xù)集成和持續(xù)交付部署,卻不怎么關(guān)注如何實(shí)現(xiàn)持續(xù)的穩(wěn)定運(yùn)行。其實(shí),很多人談敏捷的時(shí)候指的是研發(fā)的敏捷,自覺(jué)不自覺(jué)的排除了運(yùn)維的敏捷,這是一種長(zhǎng)期耳濡目染被影響形成的根深蒂固的思想,想改變有時(shí)的確不容易。但很多根深蒂固的思想往往是過(guò)時(shí)的,難以與時(shí)俱進(jìn)的,因此需要改變。
SRE的思想雖然起源于互聯(lián)網(wǎng)系統(tǒng)運(yùn)維,其卻適用于任何行業(yè)和系統(tǒng)敏捷變更和可靠性運(yùn)維的場(chǎng)景。很多人鼓吹”DevOps已死”,就在于對(duì)DevOps“研發(fā)運(yùn)維一體化”的誤解和誤用。還有可能就是研發(fā)人員對(duì)運(yùn)維天生的優(yōu)越感和排斥感作祟。但試想,一個(gè)不懂運(yùn)維的研發(fā)能做好研發(fā)嗎?能研發(fā)出高可靠性、高穩(wěn)定性、高韌性、高可觀測(cè)性的軟件嗎?如果對(duì)部署、對(duì)網(wǎng)絡(luò)、對(duì)操作系統(tǒng)、對(duì)存儲(chǔ)等不了解的研發(fā),如何能考慮高可用部署、性能優(yōu)化、參數(shù)優(yōu)化配置等等,很多研發(fā)的問(wèn)題最終是需要依賴(lài)于底層的基礎(chǔ)設(shè)施資源,不論再高級(jí)的開(kāi)發(fā)語(yǔ)言,如果操作系統(tǒng)參數(shù)配置不合理,比如openfiles設(shè)置很小,運(yùn)行一段可能就會(huì)出現(xiàn)"Too many files open"異常;或者磁盤(pán)分區(qū)配置不合理,空間不足導(dǎo)致進(jìn)程hang或者驅(qū)逐重啟等。研發(fā)運(yùn)維一體化的目的就是讓研發(fā)人員懂運(yùn)維,運(yùn)維人員也要懂研發(fā),這樣才能以運(yùn)維的視角考慮研發(fā)應(yīng)用軟件的可靠性、性能等設(shè)計(jì)實(shí)現(xiàn),而運(yùn)維懂研發(fā),則能開(kāi)發(fā)自動(dòng)化的運(yùn)維工具,以研發(fā)的視角快速定位異常、找到根因并解決問(wèn)題,提升軟件應(yīng)用的可靠性、可觀測(cè)行、穩(wěn)定性和韌性等。
變更頻度
無(wú)論穩(wěn)態(tài)還是敏態(tài)系統(tǒng),系統(tǒng)變更是正常的需求,區(qū)別在于變更頻度。支持頻繁變更可以稱(chēng)為敏態(tài),不支持頻繁變更也不能稱(chēng)為穩(wěn)態(tài),穩(wěn)態(tài)是一種系統(tǒng)運(yùn)行狀態(tài),而不是用傳統(tǒng)開(kāi)發(fā)模式開(kāi)發(fā)的系統(tǒng)稱(chēng)為穩(wěn)態(tài)系統(tǒng)。不管什么模式開(kāi)發(fā)的系統(tǒng),如果頻繁的崩潰、異常、錯(cuò)誤、重啟等,無(wú)論從什么角度看,系統(tǒng)都是不穩(wěn)定的,不能稱(chēng)為穩(wěn)態(tài)系統(tǒng)。當(dāng)然,穩(wěn)態(tài)業(yè)務(wù)相關(guān)的系統(tǒng)可以稱(chēng)為穩(wěn)態(tài)業(yè)務(wù)系統(tǒng),不過(guò)并不代表是穩(wěn)定的穩(wěn)態(tài)系統(tǒng),所以穩(wěn)態(tài)業(yè)務(wù)系統(tǒng)不等于穩(wěn)態(tài)系統(tǒng)。
系統(tǒng)穩(wěn)定并不是一成不變。而且即便是什么也不改動(dòng),系統(tǒng)也一直在動(dòng)態(tài)運(yùn)行過(guò)程中,在某個(gè)時(shí)點(diǎn)就可能破壞穩(wěn)定,帶來(lái)系統(tǒng)異常,比如磁盤(pán)空間滿、網(wǎng)口損壞、openfiles達(dá)到最大值等等,所以為了系統(tǒng)穩(wěn)定,并不能害怕系統(tǒng)變更。系統(tǒng)變更就會(huì)帶來(lái)擾動(dòng),就可能使系統(tǒng)處于不穩(wěn)定狀態(tài),不管高頻度變更或低頻度變更,都是一樣的,因此,需要具備快速的處理能力、自動(dòng)化的處理能力,甚至智能化的處理能力。特別如果采用微服務(wù)架構(gòu),勢(shì)必帶來(lái)微服務(wù)數(shù)量的增長(zhǎng),對(duì)運(yùn)維的敏捷響應(yīng)能力就要求非常高。你說(shuō)為了穩(wěn)定,運(yùn)維不能敏捷嗎?敏捷和穩(wěn)定并不矛盾,敏捷才可能更快地帶來(lái)穩(wěn)定,因此,運(yùn)維的敏捷是確保系統(tǒng)穩(wěn)定運(yùn)行的重要措施和手段。也只有像SRE一樣,實(shí)現(xiàn)運(yùn)維的敏捷,才能支撐研發(fā)的敏捷。
從SRE看運(yùn)維的敏捷
Devops的“研發(fā)運(yùn)維一體化”誤導(dǎo)了很多人。SRE從運(yùn)維的視角為我們提供了非常有價(jià)值的參考。SRE強(qiáng)調(diào)穩(wěn)定性、可靠性和韌性,怎么做到的?靠自動(dòng)化的工具,消除重復(fù)性、手工性的操作。自動(dòng)化是不是一種敏捷方法?自動(dòng)化的方法不是常用的運(yùn)維方式嗎?因此,通過(guò)自動(dòng)化的方法和工具實(shí)現(xiàn)應(yīng)用系統(tǒng)的敏捷變更和穩(wěn)定運(yùn)行,二者并不矛盾,并且是相輔相成的。從而支撐頻繁的變更,也保證系統(tǒng)的穩(wěn)定運(yùn)行。
具備對(duì)內(nèi)外部變化的敏感響應(yīng)能力和適應(yīng)性,是系統(tǒng)運(yùn)維需要具備的能力。SRE雖然沒(méi)有提敏捷運(yùn)維,但他們所做的事情是實(shí)現(xiàn)敏捷的運(yùn)維,從而支持敏捷的研發(fā)。通過(guò)錯(cuò)誤預(yù)算,讓研發(fā)對(duì)自己的代碼負(fù)責(zé),為自己的代碼邏輯錯(cuò)誤買(mǎi)單,也變相的促進(jìn)了研發(fā)質(zhì)量的提升,確保應(yīng)用系統(tǒng)的穩(wěn)定性和韌性。通過(guò)自動(dòng)化的工具,實(shí)現(xiàn)快速的備份、高可用部署、回滾、恢復(fù)等能力。這些能力都做到了敏捷,系統(tǒng)的穩(wěn)定性也得到了保障。
換個(gè)視角看研發(fā)和運(yùn)維
不是運(yùn)維平臺(tái)不能敏捷,而是敏捷運(yùn)維才能支撐敏捷研發(fā)。運(yùn)維不敏捷,不能快速響應(yīng)并適應(yīng)新的狀態(tài),就做不到支撐敏捷研發(fā)。無(wú)論研發(fā)多么敏捷,不能變更,或者變更總是出問(wèn)題,為了避免擔(dān)責(zé),造一大堆的審批流程,做不到敏捷,也不是DevOps的研發(fā)運(yùn)維一體化。運(yùn)維的敏捷需要自動(dòng)化的工具以及平臺(tái)的支撐,這也和當(dāng)前很多人鼓吹的平臺(tái)工程是一致的,這些平臺(tái)工程一部分就是運(yùn)維平臺(tái),比如說(shuō)容器化PaaS平臺(tái),用來(lái)部署和運(yùn)行容器化應(yīng)用。通過(guò)自動(dòng)化測(cè)試、灰度發(fā)布、多版本并行運(yùn)行、流量切換、高可用部署等手段實(shí)現(xiàn)用戶無(wú)關(guān)、業(yè)務(wù)無(wú)影響的變更,從而實(shí)現(xiàn)業(yè)務(wù)應(yīng)用系統(tǒng)的“穩(wěn)定運(yùn)行“。這里的”穩(wěn)定“是一種動(dòng)態(tài)的穩(wěn)定,可能在運(yùn)維端需要不斷的自動(dòng)化調(diào)整、變更、切換等,但對(duì)于客戶、業(yè)務(wù)來(lái)說(shuō),可能是無(wú)感的,這都需要運(yùn)維平臺(tái)的敏捷處理。所以說(shuō),運(yùn)維的敏捷才能支撐研發(fā)的敏捷,運(yùn)維的敏捷比研發(fā)的敏捷更重要。
基于根深蒂固的思想認(rèn)知,很多人看不上運(yùn)維,總覺(jué)得那是修電腦的,很低端的工作。但互聯(lián)網(wǎng)和數(shù)字化使運(yùn)維的工作重要性提升到了超越研發(fā)的程度。如果不改變認(rèn)識(shí),就做不好運(yùn)維工作,無(wú)法真正實(shí)現(xiàn)運(yùn)維的價(jià)值,無(wú)法真正提升研發(fā)運(yùn)維一體化的能力。也可能就是基礎(chǔ)不牢,就無(wú)法支撐敏捷研發(fā)。研發(fā)也就只能是局部的最優(yōu),無(wú)法實(shí)現(xiàn)軟件工程全鏈路的價(jià)值優(yōu)化。