1. 程式人生 > >微服務架構下 Service Mesh 會是閃亮的明天嗎?

微服務架構下 Service Mesh 會是閃亮的明天嗎?

在一起 7月 部署 服務發現 代理 負載 開源項目 images 我們

7月7日,時速雲企業級容器 PaaS 技術沙龍第 10 期在上海成功舉辦,時速雲容器架構負責人魏巍為大家詳細講解了 Service Mesh 中代表性的實踐方案、並以 Istio 為例詳細講解了 Service Mesh 中的技術關鍵點,包括 Istio 控制平面、Istio 數據平面等。以下內容根據魏巍分享整編,希望對大家了解 Service Mesh 有所幫助。

魏巍:大家下午好,剛才幾位講師講了 K8S 的存儲、PaaS 在企業的落地實踐等,我們接下來要講的是企業有了 PaaS 平臺、並且在平臺上部署了各種各樣的服務之後,這些服務該如何治理、服務與服務之間的關系,以及該以何種方式去維護等問題,而最近兩年興起的 Service Mesh,能夠更加便捷的管理這些服務。

Service Mesh 是一個專用的基礎設施層,目的是解決系統架構微服務化後的服務間通信和治理問題。Service Mesh 從實踐上來說有很多方案,但這些方案都有共同的特點,比如說像這裏提到的宏觀架構抽象,它都會劃分為 Control Plane 和 Data Plane,這種整體架構設計。

第二個特點,Service Mesh 基本來說是一組輕量級的與應用邏輯服務部署在一起的服務代理,它會用代理的方式去實現路由、斷路器、服務發現等,並且這些對應用服務都是透明的,當然這是在 K8S 上。如果說不是基於 Service Mesh 做的微服務架構,還可以基於 SpringCloud 做微服務架構,但是SpringCloud有自身的局限性,它主要用於以 java 為主的領域。

Istio、Conduit、Nginmesh 都是 Service Mesh 中比較火的實踐方案。Istio 是 Google 和 IBM 聯合 Lyft 的合作開源項目,是當前最主流的 Service Mesh 方案;Conduit 各方面的設計理念與 Istio 非常類似,其使用 Rust 重新編寫了 sidecar,控制面由 Go 編寫的 Conduit Control Plane 接管;NginMesh 並沒有自己獨立實現一整套 Service Mesh,只是用 nginx替代了 Istio 中 Envoy。

Istio

在 Istio、Conduit、 Nginmesh 這幾個實踐方案中,Istio 的影響最大,所以我們今天主要講解一下 Istio。

技術分享圖片

Istio 邏輯上分為控制平面(Control Plane)和數據平面(Data Plane)。

控制平面由 Pilot 、Mixer 、Citadel 組成,控制平面的每一個組件都負責一些特定的功能。數據平面由一組智能代理(Envoy)組成,代理部署為 sidecar,其控制微服務之間所有的網絡通信。

Istio 控制平面

Istio 控制平面包括以下組件:

Pilot:Pilot 負責 Envoy 配置、全生命周期管理。可以為 Envoy sidecar 提供服務發現,為流量管理功能實現了靈活的路由(如 A/B 測試、金絲雀發布)和彈性(如:超時、重試、熔斷等),它還可以將高級別的路由規則轉換為 Envoy 特定的配置並在運行時將配置傳播到 sidecar 中。

技術分享圖片

Mixer:Mixer 是一個平臺獨立的組件,其主要負責對後端系統的抽象、對接、策略配置等,並從 Envoy 代理和其它服務中收集測量數據。

抽象一點說,Mixer 提供:

後端抽象:Mixer 把 Istio 組件和 Mesh 中的服務從基礎設施細節中隔離開來。
中間媒介:Mixer 讓運維人員能夠對所有 Mesh 和基礎設施後端之間的交互進行控制。

Mixer 在某種程度上起到一種橋梁的作用。Envoy 提供 request 級別的屬性數據,這些數據交由 Mixer 進行評估和處理,Mixer 中的各種適配器 (adapter)基於這些屬性數據,來實現日誌記錄、監控指標采集展示、配額管理、ACL 檢查等功能。

Citadel:提供服務間認證和終端用戶認證功能,內置身份和證書管理,並且在網絡策略之外,提供服務級別的策略控制。

Istio數據平面

Envoy 是 Istio 的數據平面。Envoy 是一個高性能輕量級代理,用於控制服務網格中服務的所有入站和出站流量。Envoy 提供了很多內置功能,如動態服務發現、負載均衡、TLS 會話終結、HTTP/2& gRPC 流量代理、熔斷器、健康檢查等功能。
技術分享圖片

Envoy 被部署為 sidecar,與對應的微服務一起部署在一個 Kubernetes Pod 中。每個微服務實例通過各自的 sidecar 來實現發送和接受請求;微服務和微服務之間不直接通信,而是通過 sidecar 的代理轉發來實現通信。 sidecar 直接形成調用網絡,就像一個“網格”一樣。使用 sidecar 代理模型代碼無需重新構建或重寫代碼。

註:關註時速雲微信訂閱號,回復:7.7上海PPT,即可下載講師分享PPT。

微服務架構下 Service Mesh 會是閃亮的明天嗎?