Service Mesh:微服務架構的救世主還是多餘的花招?

努力的小雨發表於2023-11-13

Service Mesh的前世今生

在前面,我們提出了一個問題:隨著模組和節點的增多,微服務之間難免會遇到各種網路問題。為了解決這些問題,目前有一個解決方案,即使用Spring Cloud中的各個元件。然而,這種解決方案不僅需要更多的學習成本,而且對程式碼有一些要求,比如必須使用Java開發。這就導致了系統的單一性。因此,今天我們將討論一下服務網格Service Mesh。

Service Mesh的演進

第一階段:控制邏輯和業務邏輯耦合

在這個階段,邏輯控制和業務邏輯的實現是緊密結合在一起的,缺乏明確的分離和解耦。

這種耦合會導致一些問題。首先,邏輯控制的變更會直接影響業務邏輯的實現,增加了程式碼的複雜性和維護的難度。其次,不同的業務邏輯可能需要不同的邏輯控制方式,但由於耦合在一起,無法靈活地應對變化。此外,難以實現對邏輯控制的統一管理和監控,影響了系統的可維護性和可擴充套件性。

image

第二階段:公共庫

在Service Mesh的演進過程中,第二階段是引入公共庫的階段,旨在解耦邏輯控制和業務邏輯,消除重複程式碼,並降低開發和維護成本。然而,儘管公共庫的引入在一定程度上實現瞭解耦,但它仍然存在一些問題和侵入性。比如Spring Cloud各個元件

首先,公共庫的使用需要對特定的語言進行繫結,這限制了開發團隊的選擇和靈活性。如果系統中有多種語言的元件,就需要為每種語言編寫對應的公共庫,增加了開發和維護的複雜度。

其次,儘管公共庫可以消除一些重複的程式碼,但仍然需要開發人員手動呼叫和整合公共庫的功能。這種侵入性可能導致開發人員需要了解和掌握公共庫的使用方式,增加了學習成本和開發時間。

此外,公共庫的引入並沒有完全解決控制邏輯和業務邏輯之間的耦合問題。雖然它提供了一種解耦的方式,但仍然需要開發人員在業務邏輯中顯式呼叫公共庫的功能,這仍然存在一定的依賴關係。

image

第三階段:代理

代理作為一箇中間層,位於應用程式和網路之間,負責處理網路通訊邏輯。當應用程式需要傳送HTTP請求時,它只需要將請求傳送給代理,然後代理負責處理與伺服器的通訊。這樣,應用程式的程式碼不再需要關注網路通訊細節,可以更專注於業務邏輯的實現。儘管這個階段的代理功能可能仍然比較簡陋,但它的思路是正確的。

image

第四階段:邊車模式(Sidecar)

在第四階段,Service Mesh的最佳化演進進入了邊車模式(Sidecar)的階段。邊車模式是一種架構模式,它將代理作為一個獨立的程式部署到應用程式旁邊,形成一個邊車,負責處理與網路通訊相關的任務。

邊車模式的優勢在於進一步解耦了邏輯控制和業務邏輯,使得應用程式只需要關注自身的業務邏輯,而將網路通訊邏輯交給邊車來處理。邊車透過與應用程式進行互動,攔截和處理所有的網路請求和響應,從而提供了更高階別的控制和管理能力。

邊車模式的實現通常使用了輕量級容器技術,如Docker等,使得邊車可以獨立地部署和擴充套件。每個應用程式都有一個獨立的邊車,它們可以透過一個共享的Service Mesh控制平面進行協調和管理。

image

第五階段:Service Mesh 的出現

在這個階段,Service Mesh成為了一個獨立的基礎設施層,為應用程式提供了完整的服務通訊管理解決方案。它透過在整個服務間通訊路徑上插入代理,實現了對通訊的全面控制和管理。Service Mesh的出現使得服務間通訊的管理變得更加簡單和可靠,開發人員可以專注於業務邏輯的開發,而不必關注底層的網路通訊細節。同時,Service Mesh還提供了強大的安全性、監控和追蹤能力,可以幫助運維人員更好地監控和管理服務的執行狀態。總之,Service Mesh的出現為服務通訊帶來了一場革命,極大地提升了應用程式的可靠性和可維護性。

image

Service Mesh的主要功能

Service Mesh的主要功能包括:

  1. 服務發現和負載均衡:Service Mesh可以自動發現和管理所有服務例項,並透過負載均衡策略將流量分配到不同的例項上,以提高可用性和效能。
  2. 智慧路由和流量控制:Service Mesh可以基於各種條件和規則對流量進行智慧路由和控制,例如根據請求頭、路徑、使用者等進行流量劃分和限制,從而實現A/B測試、灰度釋出等功能。
  3. 鏈路追蹤和監控:Service Mesh可以對整個服務呼叫鏈進行跟蹤和監控,記錄每個請求的詳細資訊,包括請求時間、耗時、錯誤等,以幫助開發人員快速定位和解決問題。
  4. 安全認證和授權:Service Mesh可以提供強大的安全機制,包括身份認證、訪問控制、資料加密等,以保護服務之間的通訊安全,並防止未經授權的訪問。
  5. 故障恢復和容錯:Service Mesh可以自動監測和檢測服務例項的健康狀態,並在出現故障時自動進行故障恢復和容錯處理,以提高服務的可靠性和穩定性。
  6. 可觀察性和除錯能力:Service Mesh可以提供豐富的監控指標和日誌,幫助開發人員深入瞭解系統的執行情況,並透過視覺化介面和工具進行除錯和排查問題。

image

ServiceMesh和Kubernetes關係

image

Kubernetes是一個開源的容器編排和排程平臺,它的主要目標是解決容器化應用的管理和排程問題。Kubernetes提供了各種功能,例如自動化部署、彈性擴縮容、服務發現和負載均衡等,以幫助開發人員更好地管理和執行容器化應用。Kubernetes透過使用排程器來管理應用的生命週期,確保應用始終處於預期的狀態。

Service Mesh則是專注於解決微服務架構中的服務間網路通訊問題的一種架構模式。它透過在應用程式旁邊引入代理(通常稱為邊車)來管理服務之間的通訊。代理負責處理請求的轉發、負載均衡、智慧路由、安全認證等功能。Service Mesh為微服務架構提供了更強大的功能和管理能力,使得開發人員可以更好地管理和監控服務之間的通訊,同時也提供了更高的可觀察性、安全性和可靠性。

在實踐中,Kubernetes和Service Mesh可以結合使用,相互增強。Kubernetes提供了強大的容器編排和排程功能,使得微服務應用可以在容器環境中高效執行。而Service Mesh作為對Kubernetes網路功能的擴充套件和延伸,可以進一步提供服務間的流量管理、安全認證、故障恢復等功能,以滿足微服務架構中更復雜的需求。

Service Mesh 產品

image

Istio:Istio是由Google、IBM聯合開源的Service Mesh平臺,它提供了豐富的功能,包括流量管理、安全認證、故障注入等。它與Kubernetes緊密整合,可以透過Kubernetes的資源物件進行配置和管理。也是我們本系列的主角。

Envoy:Envoy是一個高效能的代理伺服器,可以作為Service Mesh的核心元件。它被廣泛應用於多個Service Mesh平臺中,包括Istio

Linkerd:Linkerd是另一個流行的Service Mesh平臺,它專注於簡化和加速服務間通訊。它提供了可觀察性、故障注入、負載均衡等功能,並與Kubernetes無縫整合。但是沒有強大的背景背書,比如:Google、IBM

總結

Service Mesh是一種用於解決微服務架構中服務間通訊問題的架構模式。在過去的幾年裡,Service Mesh經歷了演進的過程,從控制邏輯和業務邏輯耦合到引入公共庫,再到代理和邊車模式,最終發展成為獨立的基礎設施層。Service Mesh的出現極大地簡化了服務通訊的管理,提供了服務發現和負載均衡、智慧路由和流量控制、鏈路追蹤和監控、安全認證和授權、故障恢復和容錯、可觀察性和除錯能力等功能。Service Mesh和Kubernetes可以結合使用,相互增強,提供更強大和可靠的微服務架構解決方案。當前比較流行的Service Mesh產品包括Istio、Envoy和Linkerd等。

相關文章