Istio 1.6架構及性能

Istio 架構

Istio 服務網格從邏輯上分爲數據平面和控制平面。git

  • 數據平面 由一組智能代理(Envoy)組成,被部署爲 sidecar。這些代理負責協調和控制微服務之間的全部網絡通訊。他們還收集和報告全部網格流量的遙測數據。
  • 控制平面 管理並配置代理來進行流量路由。

Istio 核心組件

下圖展現了組成每一個平面的不一樣組件:github

istio-arch

Istio 中的流量分爲數據平面流量和控制平面流量。api

  • 數據平面流量是指工做負載的業務邏輯發送和接收的消息
  • 控制平面流量是指在 Istio 組件之間發送的配置和控制消息用來編排網格的行爲
  • Istio 中的流量管理特指數據平面流量

Envoy

Istio 使用 Envoy 代理的擴展版本。Envoy 是用 C++ 開發的高性能代理,用於協調服務網格中全部服務的入站和出站流量。Envoy 代理是惟一與數據平面流量交互的 Istio 組件。安全

Envoy 代理被部署爲服務的 sidecar,在邏輯上爲服務增長了 Envoy 的許多內置特性,例如:網絡

  • 動態服務發現
  • 負載均衡
  • TLS 終端
  • HTTP/2 與 gRPC 代理
  • 熔斷器
  • 健康檢查
  • 基於百分比流量分割的分階段發佈
  • 故障注入
  • 豐富的指標

這種 sidecar 部署容許 Istio 提取大量關於流量行爲的信號做爲屬性。Istio 可使用這些屬性來實施策略決策,並將其發送到監視系統以提供有關整個網格行爲的信息。架構

由 Envoy 代理啓用的一些 Istio 的功能和任務包括:負載均衡

  • 流量控制功能:經過豐富的 HTTP、gRPC、WebSocket 和 TCP 流量路由規則來執行細粒度的流量控制。
  • 網絡彈性特性:重試設置、故障轉移、熔斷器和故障注入。
  • 安全性和身份驗證特性:執行安全性策略以及經過配置 API 定義的訪問控制和速率限制。
  • 基於 WebAssembly 的可插拔擴展模型,容許經過自定義策略實施和生成網格流量的遙測。

Pilot

Pilot 爲 Envoy sidecar 提供服務發現、用於智能路由的流量管理功能(例如,A/B 測試、金絲雀發佈等)以及彈性功能(超時、重試、熔斷器等)。ide

Pilot 將控制流量行爲的高級路由規則轉換爲特定於環境的配置,並在運行時將它們傳播到 sidecar。Pilot 將特定於平臺的服務發現機制抽象出來,並將它們合成爲任何符合 Envoy API 的 sidecar 均可以使用的標準格式。微服務

下圖展現了平臺適配器和 Envoy 代理如何交互。性能

pilot-discovery

  1. 平臺啓動一個服務的新實例,該實例通知其平臺適配器。
  2. 平臺適配器使用 Pilot 抽象模型註冊實例。
  3. Pilot 將流量規則和配置派發給 Envoy 代理,來傳達這次更改。

Citadel

Citadel經過內置的身份和證書管理,能夠支持強大的服務到服務以及最終用戶的身份驗證。您可使用 Citadel 來升級服務網格中的未加密流量。使用 Citadel operator 能夠執行基於服務身份的策略。

Galley

Galley 是 Istio 的配置驗證、提取、處理和分發組件。它負責將其他的 Istio 組件與從底層平臺(例如 Kubernetes)獲取用戶配置的細節隔離開來。

Istio 部署模型

您能夠將單個網格配置爲包括多集羣。多集羣部署可爲您提供更大程度的隔離和可用性,但會增長複雜性。 若是您的系統具備高可用性要求,則可能須要集羣跨多個可用區和地域。 對於應用變動或新的版本,您能夠在一個集羣中配置金絲雀發佈,這有助於把對用戶的影響降到最低。 此外,若是某個集羣有問題,您能夠暫時將流量路由到附近的集羣,直到解決該問題爲止。
istio-multi-cluster

Istio 1.6 性能總結

Istio 負載測試 網格包含了 1000 個服務和 2000 個 sidecar,全網格範圍內,QPS 爲 70,000。 在使用 Istio 1.6 運行測試後,咱們獲得了以下結果:

  • 經過代理的 QPS 有 1000 時,Envoy 使用了 0.5 vCPU50 MB 內存
  • 網格總的 QPS 爲 1000 時,istio-telemetry 服務使用了 0.6 vCPU
  • Pilot 使用了 1 vCPU1.5 GB 內存。
  • 90% 的狀況 Envoy 代理只增長了 2.8 ms 的延遲。

參考文獻

https://preliminary.istio.io/docs/ops/deployment/architecture/

https://preliminary.istio.io/zh/docs/ops/deployment/architecture/

https://preliminary.istio.io/zh/docs/ops/deployment/deployment-models/

https://preliminary.istio.io/docs/ops/deployment/performance-and-scalability/

https://preliminary.istio.io/docs/ops/deployment/requirements/

相關文章
相關標籤/搜索