開發者必須要了解的架構技術趨勢: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,而且服務間的通訊不像以前那麼直接了,需要經過代理。還有就是成熟度還不是很高,需要大規模線上應用的磨合完善。