服務(wù)拆分-防腐層模式

1 定義

防腐層(Anti-Corruption Layer)模式,是一種在不同語義的子系統(tǒng)間構(gòu)建一層功能,對子系統(tǒng)間的請求進行翻譯適配,從而確保應(yīng)用設(shè)計不受外部依賴的系統(tǒng)的限制。此模式最初由Eric Evans在《領(lǐng)域驅(qū)動設(shè)計》中提出。

2 上下文和問題

許多應(yīng)用依賴于其它系統(tǒng)提供的數(shù)據(jù)或者功能。當直接使用外部系統(tǒng)的API、數(shù)據(jù)結(jié)構(gòu)或者其他語義時,本應(yīng)用系統(tǒng)就存在因使用外部系統(tǒng),而被外部系統(tǒng)的質(zhì)量問題影響,從而“腐化”本身設(shè)計的問題。比如,當一個遺留應(yīng)用需要移植到新系統(tǒng)時,可能仍需使用現(xiàn)存的遺留資源,新的特性需要調(diào)用遺留系統(tǒng)。這種場景在大型應(yīng)用隨時間推移緩慢向新系統(tǒng)遷移過程中尤其普遍。

遺留系統(tǒng)通常存在API過時、數(shù)據(jù)結(jié)構(gòu)復(fù)雜等質(zhì)量問題;或者遺留系統(tǒng)使用的特性和技術(shù)與新系統(tǒng)存在很大的不同。為了與遺留系統(tǒng)交互,新應(yīng)用可能需要支持過時的基礎(chǔ)架構(gòu)、數(shù)據(jù)結(jié)構(gòu)、API,或者使用根本不期望在新應(yīng)用中使用的特性。如果新系統(tǒng)強行遵守遺留系統(tǒng)的API或其他語義,則新系統(tǒng)原本簡潔清晰的設(shè)計很可能被遺留系統(tǒng)的質(zhì)量問題 “腐化”。

此外,當開發(fā)團隊對接無法控制的外部系統(tǒng)時,也會存在類似的問題。一種可行的方法,就是在應(yīng)用系統(tǒng)自身與外部系統(tǒng)之間,構(gòu)筑專門一層組件或者服務(wù),對兩個系統(tǒng)進行通訊轉(zhuǎn)換和語義隔離。這一層組件或者服務(wù),稱為“防腐層”。

3 解決方案

為解決某系統(tǒng)依賴其他系統(tǒng)功能、數(shù)據(jù)結(jié)構(gòu)或者其他語義而引入“腐敗”的問題,可在兩個系統(tǒng)之間放置一個獨立的層來進行隔離,防止對方系統(tǒng)帶來的“腐敗”,這一層就是“防腐層”。防腐層實現(xiàn)兩個系統(tǒng)之間通訊的轉(zhuǎn)換,允許一個系統(tǒng)保持不變,又能避免另一個系統(tǒng)對其設(shè)計和技術(shù)實現(xiàn)進行折中。

防腐層.png

如上圖所示的引入了防腐層的架構(gòu)中:

  • 子系統(tǒng)A與防腐層之間的通訊,使用子系統(tǒng)A的數(shù)據(jù)模型和架構(gòu);

  • 子系統(tǒng)B與防腐層之間的通訊,則使用子系統(tǒng)B的數(shù)據(jù)模型和方法;

  • 防腐層實現(xiàn)了在兩個系統(tǒng)之間進行通訊轉(zhuǎn)換的全部邏輯(雙向轉(zhuǎn)換)。

防腐層可實現(xiàn)為應(yīng)用中的組件,或者獨立的服務(wù)。

4 優(yōu)點

防腐層兩方的系統(tǒng)解耦,隔離雙方變更的影響,允許雙方獨立演進;防腐層允許其它的外部系統(tǒng)能夠在不改變現(xiàn)有系統(tǒng)的領(lǐng)域?qū)拥那疤嵯?,與該系統(tǒng)實現(xiàn)無縫集成,從而降低系統(tǒng)集成的開發(fā)工作量。

5 問題

  • 防腐層可能增加兩個系統(tǒng)間的通訊延遲;

  • 防腐層增加了額外的服務(wù),需要管理和維護;

  • 防腐層需要考慮如何擴展;

  • 考慮是否構(gòu)建多個防腐層:可能的原因比如:將防腐層的功能解耦為多個服務(wù),各個服務(wù)使用不同技術(shù)、語言進行開發(fā)。

  • 確保維護事務(wù)和數(shù)據(jù)一致性,并且可被監(jiān)控;

  • 考慮防腐層是否需要處理所有的系統(tǒng)間通訊,還是只需處理一個子集;

  • 如果防腐層是系統(tǒng)遷移戰(zhàn)略的一部分,則需要考慮防腐層是否是永久的,是否在遺留系統(tǒng)功能完全遷移完成后將其移除。

6 相關(guān)模式

  • Facade API模式:

    Facade API模式關(guān)注于系統(tǒng)功能如何對使用者友好的呈現(xiàn);而防腐層則關(guān)注于隔離不同架構(gòu)系統(tǒng)間的影響,使各個系統(tǒng)可獨立演進。

    在系統(tǒng)架構(gòu)遷移場景下使用的防腐層,通常是臨時存在的。當系統(tǒng)遷移完成后,防腐層就沒有了存在的必要。而Facade API的生命周期依賴系統(tǒng)的外部使用者,只要外部用戶存在,F(xiàn)acade層就應(yīng)存在;如果外部用戶變更,則Facade層則需要一起變更,以適配用戶新的要求。

    防腐層需要提供兩個系統(tǒng)間的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換和接口適配,因此比API Facade“胖”。而API Facade只建議簡單的提供接口給用戶,不建議增加較多的邏輯,它應(yīng)該是“瘦”的。

  • 適配器模式:

    適配器目的是解決差異接口的對接,接口轉(zhuǎn)換是單向的(即從調(diào)用方向被調(diào)用方進行接口轉(zhuǎn)換);防腐層強調(diào)兩個子系統(tǒng)語義解耦,接口轉(zhuǎn)換是雙向的。

7 應(yīng)用場景

漸進式架構(gòu)遷移,需要維護遺留系統(tǒng)和新系統(tǒng)之間的集成;具有不同語意環(huán)境和架構(gòu)的兩個或者多個系統(tǒng),且彼此需要通訊。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在上一篇文章《我們?nèi)绾魏饬恳粋€微服務(wù)實施的成功》里,我們介紹了衡量一個微服務(wù)改造成功的七個特征,分別是: 很多個代...
    顧宇閱讀 3,015評論 0 21
  • 文摘一:有些地方外觀模式也被叫做門面模式,英文即Facade Pattern,提前說明一下。 試想這種情況,用戶添...
    _淺墨_閱讀 583評論 0 1
  • 微軟AzureCAT模式和實踐團隊發(fā)布了9個新的設(shè)計模式。這9個設(shè)計模式在設(shè)計和實現(xiàn)微服務(wù)時很有用。 下圖展示了這...
    zlup閱讀 2,199評論 0 2
  • 絞殺者模式 1 定義 老系統(tǒng)向新系統(tǒng)遷移時,可采用將老系統(tǒng)的部分功能使用新應(yīng)用或服務(wù)替換的方式逐步進行。當老系統(tǒng)全...
    大哥你先走閱讀 2,539評論 0 0
  • 設(shè)計模式概述 在學習面向?qū)ο笃叽笤O(shè)計原則時需要注意以下幾點:a) 高內(nèi)聚、低耦合和單一職能的“沖突”實際上,這兩者...
    彥幀閱讀 3,873評論 0 14

友情鏈接更多精彩內(nèi)容