五 微服務之間的互動

2021-08-29 09:50:47 字數 2005 閱讀 6046

microservice架構模式中的「開」是各個服務的內部實現,而其中的「閉」則是各個服務之間相互溝通的方式

微服務必須使用程序間通訊機制來互動。微服務架構有兩類ipc機制可選,非同步訊息機制和同步請求/響應機制。當設計服務的通訊模式時,需要考慮幾個問題:服務如何互動,每個服務如何標識api,如何公升級api,以及如何處理部分失敗。

1. api gateway 模式

1.1 背景

當決定將應用當作成一組微服務時,需要決定應用客戶端如何與服務端互動。方式有兩種:

(1)客戶端與服務端直接通訊

(2)採用api gateway,客戶端與api gateway互動,api gateway封裝具體的服務細節,並提供api給各個客戶端。

1.2客戶端與服務端直接通訊

乙個客戶端可以直接給多個微服務中的任何乙個發起請求。每乙個微服務都會有乙個對外服務端。這個url可能會對映到微服務的負載均衡上,它再**請求道具體的節點上。

缺點:l  客戶端的需求量與微服務暴露的細粒度的api數量不匹配,客戶端需要發起多個請求才能獲取需與的完整資料。

l  客戶端請求的微服務的協議可能不是web友好型的,例如微服務是rpc或amqp協議的,他們都不是web友好型的

l  很難重構微服務

2apigateway.api gatewayapigateway

1.3 api gateway  

apigateway是乙個伺服器,也是進入系統的唯一節點。api gateway封裝系統內部的架構,對每個客戶端提供api。

1.3.1 api gateway的目標

支援api介面動態發布及運營,包括但不限於:

(1)安全認證

a. 應用申請審核通過後生成公鑰,開放平台需提供支援分布式系統的金鑰管理

服務可設定為兩個安全等級:需授權訪問和無需授權訪問(後者即任意客戶端都可以發起呼叫),預設所有api都需授權訪問。

b. 非正常狀態(禁用、停用、黑名單等)的應用直接拋異常不允許訪問——熔斷機制

c. 呼叫次數、呼叫頻率、併發數可執行時控制,避免某請求量過大影響其他應用的呼叫。

d. 可對某個應用某個api設定強制熔斷,所有請求無視閥值直接丟擲異常。

(2)api管理

所有api可後台查詢管理,包括動態發布、引數對映配置、後端服務介面配置、api禁用、啟用,多版本、分組、分級別等。

(3)應用管理

後台管理開放平台接入的應用(第三方應用),包括查詢、禁用、啟用、審核。

(4)計費收費

a. api的呼叫統計,每筆請求時間,響應時間,響應狀態。

b. api的計費計算,按照請求量和請求資源計費,實現多種計費模型。(預付費,後收費。按量,按時間週期。)

(5)       熔斷

(6)       流量統計及限流

l  支援現有子系統rpc協議的api動態發布及運營,外部請求透傳。

l  支援json、xml響應報文,可以請求時選取所需報文格式。

l  支援動態直接將後端soa服務暴露為api。

l  支援動態將普通web介面暴露為api。

l  支援動態將mq服務暴露為api。

l  支援多個服務組合編排後暴露為api。

l  請求的**、合成和協議轉換

l  給客戶端提供乙個定製化的api

1.3.2 api gateway模式的優缺點

(1)優點:

l  特定的api。使客戶端只需跟gateway打交道,減少客戶端與服務端的通訊次數,也簡化了客戶端的**。

l  去報客戶端不需要受服例項位置的影響

l  為每套客戶端提供最優的api

l  降低請求/往返次數

(2)缺點

l  api gateway是乙個高可用的元件,必須要開發、部署和管理。開發者必須要更新api gateway來提供新服務提供點來支援新暴露的微服務。

l  api gateway會造成多餘的網路跳轉

微服務理論與實踐 五 微服務之間的互動

microservice架構模式中的 開 是各個服務的內部實現,而其中的 閉 則是各個服務之間相互溝通的方式 微服務必須使用程序間通訊機制來互動。微服務架構有兩類ipc機制可選,非同步訊息機制和同步請求 響應機制。當設計服務的通訊模式時,需要考慮幾個問題 服務如何互動,每個服務如何標識api,如何公...

微服務之間的協作方式

前面幾篇文章大概寫了什麼是微服務以及我們應該如何去劃分微服務,那麼本篇文章我們就來看下如果整合微服務,其實就是微服務之間如何溝通並且進行資料交換。同步與非同步 這個主要說的是服務之間的協作方式。編排與協同 這裡我們通過乙個例子來說明編排與協同,我們有乙個系統,當使用者註冊乙個賬號後我們會分別通過簡訊...

微服務之間的通訊 RestTemplate

1.返回json字串的方式 2.公共模組,新增依賴 推薦 公共模組方式實現 1.新建模組 2.新建domain物件 3.需要用到的模組,依賴 先打jar包 install一下 2.準備controller restcontroller userserver public class userserv...