一、聚合器微服務設計模式
這是一種最常見也最簡單的設計模式,效果如下圖所示。
聚合器呼叫多個服務實現應用程式所需的功能。它可以是一個簡單的Web頁面,將檢索到的資料進行處理展示。它也可以是一個更高層次的組合微服務,對檢索到的資料增加業務邏輯後進一步釋出成一個新的微服務,這符合DRY原則。另外,每個服務都有自己的快取和資料庫。如果聚合器是一個組合服務,那麼它也有自己的快取和資料庫。
二、代理微服務設計模式
這是聚合模式的一個變種,如下圖所示。
在這種情況下,客戶端並不聚合資料,但會根據業務需求的差別呼叫不同的微服務。代理可以僅僅委派請求,也可以進行資料轉換工作。每個微服務都有自己獨立的快取和資料庫系統,彼此獨立。
三、鏈式微服務設計模式
這種模式在接收到請求後會產生一個經過合併的響應,如下圖所示:
在這種情況下,服務A接收到請求後會與服務B進行通訊,類似地,服務B會同服務C進行通訊。所有服務都使用同步訊息傳遞。在整個鏈式呼叫完成之前,客戶端會一直阻塞。
因此,服務呼叫鏈不宜過長,以免客戶端長時間等待。
四、分支微服務設計模式
這種模式是聚合器模式的擴充套件,允許同時呼叫兩個微服務鏈,如下圖所示:
每個呼叫鏈分別呼叫自己的服務。當某個呼叫出現問題時,互相之間不會造成影響。
五、資料共享微服務設計模式
自治是微服務的設計原則之一,就是說微服務是全棧式服務。但在重構現有的“單體應用(monolithic application)”時,SQL資料庫反規範化可能會導致資料重複和不一致。
因此,在單體應用到微服務架構的過渡階段,可以使用這種設計模式,如下圖所示:
在這種情況下,部分微服務可能會共享快取和資料庫儲存。不過,這隻有在兩個服務之間存在強耦合關係時才可以。對於基於微服務的新建應用程式而言,這是一種反模式。
六、非同步訊息傳遞微服務設計模式
雖然REST設計模式非常流行,但它是同步的,會造成阻塞。因此部分基於微服務的架構可能會選擇使用訊息佇列代替REST請求/響應,如下圖所示:
各個服務之間通過非同步的訊息佇列進行互動,當服務出現問題時,不會造成阻塞,佇列會幫助快取訊息,直到消費服務開始工作。