共用方式為


復原性通訊

提示

此內容摘錄自《建構適用於 Azure 的雲端原生 .NET 應用程式》電子書,您可以在 .NET Docs 找到此電子書,或免費下載可離線閱讀的 PDF。

Cloud Native .NET apps for Azure eBook cover thumbnail.

在本書中,我們已採用微服務架構方法。 雖然這類架構提供重要的優點,但這有許多挑戰:

  • 跨流程網路通訊。 每個微服務都會透過網路通訊協定進行通訊,結果引起網路壅塞、延遲和暫時性錯誤。

  • 服務探索。 微服務透過本身的 IP 位址和連接埠在機器叢集上執行時,如何探索並彼此通訊?

  • 復原。 如何管理短期失敗並讓系統保持穩定?

  • 負載平衡。 輸入流量如何分散到微服務的多個執行個體?

  • 安全性。 如何強制執行傳輸層級加密和憑證管理等安全性考量?

  • 分散式監視。 - 如何跨越多個取用微服務相互關聯及擷取單一要求的追蹤和監視?

您可以使用不同的程式庫和架構來解決這些疑慮,但實作可能很昂貴、複雜且耗時。 您最後也會考量結合商務邏輯的基礎結構考量。

Service Mesh

較佳的方法是名為 Service Mesh 的演進技術。 Service Mesh 是可設定的基礎結構層,內建功能可用來處理服務通訊和上述其他挑戰。 這會將這些疑慮移至服務 Proxy 來分離這些疑慮。 Proxy 會部署到個別的流程 (稱為 sidecar),以提供與商務程式碼的隔離。 不過,sidecar 會連結至服務 -sidecar 是與服務一起建立的流程,並共用其生命週期。 圖 6-7 顯示此案例。

Service mesh with a side car

圖 6-7。 Service Mesh 與 sidecar

在上圖中,請注意 Proxy 如何攔截和管理微服務和叢集之間的通訊。

Service Mesh 會以邏輯方式分割成兩個不同的元件:資料平面控制平面。 圖 6-8 顯示這些元件及其責任。

Service mesh control and data plane

圖 6-8。 Service Mesh 控制項和資料平面

設定之後,Service Mesh 功能非常正常。 這可以從服務探索端點擷取對應的執行個體集區。 網格接著可以將要求傳送至特定執行個體,記錄結果的延遲和回應型別。 網格可以選擇最可能根據許多因素傳回快速回應的執行個體,包括最近要求觀察到的延遲。

如果執行個體沒有回應或失敗,網格將會在另一個執行個體上重試要求。 如果傳回錯誤,網狀結構會從負載平衡集區收回執行個體,並在修復後重新整理執行個體。 如果要求逾時,網格可能會失敗,然後重試要求。 網格會擷取計量和分散式追蹤並發出至集中式計量系統。

Istio 和 Envoy

雖然目前有一些 Service Mesh 選項,但 Istio 在本文撰寫期間最受歡迎。 Istio 是 IBM、Google 和 Lyft 的聯合聯盟。 這是開放原始碼供應項目,可整合到新的或現有的分散式應用程式中。 這項技術提供一致且完整的解決方案,以保護、連接和監視微服務。 其中的功能包括:

  • 使用強式身分識別型驗證和授權來保護叢集中的服務對服務通訊。
  • HTTP、gRPC、WebSocket 和 TCP 流量的自動負載平衡。
  • 使用多樣化的路由規則、重試、容錯移轉和錯誤插入,更精細地控制流量行為。
  • 支援存取控制、速率限制和配額的插入式原則層和設定 API。
  • 叢集中所有流量的自動計量、記錄和追蹤,包括叢集輸入和輸出。

Istio 實作的主要元件是名為 Envoy Proxy 的 Proxy 服務。 這會與每個服務一起執行,並為下列功能提供與平台無關的基礎:

  • 動態服務探索。
  • 負載平衡。
  • TLS 終止。
  • HTTP 和 gRPC Proxy。
  • 斷路器復原能力。
  • 健康情況檢查。
  • 使用 Canary 部署輪替更新。

如前所述,Envoy 會部署為叢集中每個微服務的 sidecar。

與 Azure Kubernetes Service 整合

Azure 雲端採用 Istio,並在 Azure Kubernetes Service 內提供直接支援。 下列主題有助於您開始使用:

參考資料