【51CTO.com快譯】云原生計(jì)算可以將行業(yè)領(lǐng)域驅(qū)動(dòng)的設(shè)計(jì)、GitOps和其他現(xiàn)代軟件最佳實(shí)踐匯總起來(lái),如果企業(yè)實(shí)施得當(dāng),可以減少技術(shù)債務(wù)。
云原生計(jì)算是企業(yè)IT的一種新范式,它涉及現(xiàn)代技術(shù)的方方面面,從應(yīng)用程序開(kāi)發(fā)到軟件架構(gòu),再到保持一切運(yùn)轉(zhuǎn)的底層基礎(chǔ)設(shè)施。
云原生為企業(yè)提供了清理技術(shù)債務(wù)的機(jī)會(huì)。例如通過(guò)Kubernetes這樣的“掃帚”,掃除現(xiàn)有技術(shù)的一些積滿塵土的角落。因此,假設(shè)云原生最終會(huì)消除多年來(lái)累積的技術(shù)債務(wù)是合乎邏輯的。
這也許合乎邏輯,但并不現(xiàn)實(shí)。眾所周知,技術(shù)債務(wù)將長(zhǎng)期存在。此外,對(duì)于任何一位首席信息官來(lái)說(shuō),寧愿將IT預(yù)算花在新技術(shù)和新事物上,也不愿將其浪費(fèi)在清理前任留下的爛攤子上。
然而人們也有理由對(duì)云原生抱有希望。雖然云原生不是一把神奇的“掃帚”,但其核心實(shí)踐確實(shí)可以幫助企業(yè)減少技術(shù)債務(wù),并提供新的軟件功能,而不會(huì)產(chǎn)生更多的債務(wù),至少不會(huì)像以往那樣產(chǎn)生更多的債務(wù)。
讓企業(yè)清除技術(shù)債務(wù)以便永遠(yuǎn)不會(huì)產(chǎn)生新債務(wù),當(dāng)然是難題的一部分,但更直接的問(wèn)題是如何償還現(xiàn)有的遺留技術(shù)債務(wù)。
多年來(lái),便利的快捷方式、笨拙的編碼,以及基礎(chǔ)設(shè)施中各種各樣的接口,已經(jīng)形成了一團(tuán)亂麻。而對(duì)于這個(gè)難以解決的問(wèn)題,可能需要采用“快刀斬亂麻”的措施。
云原生計(jì)算就是這樣的一把快刀:基于領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的架構(gòu)重構(gòu)。領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)要求將復(fù)雜的企業(yè)軟件挑戰(zhàn)分解為單獨(dú)的業(yè)務(wù)領(lǐng)域,每個(gè)領(lǐng)域都有一個(gè)“限界上下文”。
限界上下文可以根據(jù)業(yè)務(wù)需求限制上下文來(lái)解決諸如“客戶”或“發(fā)票”之類的業(yè)務(wù)。例如,大型企業(yè)的不同部門可能對(duì)客戶有不同(可能有所重疊)的概念。每一個(gè)都代表一個(gè)單獨(dú)的限界上下文。
早期對(duì)微服務(wù)架構(gòu)的探索導(dǎo)致了互聯(lián)微服務(wù)的激增,其復(fù)雜性限制了其可擴(kuò)展性,并且很快顯現(xiàn)出來(lái)。而通過(guò)限界上下文組織它們是管理這種復(fù)雜性以及大規(guī)模交付基于微服務(wù)的解決方案的關(guān)鍵。
因此,領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)已經(jīng)成為云原生計(jì)算的一部分,此外,它告訴人們必須如何按照這種新范式來(lái)實(shí)現(xiàn)遺留資產(chǎn)的現(xiàn)代化。
解決具有高技術(shù)債務(wù)的遺留軟件挑戰(zhàn)的第一步是應(yīng)用架構(gòu)重構(gòu),從而將遺留架構(gòu)轉(zhuǎn)換為具有限界上下文的模塊化元素。換句話說(shuō),企業(yè)必須遵循業(yè)務(wù)驅(qū)動(dòng)的限界上下文引入模塊化,以便引導(dǎo)減少技術(shù)債務(wù)的路徑。
而魔鬼在細(xì)節(jié)中。根據(jù)企業(yè)面臨的業(yè)務(wù)需求和遺留挑戰(zhàn),可以通過(guò)以下幾種方式來(lái)利用這種架構(gòu)重構(gòu):
- 可能會(huì)發(fā)現(xiàn)限界上下文中的現(xiàn)有代碼根本不符合當(dāng)今的要求。在這種情況下,可以將該代碼重寫為微服務(wù)。
- 遺留業(yè)務(wù)邏輯仍然具有價(jià)值,然后將其遷移到微服務(wù)。
- 可以將遺留模塊作為API公開(kāi),因?yàn)樗鼈円呀?jīng)具有有用的API,或者因?yàn)楦铝诉z留代碼以通過(guò)API公開(kāi)它。
- 可以使用機(jī)器人流程自動(dòng)化(RPA)程序編寫與舊模塊交互的腳本。
需要注意的是,由于之前已將遺留軟件重新組織和模塊化為限界上下文,因此上述四種方法中的每一種都比其他方法更加簡(jiǎn)單。
此外,如果有必要的話,未來(lái)的重構(gòu)也會(huì)更加直接,因?yàn)椴捎昧?ldquo;分而治之”的方法來(lái)劃分技術(shù)債務(wù)。例如,隨著時(shí)間的推移,企業(yè)還清四筆較小的技術(shù)債務(wù)比一筆大的技術(shù)債務(wù)更加輕松。
這種方法也是減少機(jī)器人流程自動(dòng)化(RPA)脆弱性的最佳方法之一。如果沒(méi)有限界上下文驅(qū)動(dòng)的架構(gòu)重構(gòu),那么應(yīng)用程序環(huán)境中的任何地方發(fā)生任何變化,此類機(jī)器人程序就會(huì)崩潰。通過(guò)適當(dāng)?shù)膭澐郑祟惞收蠈⒏子诠芾砬腋子谛迯?fù)。
防止新的技術(shù)債務(wù)
防止新的技術(shù)債務(wù)就像要求保持房間整潔一樣,雖然也許會(huì)保持一段時(shí)間,但到后來(lái)將會(huì)變得一團(tuán)糟。
需要的是更多的結(jié)構(gòu),對(duì)嗎?至少在云原生的情況下,這種結(jié)構(gòu)確實(shí)有幫助。
云原生計(jì)算提供了一系列廣泛的最佳實(shí)踐,描述了如何最好地構(gòu)建軟件、配置基礎(chǔ)設(shè)施、創(chuàng)建和部署應(yīng)用程序以及管理生產(chǎn)中的一切。
當(dāng)然,如果遵循所有這些建議,就不太可能背負(fù)新的技術(shù)債務(wù),或者至少不會(huì)那么快地出現(xiàn)技術(shù)債務(wù)。
“基礎(chǔ)設(shè)施即代碼”(IaC)原則就是一個(gè)關(guān)鍵示例。IaC原則指出,工作人員不應(yīng)在生產(chǎn)中弄亂服務(wù)器。 IaC原則當(dāng)然可以限制生產(chǎn)中的額外技術(shù)債務(wù),因?yàn)樗峁┝艘环N解決生產(chǎn)問(wèn)題的主動(dòng)方法。那么只有一個(gè)問(wèn)題:IaC做得還不夠。
IaC的問(wèn)題在于必須編寫各種程序。然后,必須像任何其他程序一樣對(duì)這些程序進(jìn)行測(cè)試、管理和版本控制——這意味著技術(shù)債務(wù)可能會(huì)像任何其他軟件一樣蔓延。
幸運(yùn)的是,云原生計(jì)算已經(jīng)超越了IaC,其中每一步都比之前的一步有所改進(jìn)。
- 第一步:通過(guò)聲明性配置來(lái)表示基礎(chǔ)設(shè)施,它指定應(yīng)該如何配置基礎(chǔ)設(shè)施,而不指定如何實(shí)現(xiàn)此類配置。
與IaC相比,聲明式方法減少了技術(shù)債務(wù),因?yàn)闆](méi)有太多的空間來(lái)使用快捷方式,但這些表示(通常出現(xiàn)在YAML文件或其他基于JSON的格式中)仍然非常像代碼,尤其是對(duì)于復(fù)雜的動(dòng)態(tài)基礎(chǔ)設(shè)施配置。
- 第二步:GitOps。GitOps為軟件發(fā)布和管理帶來(lái)了以Git為中心的實(shí)踐和流程。
GitOps在許多方面補(bǔ)充了基礎(chǔ)設(shè)施配置的聲明式方法,因?yàn)樗捎寐暶魇椒椒ㄟM(jìn)行軟件部署。GitOps通過(guò)為其流程提供更多結(jié)構(gòu)而更進(jìn)一步,而結(jié)構(gòu)越多,技術(shù)債務(wù)蔓延的機(jī)會(huì)就越少。
- 第三步是當(dāng)前最先進(jìn)的技術(shù):基于意圖的計(jì)算。
基于意圖的計(jì)算包含三個(gè)部分:
- 以技術(shù)策略的形式對(duì)相關(guān)軟件(基礎(chǔ)設(shè)施、應(yīng)用程序代碼等)的聲明性表示。
- 這種技術(shù)策略的抽象,如表示底層配置的業(yè)務(wù)意圖的業(yè)務(wù)策略。
- 確保底層軟件符合這一業(yè)務(wù)意圖的一種機(jī)制,從而在策略應(yīng)用中消除策略漂移。
換句話說(shuō),基于意圖的計(jì)算采用聲明式配置方法和GitOps,并添加額外的結(jié)構(gòu),從本質(zhì)上確保整個(gè)云原生環(huán)境隨著時(shí)間的推移符合業(yè)務(wù)意圖。
這樣的合規(guī)性才是一把斬?cái)嗉夹g(shù)債務(wù)這團(tuán)亂麻的最好的快刀。
文章標(biāo)題:Can Cloud-Native Computing Eliminate Technical Debt?,作者:Jason Bloomberg
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】