開發者必須要了解的架構技術趨勢:Service Mesh

  • 2020 年 2 月 19 日
  • 筆記

內容概要

  • Service Mesh 是幹啥的?解決了什麼問題?
  • Service Mesh 的特性
  • Service Mesh 的主流實現有哪些?

1. Service Mesh 是什麼?

簡單來講,Service Mesh 簡化了微服務架構中服務間調用複雜度。

這就涉及到了2個問題:

  • 服務調用怎麼複雜了?
  • Service Mesh 怎麼解決的?

(1)服務調用複雜度問題

對於每個微服務,我們可以簡單的視為包含2個部分:

  • 業務邏輯
  • 網路功能

其中網路部分是非常複雜的,需要解決很多問題,例如:

  • 使用什麼網路傳輸協議(HTTP1.x/2.x, gRPC ……)
  • 服務發現
  • 熔斷機制
  • 處理超時
  • 重試
  • 服務調用時的負載均衡
  • ……

每個微服務都需要處理這些網路問題,如果所有微服務都使用同一套語言還好,可以使用一個框架統一解決,但如果使用了多種語言,那麼每種語言又需要統一處理一遍。

所以,可以說:

微服務架構中,最複雜的不是構建服務本身,而是處理服務間調用問題。

(2)Service Mesh 怎麼解決的?

核心部分說明:

  • 業務邏輯

微服務實現自己的業務功能。

  • 內部網路功能

雖然很多網路功能都可以統一由 Service Mesh 解決,但有些基礎的功能還需要微服務自己來解決。

例如,和 Service Mesh 如何溝通呢?使用 HTTP1.x, gRPC, TCP?

這部分功能通常由開發框架中的網路庫來解決。

  • Service Mesh Sidecar(邊車)

這部分就是用來解決應用級別通用的網路問題,例如熔斷、超時、服務發現 ……。

把這些問題與微服務中的業務程式碼完全隔離開,開箱即用。

  • Service Mesh Control Plane

負責管理所有 service mesh 的代理。

例如:

1)訪問控制

2)監控

3)服務發現

……

2. Service Mesh 功能特性

梳理一下 Service Mesh 的核心功能:

  • 服務間調用的彈性處理:熔斷、超時、重試、錯誤處理、負載均衡、故障轉移。
  • 服務發現:通過專用服務註冊表發現服務終結點。
  • 路由:提供原始的路由功能,不涉及服務中業務相關的路由功能。
  • 監控:度量、監控器、分散式日誌、分散式跟蹤。
  • 安全:傳輸層安全,key 管理。
  • 訪問控制:基於黑名單、白名單的訪問控制。
  • 部署:原生支援容器,Docker 和 Kubernetes。
  • 通訊協議:HTTP1.x, HTTP2, gRPC, TCP。

3. Service Mesh 實現

非常流行的2個開源實現:

  • Linkerd
  • Istio

他們的架構都比較簡單,實現機制不同。

4. 小結

Service Mesh 把通用的服務調用需要處理的問題都統一處理了,你可以更加專註於服務自身的業務了,也可以放心的使用不同開發語言。

但 Service Mesh 也有不足,首先就是增加了系統整體的複雜度,例如增加了 Sidecar、Control Plane,而且服務間的通訊不像以前那麼直接了,需要經過代理。還有就是成熟度還不是很高,需要大規模線上應用的磨合完善。

Tags: