這是一本關於微服務架構設計方面的書,這是本人閱讀的學習筆記。首先對一些符號作些說明:數據庫
()爲補充,通常是書本里的內容;
[]符號爲筆者筆注;編程
微服務架構將應用程序構建爲一組服務,這些服務必須常常協做才能處理各類外部請求。而服務的實例一般是在多臺機器上運行的進程,因此它們必須使用進程間通訊進行交互。api
當前有多種進程間通訊機制,比較流行的是REST(使用JSON)。選擇合適的進程間通訊機制是一個重要的架構決策,它影響應用程序的可用性。瀏覽器
進程間通訊技術有:基於同步請求/響應、異步的基於消息的通訊機制等。緩存
MAJOR.MINOR.PATCH
;消息格式會影響進程間通訊的效率、API的可用性和可演化新。使用跨語言的消息格式尤其重要;服務器
指客戶端使用同步的遠程過程調用協議(如REST)來調用服務。網絡
圖解:客戶端業務邏輯調用代理接口,這個接口由遠程過程調用代理適配器類實現。遠程過程調用代理向服務器發送請求,該請求由遠程過程調用服務器適配器類處理,該類經過接口調用服務的業務邏輯。而後它將恢復發送回遠程過程調用代理,該代理將結果返回給客戶端的業務邏輯。架構
REST是一種(老是)使用HTTP協議的進程間通訊機制。併發
特色:負載均衡
好處:
弊端:
gRPC是一個用於編寫跨語言客戶端和服務端的框架,是一種二進制協議。
特色:
好處:
弊端:
客戶端和服務端是獨立的進程,服務端極可能沒法在有限的時間內對客戶端的請求做出響應。
圖解:當Order Service無響應時,OrderServiceProxy將無限期地阻塞,等待響應。會消耗時間、浪費線程等資源。最終API Gateway將資源消耗,沒法處理請求,整個API不可用。
解決方法是:
服務及其客戶直接與服務註冊表交互;
經過部署基礎設施來處理服務發現;
使用消息機制時,服務之間的通訊採用異步交換消息的方式完成。
基於消息機制的應用程序一般採用消息代理;另外一種選擇是使用無代理架構。
消息由消息頭部和消息主體組成;
有如下兩種類型的消息通道:
介紹下面四種交互方式的消息機制:
服務的異步API規範必須制定消息通道的名稱、經過每一個通道交換的消息類型及其格式。
在無代理的架構中,服務能夠直接交換信息。
好處:
弊端:
舉例:
消息代理是全部消息的中介節點;發送方將消息寫入消息代理,消息代理將消息發送給接收方。
好處:
弊端:
舉例:
問題描述:在橫向擴展多個消息接收方的實例的狀況下,消息的順序可能會錯位。
解決方法:使用分片消息通道擴展接收方;
圖解:
問題描述:客戶端、網絡或消息代理的故障可能致使消息被屢次傳遞。
有如下兩種解決辦法:
服務須要使用庫來發送和接收消息。
有兩種方法:
採用同步通訊機制處理請求,會對系統的可用性帶來影響。所以,應儘量選擇異步通訊機制來處理服務之間的調用。
使用異步交互模式:
複製數據: