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