六種常用的微服務(wù)架構(gòu)設(shè)計(jì)模式
簡單地說,API主導(dǎo)的連接方法可以被看作是API設(shè)計(jì)的一種分層方法(至少在本文中是這樣)。其中,系統(tǒng)API公開系統(tǒng)的資產(chǎn)數(shù)據(jù)信息;中間的是流程API,與系統(tǒng)API一起進(jìn)行編排和組合;頂端的體驗(yàn)API公開來自后端數(shù)據(jù)源的數(shù)據(jù),提供最終用戶體驗(yàn)。這種API分層方法與細(xì)粒度SOA模式很好地結(jié)合在一起,通常,這兩者要么可以共存,要么細(xì)粒度SOA模式演化成基于細(xì)粒度SOA的分層API模式。
API主導(dǎo)的連接方法為細(xì)粒度SOA模式提供了一些層次結(jié)構(gòu),這些層次結(jié)構(gòu)允許對(duì)API或微服務(wù)進(jìn)行一致的管理和治理。然而,基于細(xì)粒度SOA的分層API模式也存在一些與細(xì)粒度SOA 模式類似的深層問題(這很直觀):
在細(xì)粒度SOA模式執(zhí)行單個(gè)API調(diào)用的地方,基于細(xì)粒度SOA的分層API模式現(xiàn)在必須通過層執(zhí)行多個(gè)調(diào)用。從“網(wǎng)絡(luò)跳數(shù)”的角度來看,這種模式可能是低效的。但是,基于細(xì)粒度SOA的分層API模式中,層次結(jié)構(gòu)的存在并不強(qiáng)制跨越網(wǎng)絡(luò)來調(diào)用每個(gè)API。直接的跨層調(diào)用,而不是通過網(wǎng)絡(luò)調(diào)用是完全有效的;分層的目的是為了增加靈活性,同時(shí)以一種很好地分離關(guān)注點(diǎn)的方式構(gòu)建體系架構(gòu)。
在細(xì)粒度SOA模式管理大量服務(wù)的地方,使用分層API將會(huì)管理來自多個(gè)層次的大量細(xì)粒度服務(wù)。您的管理工具可能不再像以前那樣有效,因?yàn)樗鼈兛赡軣o法可視化復(fù)雜的微服務(wù)視圖。
最終應(yīng)用程序的數(shù)據(jù)存儲(chǔ)一致性在分層API模式下實(shí)際上得到了改善,因?yàn)樵L問數(shù)據(jù)的服務(wù)都是有組織,且集中地查詢或修改應(yīng)用程序的狀態(tài)。(例如:系統(tǒng)API)
實(shí)際上,對(duì)于大多數(shù)企業(yè)來說,基于細(xì)粒度SOA的分層API模式是一個(gè)很好的模式,但是,就像細(xì)粒度SOA模式一樣,在實(shí)踐過程中會(huì)出現(xiàn)困難。然而,這種困難通常在大范圍使用時(shí)才會(huì)顯現(xiàn)出來。因此,只有在預(yù)期或正在經(jīng)歷大規(guī)模的使用時(shí),我們才應(yīng)該準(zhǔn)備其他的模式。
問題:
沒有一定層次結(jié)構(gòu)的微服務(wù)架構(gòu)是很難進(jìn)行合理解釋的,因?yàn)闆]有明顯的方法來對(duì)每個(gè)微服務(wù)的用途進(jìn)行分類和可視化。
解決方案:
通過創(chuàng)建按用途分組的分層API(系統(tǒng)層、流程及領(lǐng)域模型層,以及體驗(yàn)層),您可以更容易地管理微服務(wù)架構(gòu)的復(fù)雜性。
應(yīng)用:
將微服務(wù)架構(gòu)分為多個(gè)層。通常情況下,可以使用標(biāo)準(zhǔn)化,并具有類似用途的一組微服務(wù)以類似的方式工作,從而進(jìn)一步使微服務(wù)架構(gòu)的復(fù)雜性合理化。
影響:
1.通過標(biāo)準(zhǔn)化和進(jìn)一步分解微服務(wù)架構(gòu),可以提高快速變更的能力。
2.由于更專門化的層次結(jié)構(gòu),進(jìn)程間服務(wù)調(diào)用的數(shù)量可能增加。
3.需要對(duì)服務(wù)監(jiān)控和可視化工具進(jìn)行檢查,以確定它們是否能夠正確地與分層架構(gòu)一起工作。
目標(biāo):
1.快速的敏捷變更。
2.可伸縮性:理論上通過基于細(xì)粒度SOA的分層API模式可以提高可伸縮性,但實(shí)際上,除非有支持自動(dòng)化的基礎(chǔ)設(shè)施,否則可伸縮性往往會(huì)降低。
主要特點(diǎn):
1.為了實(shí)現(xiàn)快速變更,可能存在低效的IPC(Inter-Process Communication,進(jìn)程間通信)。
2.數(shù)據(jù)一致性和狀態(tài)管理能力較差,但允許高度重用。重用本身會(huì)抵消變更的速度。
3.由于與現(xiàn)存模式的相似性,已有的問題往往同樣會(huì)出現(xiàn)。
4.基于細(xì)粒度SOA的分層API模式在小范圍內(nèi)使用效果很好,在大規(guī)模情況下會(huì)出現(xiàn)困難。
5.由于采用了結(jié)構(gòu)化的體系架構(gòu)方法,所以具有很高的內(nèi)聚性。
6.重點(diǎn)放在服務(wù)顆粒度要細(xì),但通常沒有考慮其能力。
7.基于細(xì)粒度SOA的分層API模式以集成為導(dǎo)向,每個(gè)微服務(wù)依賴于外部系統(tǒng)。這將會(huì)降低變更的速度。
基于細(xì)粒度SOA的分層API模式如何與SOA或API等現(xiàn)有系統(tǒng)共存?
基于細(xì)粒度SOA的分層API模式往往是與現(xiàn)有IT資產(chǎn)共存的最佳方式。由于分層減少了每個(gè)微服務(wù)的范圍,并約束了其用途,因此該模式能夠在不明顯降低變更速度的情況下,最好地連接和利用現(xiàn)有IT系統(tǒng)。然而,通過細(xì)粒度和分層的設(shè)計(jì)來協(xié)調(diào)變更可能是一個(gè)挑戰(zhàn)。您可能需要使用一定的技術(shù)手段來管理所有不同微服務(wù)之間的契約,或者使用完全自動(dòng)化的測(cè)試技術(shù)來確保變更不會(huì)造成破壞。