《微服務(wù)架構(gòu)設(shè)計(jì)模式》讀書筆記---第八章:外部API模式

外部API的設(shè)計(jì)難題

讓客戶端直接調(diào)用服務(wù),可行且實(shí)現(xiàn)簡(jiǎn)單。但存在弊端:

  • 效率低,用戶體驗(yàn)差。服務(wù)API往往顆粒度比較細(xì),客戶端需要調(diào)用多次API才能檢索到需要的數(shù)據(jù)
  • 封裝不足,緊耦合??蛻舳诵枰私饷總€(gè)服務(wù),服務(wù)端API接口的改變,會(huì)要求客戶端一同修改。
  • 客戶端使用不便??赡艽嬖诜阑饓?/li>

API Gateway模式

API Gateway服務(wù)是外部API客戶端進(jìn)入基于微服務(wù)應(yīng)用程序的入口點(diǎn),負(fù)責(zé)請(qǐng)求路由、API組合、協(xié)議轉(zhuǎn)換(隱藏微服務(wù)應(yīng)用程序內(nèi)部多種協(xié)議細(xì)節(jié))和邊緣功能(身份驗(yàn)證、流量監(jiān)控、速率限制、緩存、指標(biāo)手機(jī)、請(qǐng)求日志等功能)。

邊緣功能的實(shí)現(xiàn)可以放在三個(gè)位置:

  • 后端服務(wù)
  • API Gateway
  • API Gateway上游的邊緣服務(wù)。使用邊緣服務(wù),也可以進(jìn)一步的分割問題。例如身份驗(yàn)證,可以建立Auth服務(wù)。

好處是,封裝了應(yīng)用程序的內(nèi)部結(jié)構(gòu)。
弊端是,1.可能成為開發(fā)的瓶頸,2.只有在更新API Gateway之后,才能提供服務(wù)的API。

API Gateway的設(shè)計(jì)難題

在設(shè)計(jì)API Gateway的時(shí)候,需要考慮以下幾個(gè)問題:

  1. 性能和可擴(kuò)展性。同步I/O可能會(huì)存在線程數(shù)量和并發(fā)連接數(shù)量的上限。異步I/O,更具擴(kuò)展性,但是更復(fù)雜,代碼更難編寫、理解和調(diào)試。
  2. 使用響應(yīng)式編程。在API組合的時(shí)候,需要考慮到調(diào)用服務(wù)的依賴性。
  3. 處理局部故障。一種方法是,負(fù)載均衡器后面運(yùn)行多個(gè)API Gateway服實(shí)例,另一種方式是,使用斷路器。

不同客戶端需要不同的數(shù)據(jù)

解決這個(gè)挑戰(zhàn),可以

  1. 讓客戶端指定所需要的數(shù)據(jù),如利用expand參數(shù),或者基于圖形的API框架GraphQL
  2. 后端前置模式,為每個(gè)客戶端,實(shí)現(xiàn)單獨(dú)的接口。

基于圖形的API框架的關(guān)鍵思想是,服務(wù)器的API由基于圖形的模式組成,。該模式定義了一組節(jié)點(diǎn)(類型),他們具有屬性(字段)和其他節(jié)點(diǎn)的關(guān)系??蛻舳送ㄟ^,查詢圖的節(jié)點(diǎn)和與其他節(jié)點(diǎn)的關(guān)系,檢索數(shù)據(jù)。

這種基于圖形的API框架的好處是:

  1. 是客戶端能夠控制返回的數(shù)據(jù)
  2. API更靈活,可以顯著減少開發(fā)的工作量。

兩種最流行的基于圖形的API技術(shù)是:GraphQL和Netflix Falcor

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

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