什么是服務網格


1 什么是服務網格?

服務網格是分布式軟件系統內部用於管理所有“服務到服務”通信的一個系統。

聊服務網格為什么會出現之前,可以聊聊服務架構的演進過程。起初,我們使用一個單體應用來提供服務。 比如我們在做一個電商系統,采用典型的MVC三層架構,在單體架構中,組成這個系統的購物車功能,庫存查詢功能,訂單功能等都是這個服務內部的一個函數或接口。所以這些操作都是進程內的函數調用,不涉及諸如RPC等服務與服務的跨進程通信。但隨着時間的增加,我們發現單體架構越來越不能滿足我們的需求,比如用戶訪問暴增,業務邏輯愈加復雜,一個單體的服務已不能滿足功能及性能的要求。我們需要將其按業務領域拆分為幾個獨立的服務來對外提供服務,這就是微服務架構。比如原來的購物車功能,庫存查詢功能,訂單功能被拆分為獨立的服務。這時接收到一個購物請求,我們需要分別查詢不同的微服務來進行業務處理,這就涉及跨進程通信。

image

而由於服務到服務通信的網絡不穩定性,所以如下問題隨即出現了:請求失敗時如何進行重試?請求超時如何處理?請求太頻繁如何限速?服務熔斷怎么做?… 而基於語言或框架的輔助庫即是一種解決方案,如Netflix的Eureka,Hystrix等。而在服務里邊解決服務與服務通信問題存在多個弊端,如:需要侵入業務代碼,受語言或框架限制等。所以,完全解耦的,基於代理模式的服務網格設計理念更符合業界的青睞。

下圖即是一個服務網格部署圖,即每個服務的實例旁邊都有一個代理,這些代理被形象的稱為Sidecar,其來負責對被代理服務的進出流量進行管理。整個系統的所有這些負責服務與服務通信的Sidecar即組成一個服務網格。所以服務只要關注業務邏輯即可,服務與服務通信的邏輯被抽到了服務網格里邊,實現了解耦。

image

因服務網格代理了分布式系統內所有服務與服務通信的進出流量,相當於將分布式系統中最關鍵的一些跨進程連接點串聯起來,並將其管理,觀察。所以其就像系統的眼睛一樣,讓開發者不再對龐大的調用網絡望而生畏,讓分布式系統像單體架構一樣可以做到可觀察。

2 服務網格發展歷史

2010年初,Twitter開始開發基於Scala的Finagle,自此Linkerd服務網格誕生。
2013年末,SmartStack提供一種基於HAProxy的進程外的服務發現機制以滿足逐漸興起的微服務架構。
2014,Netflix發布包括Prana的一組JVM工具包,允許不同語言開發的服務通過HTTP進行調用。
2016,NGINX開發Fabric Model,一個基於NGINX Plus的類服務網格產品。
2017以后,Linkerd,Istio,Maesh,Kuma逐步興起。
3 服務網格架構
經過上面的介紹,我們對服務網格的衍生及其解決的問題有了一定的了解。本節粗略看一下業內服務網格的通用設計及系統架構,以期對其有一個更好的認識。

服務網格主要由兩部分組成:負責管理服務與服務通信的Sidecar Proxy被稱為數據面;以UI,配置及命令等控制數據面行為的被稱為控制面。

image

4 使用服務網格可以做什么?

  1. 流量管理

    提供灰度發布,按規則流量分發等功能。

  2. 熔斷重試

    提供超時處理,熔斷,重試等功能。

  3. 鑒權授權

    提供mTLS安全通信,服務與服務的鑒權授權等功能。

  4. 觀察及監控

    提供請求量統計,請求延時統計,請求成功率統計,分布式鏈路追蹤等功能。

5 服務網格的實現

Linkerd

CNCF孵化項目,100%開源,Rust實現,目標是極簡,能用,數據面代理極小(<10mb),速度極快(<1ms)。

Istio

最流行的服務網格實現,基於Envoy數據面,背靠谷歌及IBM,功能豐富

Consul

HashiCorp出品,基於Envoy數據面,支持的平台多。

Kuma

基於API Gateway Kong的服務網格。

Traefik Mesh

基於雲原生API Gateway Traefik的服務網格。

更詳細對比,請參考 servicemesh.es

6 服務網格的未來

Mecha - 多運行時微服務架構。未來架構的趨勢可能是將所有傳統的中間件遷移至其它運行時,只在服務中編寫業務邏輯。微軟Dapr是業界第一個多運行時實踐項目。

image

參考資料

[1] What is a service mesh? - RedHat

[2] What is a service mesh? - NGINX

[3]Service Mesh Ultimate Guide: Managing Service-to-Service Communications in the Era of Microservices - InfoQ

[4]What’s a service mesh? And why do I need one? - Buoyant


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM