微服務實踐:服務設計

微服務實踐:服務設計

服務劃分

劃分的原則

  • 單一職責原則:微服務通常功能單一,只負責處理一件事。服務需呈現「高內聚,低耦合」原則
  • 服務依賴原則:避免服務間的循環依賴,避免核心服務依賴非核心服務。如電商平臺,核心業務是訂單相關,非核心業務是推薦等。
  • 服務自治原則:按服務組織的團隊具有更小的溝通成本,因此從服務交付的角度考慮,服務的劃分也應考慮如何讓團隊能夠參與服務構建的整個生命週期,包括需求、設計、實現、驗證、發佈、運維甚至運營。

說明:代碼行數並不能作爲直接劃分依據!

服務劃分策略

 

 

服務實現

  通常對於單個服務而言,其內部結構如下幾個部分:

  

 

資源定義

 

 

服務間的通信

  微服務的通信方式分爲基於請求/響應的同步通信和基於消息(事件)的異步通信兩類。

  

 

同步通信機制

  微服務常見的同步通信機制有遠程過程調用(RPC)和REST兩種。

遠程過程調用

   

 

異步通信機制

 

服務設計模式

鏈式模式

  當某業務功能按照數據的流動,拆分成多個服務,並且服務之間形成鏈式的請求/響應關係的模式時,就稱其爲鏈式模式。

  

 

 

  在鏈式模式中,消費者端的請求到達網關,網關向微服務A發起調用,微服務A再向B發起調用,B處理後又會將請求發給C,然後再逆向的獲取響應,將結果最終返回給消費者端。

  鏈式模式只能串行調用,無法並行處理,且調用整體成功率等於鏈條中每次調用成功率之乘積。

聚合器模式

  當某服務需要調用其他多個服務,進行業務功能的組裝時,便形成了聚合器模式。

  

 

  比如服務A是訂單服務,那麼他需要從服務B(商品目錄服務)中檢查庫存,然後調用服務C(計價服務)計算總價,最後調用服務D(銀行扣款服務)進行交易結算。

  但是聚合模式難以保證數據一致性,比如下單過程有多個環節,屬於分佈式事務的內容。

基於事件的異步模式

  上述兩種服務大多采用同步機制,因此會造成消費者端的阻塞。採用基於事件驅動的方式,可以通過異步的機制實現服務聚合。

  

 

  消息是連接服務A和B、C之間的媒介。存在一個消息隊列,服務B和服務C對消息隊列中的A
的事件進行訂閱。當服務A狀態發生變化時,他發佈事件到消息隊列中。當B和C收到事件時,分別更新各自的狀態,同時可能發佈新的事件,觸發下一步操作。這就是典型的基於消息隊列,進行異步時間處理的機制。

  服務間協作的關鍵點是消息,因此要保證消息發佈與服務的狀態保持一致。