服務網格 Service Mesh

WindWant發表於2023-12-27

什麼是服務網格?

服務網格是一個軟體層,用於處理應用程式中服務之間的所有通訊。該層由容器化微服務組成。隨著應用程式的擴充套件和微服務數量的增加,監控服務的效能變得越來越困難。為了管理服務之間的連線,服務網格提供了監控、記錄、跟蹤和流量控制等新功能。它獨立於每項服務的程式碼,這使它能夠跨網路邊界和多個服務管理系統工作。

為什麼需要服務網格?

在現代應用程式架構中,您可以將應用程式作為可獨立部署的小型微服務的集合來構建。不同的團隊可以構建單獨的微服務並選擇其程式語言和工具。但是,微服務必須進行通訊,應用程式程式碼才能正常執行。

應用程式效能取決於服務之間通訊的速度和彈性。開發人員必須跨服務監控和最佳化應用程式,但由於系統的分佈性質,他們很難獲得可見性。隨著應用程式的擴充套件,管理通訊變得更加複雜。

服務級別的可觀測性

隨著部署的工作負載和服務越來越多,開發人員發現很難理解所有服務是如何協同工作的。例如,服務團隊想知道他們的下游和上游依賴關係是什麼。他們希望更清楚地瞭解服務和工作負載在應用程式層的通訊方式。

服務級別控制

管理員希望控制哪些服務相互通訊,以及它們執行哪些操作。他們希望對微服務架構中服務的行為、策略和互動進行精細的控制和治理。強制執行安全策略對於監管合規至關重要。

服務網格有哪些優勢?

服務網格提供了一個集中的專用基礎設施層,用於處理分散式應用程式中複雜的服務到服務通訊。

服務發現

服務網格提供自動服務發現,可以減少管理服務端點的運維負擔。它們使用服務登錄檔來動態發現和跟蹤網格中的所有服務。無論服務位於何處或底層基礎設施如何,都可以無縫地相互查詢和通訊。您可以根據需要部署新服務來快速擴充套件。

負載均衡

服務網格使用各種演算法(例如迴圈演算法、最少連線或加權負載均衡)在多個服務例項之間智慧地分配請求。負載均衡可提高資源利用率並確保高可用性和可擴充套件性。您可以最佳化效能並防止出現網路通訊瓶頸。

流量管理

服務網格提供高階流量管理功能,可對請求路由和流量行為進行精細控制。下面是幾個示例。

流量分割

您可以將傳入流量劃分到不同的服務版本或配置中。網格將一些流量引導到更新後的版本,從而以受控方式逐步推出變更。這樣可以實現平穩過渡,並最大限度地降低變更的影響。

請求映象

您可以將流量複製到測試或監控服務進行分析,而不影響主請求流。映象請求時,您可以深入瞭解服務如何在不影響生產流量的情況下處理特定請求。

金絲雀部署

您可以將一小部分使用者或流量引導到新的服務版本,而大多數使用者則繼續使用現有的穩定版本。在有限的接觸範圍內,您可以在現實環境中試驗新版本的行為和效能。

安全性

服務網格提供安全通訊功能,例如雙向 TLS(mTLS)加密、身份驗證和授權。雙向 TLS 支援服務間通訊中的身份驗證。它透過加密流量來幫助確保資料的機密性和完整性。您還可以強制執行授權策略,以控制哪些服務訪問特定端點或執行特定操作。

監控

服務網格提供全面的監控和可觀測性功能,可深入瞭解服務的執行狀況、效能和行為。監控還支援故障排除和效能最佳化。以下是您可以使用的監控功能示例:

  • 收集延遲、錯誤率和資源利用率等指標,以分析整體系統效能

  • 執行分散式跟蹤,檢視多個服務中請求的完整路徑和時間

  • 在日誌中捕獲服務事件,用於審計、除錯和合規目的

服務網格是如何工作的?

服務網格從單個服務中移除控制服務間通訊的邏輯,並將通訊抽象到自己的基礎設施層。它使用多個網路代理來路由和跟蹤服務之間的通訊。

代理充當組織網路和微服務之間的中間閘道器。所有進出該服務的流量都透過代理伺服器路由。單個代理有時被稱為 sidecar,因為它們是分開執行的,但在邏輯上位於每個服務旁邊。這些代理一起構成了服務網格層。

image

服務網格架構中有兩個主要組成部分:控制皮膚和資料皮膚。

資料皮膚

資料皮膚是服務網格的資料處理元件。它包括所有 sidecar 代理及其功能。當一個服務想要與其他服務通訊時,sidecar 代理會採取以下操作:

  • sidecar 攔截請求

  • 它將請求封裝在單獨的網路連線中

  • 它在源代理和目標代理之間建立安全的加密通道

sidecar 代理處理服務之間的低階訊息傳遞。它們還會實施斷路和請求重試等功能,以增強彈性並防止服務降級。服務網格功能(例如負載均衡、服務發現和流量路由)在資料皮膚中實施。

控制皮膚

控制皮膚充當服務網格的中央管理和配置層。

使用控制皮膚,管理員可以在網格內定義和配置服務。例如,他們可以指定服務端點、路由規則、負載均衡策略和安全設定等引數。定義配置後,控制皮膚將必要資訊分發到服務網格的資料皮膚。

代理使用配置資訊來決定如何處理傳入的請求。它們還可以接收配置更改並動態調整其行為。您可以實時更改服務網格配置,而無需重新啟動或中斷服務。

服務網格實現通常在控制皮膚中包括以下功能:

  • 用於跟蹤網格內所有服務的服務登錄檔

  • 自動發現新服務並刪除非活動服務

  • 收集和聚合遙測資料,例如指標、日誌和分散式跟蹤資訊

image

什麼是 Istio?

Istio 是一個開源服務網格專案,設計為主要與 Kubernetes 配合使用。Kubernetes 是一款開源容器編排平臺,用於大規模部署和管理容器化應用程式。

Istio 的控制皮膚元件本身作為 Kubernetes 工作負載執行。它使用 Kubernetes 容器組(一組共享一個 IP 地址的緊密耦合的容器)作為 sidecar 代理設計的基礎。

Istio 的第 7 層代理在與主服務相同的網路環境中作為另一個容器執行。從這個位置,它可以攔截、檢查和操作所有透過容器組的網路流量。但是,主容器不需要任何改動,甚至不需要知道這種情況正在發生。

開源服務網格實施面臨哪些挑戰?

以下是與 Istio、Linkerd 和 Consul 等開源平臺相關的一些常見服務網格挑戰。

複雜性

服務網格引入了其他基礎設施元件、配置要求和部署注意事項。它們的學習曲線很陡峭,這要求開發人員和操作人員獲得使用特定服務網格實施方面的專業知識。培訓團隊需要時間和資源。組織必須確保團隊具備必要的知識,以瞭解服務網格架構的複雜性並對其進行有效配置。

運維管理費用

服務網格會帶來部署、管理和監控資料皮膚代理和控制皮膚元件的額外開銷。例如,您必須執行以下操作:

  • 確保服務網格基礎設施的高可用性和可擴充套件性

  • 監控代理的執行狀況和效能

  • 處理升級和相容性問題

必須仔細設計和配置服務網格,以最大限度地減少對整個系統的效能影響。

整合挑戰

服務網格必須與現有基礎設施無縫整合,才能執行其所需的功能。這包括容器編排平臺、網路解決方案和技術堆疊中的其他工具。

在複雜多樣的環境中,要確保與其他元件的相容性和順利整合可能具有挑戰性。要更改 API、配置格式和依賴關係,需要進行持續的規劃和測試。如果您需要在堆疊中的任何位置升級到新版本,也是如此。

相關文章