Service Mesh是什麼,為我們解決了什麼問題?

uu365發表於2021-07-30

  1、Service Mesh是什麼?

  Service Mesh翻譯為“服務網格”,作為服務間通訊的基礎設施層。輕量級高效能網路代理,提供安全的、快速的、可靠地服務間通訊,與實際應用部署一起,但對應用透明。應用作為服務的發起方,只需要用最簡單的方式將請求傳送給本地的服務網格代理,然後網格代理會進行後續的操作,如服務發現,負載均衡,最後將請求轉發給目標服務。

  **Service Mesh目的是解決系統架構微服務化後的服務間通訊和治理問題。**服務網格由Sidecar節點組成,這個模式的精髓在於實現了資料面(業務邏輯)和控制面的解耦。具體到微服務架構中,即給每一個微服務例項同步部署一個Sidecar。

  Service Mesh部署網路結構圖.png

  <center>Service Mesh部署網路結構圖</center> 在`Service Mesh`部署網路結構圖中,綠色方塊為應用服務,藍色方塊為 `SideCar`,應用服務之間透過`Sidecar`進行通訊,整個服務通訊形成圖中的藍色網路連線,圖中所有藍色部分就形成了`Service Mesh`。其具備如下主要特點:

  應用程式間通訊的中間層

  輕量級網路代理

  應用程式無感知

  解耦應用程式的重試/超時、監控、追蹤和服務發現

  2、Service Mesh到底解決了什麼問題

  從上述Service Mesh的定義看:

  基礎設施層是Service Mesh的定位,致力於解決微服務基礎設施標準化、配置化、服務化和產品化的問題。

  服務間通訊是Service Mesh技術層面對的問題,對微服務遮蔽通訊的複雜度,解決微服務的通訊治理問題。

  請求的可靠傳遞是Service Mesh的目標。

  輕量級網路代理是Service Mesh的部署方式。

  對應用程式透明是Service Mesh的亮點和特色,實現對業務無侵入。

  綜合上述,Service Mesh主要解決使用者如下3個維度的痛點需求:

  完善的微服務基礎設施

  透過將微服務通訊下沉到基礎設施層,遮蔽了微服務處理各種通訊問題的複雜度,形成微服務之間的抽象協議層。開發者無需關心通訊層的具體實現,也無需關注RPC通訊(包含服務發現、負載均衡、流量排程、流量降級、監控統計等)的一切細節,真正像本地呼叫一樣使用微服務,通訊相關的一起工作直接交給Service Mesh。

  語言無關的通訊和鏈路治理

  功能上,Service Mesh並沒有提供任何新的特性和能力,Service Mesh提供的所有通訊和服務治理能力在Service Mesh之前的技術中均能找到,比如Spring Cloud就實現了完善的微服務RPC通訊和服務治理支援。

  Service Mesh改變的是通訊和服務治理能力提供的方式,透過將這些能力實現從各語言業務實現中解耦,下沉到基礎設施層面,以一種更加通用和標準化的方式提供,遮蔽不同語言、不同平臺的差異性,有利於通訊和服務治理能力的迭代和創新,使得業務實現更加方便。

  Service Mesh避免了多語言服務治理上的重複建設,透過Service Mesh語言無關的通訊和服務治理能力,助力於多語言技術棧的效率提升。

  通訊和服務治理的標準化

  微服務治理層面,Service Mesh是標準化、體系化、無侵入的分散式治理平臺。

  標準化方面,Sidecar成為所有微服務流量通訊的約束標準,同時Service Mesh的資料平臺和控制平面也透過標準協議進行互動。

  體系化方面,從全域性考慮,提供多維度立體的微服務可觀測能力(Metric、Trace、Logging),並提供體系化的服務治理能力,如限流、熔斷、安全、灰度等。

  透過標準化,帶來一致的服務治理體驗,減少多業務之間由於服務治理標準不一致帶來的溝通和轉換成本,提升全域性服務治理的效率。

  3、Service Mesh的原理

  Service Mesh的核心是資料平面Sidecar與控制平面Control Plane,如下圖:

  Service Mesh架構圖.png

  資料平面: Sidecar,與服務部署在一起的輕量級網路代理,用於實現服務框架的各項功能(如,服務發現、負載均衡、限流熔斷等),讓服務迴歸業務本質。

  資料平臺可以認為是將Spring Cloud、Dubbo等相關的微服務框架中通訊和服務治理能力獨立出來的一個語言無法的程式,並且更注重通用性和擴充套件性。在Service Mesh中,不再將資料平面代理視為一個個獨立的元件,而是將這些代理連線在一起形成一個全域性的分散式網格。

  在傳統的微服務架構中,各種服務框架的功能(如,服務發現、負載均衡、限流熔斷等)程式碼邏輯或多或少的都需要耦合到服務例項的程式碼中,給服務例項增加了很多無關業務的程式碼,同時帶來了一定的複雜度。

  有了SideCar之後,服務節點只做業務邏輯自身的功能,服務之間的呼叫只需交給SideCar,由SideCar完成註冊服務、服務發現、請求路由、熔斷限流、日誌統計等業務無關功能。

  在這種新的微服務架構中,所有的SideCar組成在一起,就形成了服務網格。那麼這個大型的服務網格並不是完全自治的,它還需要一個統一的控制節點Control Plane。

  控制平面: 是用來從全域性的角度上控制SideCar,相當於Service Mesh架構的大腦,控制著 SideCar來實現服務治理的各項功能。比如,它負責所有SideCar的註冊,儲存統一的路由表,幫助各個 SideCar進行負載均衡和請求排程;它收集所有 SideCar的監控資訊和日誌資料。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69997029/viewspace-2784263/,如需轉載,請註明出處,否則將追究法律責任。

相關文章