天天看點

一盞茶的時間初探網格服務架構Istio

前言

微服務架構2.0 Service Mesh架構架構方面,業内陸續開源了不少優秀架構,主流兩個:Service Mesh産品Istio 和 AWS App Mesh,我們将從多角度探索與實踐Istio。

什麼是Istio?

由官網定義如下:雲平台令使用它們的公司受益匪淺。但不可否認的是,上雲會給 DevOps 團隊帶來壓力。為了可移植性,開發人員必須使用微服務來建構應用,同時運維人員也正在管理着極端龐大的混合雲和多雲的部署環境。Istio 允許您連接配接、保護、控制和觀察服務。

我們可以看到Istio主要做微服務治理,并且主要分為四個功能:

1、服務之間建立一個連接配接

2、連接配接通信之間整數等安全性

3、連接配接進行流量管理等控制

4、服務連接配接監控、日志等觀察服務

為了保證資料不丢,我們盡可能的設定較大的重試次數(參數是retries),如果重試失敗了,對異常進行處理,可以把消息儲存到另外安全到地方。

K8s、Istio相輔相成

下圖可以看出,Istio可以解決Kubernetes的服務治理缺陷,功能上兩者進行了一個互補的結合,解決了雲原生服務治理、雲原生基礎設施。

一盞茶的時間初探網格服務架構Istio

Istio的架構

網格服務,通常和一系列網絡代理組成,其主要在于代碼無侵入、網絡代理,與應用程式部署在一起,但是應用程式卻不知情。

主要架構在于資料平面(Data Plane)和控制平面(Control Plane),

  • 資料平面:由一組和業務服務(如下圖ServiceA 和 ServceB)成對出現的Sidecar代理(Envoy)構成,它的主要功能是接管服務的進出流量或服務轉發,并且與控制平面的 Mixer 通訊,接受排程政策。
  • 控制平面:主要包括了Pilot、Mixer、Citadel和Galley共4個元件,主要功能是通過管理和配置 Envoy 來管理流量,此外,控制平面配置 Mixers來實施路由政策并收集檢測到的監控資料。
一盞茶的時間初探網格服務架構Istio

Istio核心元件

  • Envoy

    是一個用 C ++開發的高性能代理、CNCF第三個畢業項目,是以性能和可用性都是比較好的,對于Envoy有四個概念【LDS(監聽器發現服務)、RDS(路由發現服務)、CDS(叢集發現服務)、EDS(服務發現服務)】,每一個 pod 中都必須要部署一個 Sidecar。

ps: 之後會在代碼配置中重新标志這塊知識點。
  • Pilot

    主要的作用是配置和管理Envoy代理,為進階路由(例如,A / B 測試,金絲雀部署等)提供流量管理功能,以及異常控制,如:逾時,重試,斷路器等。

    下圖是Pilot的原理圖,主要的規則資料來源于使用者手動配置(路由規則)以及k8s(pod等資訊)、Mesos來的一些中繼資料,通過proxy(Envoy)進行流量轉發。

一盞茶的時間初探網格服務架構Istio
  • Mixer

    是一個獨立于平台的元件,負責在整個 Service Mesh 中執行通路控制和使用政策,并從 Envoy 代理和其他服務收集監控到的資料。

    提供APi服務,可以自研監控分析PAM平台對接Mixer。

一盞茶的時間初探網格服務架構Istio
  • Citadel

    通過内置身份和憑證管理,提供強大的服務到服務和最終使用者身份驗證。我們可以使用 Citadel 更新 Service Mesh 中的未加密流量。我們可以使用 Istio 的授權功能來控制誰可以通路服務。

一盞茶的時間初探網格服務架構Istio
  • Galley

    負責配置的擷取、處理和分發。Gally使用了一種叫作MCP(Mesh Configuration Protocol,網格配置協定)的協定與其他元件進行通信。

Bookinfo微服務源碼分析

了解上述概念後,大家可以拿Istio官網提供的一個微服務Book項目進行上手操作,項目位址:https://istio.io/zh/docs/examples/bookinfo

bookinfo 應用一共包含四個微服務:Productpage、Details、Reviews、Ratings。

  • Productpage 使用 Python 開發,負責展示書籍的名稱和書籍的簡介。
  • Details 使用 Ruby 開發,負責展示書籍的詳細資訊。
  • Reviews 使用 Java 開發,負責顯示書評。
  • Ratings 使用 Node.js 開發,負責顯示書籍的評星。

Service Mesh 的應用難點

企業是在原有技術棧的基礎上引入 Service Mesh,從實際的應用實踐情況來看,往往會存在以下 4 種問題:

1、Service Mesh 模式在業務每次遠端調用,通信鍊路會變長,必将增加請求的響應延遲,性能損耗會被明顯放大。

2、基礎設施與業務解耦帶來的複雜性對營運系統的易用性和 Service Mesh 的穩定性要求極高,否則排查問題時很可能會面臨根本無從下手的情況。

3、服務通信架構及治理系統技術棧往往不是雲原生優先支援的 GRPC 和 HTTP,在 RPC 架構不相容的背景下改造成本和挑戰非常大。

4、增加基礎設施團隊的運維成本,并且遇到業務問題,定位問題涉及到業務研發團隊和基礎設施研發團隊頻繁溝通互動,自然成本也會相應增加。

小結及預告

通過本文,相信讀者對微服務的概念和 Istio 的架構有了一定程度的了解。在微服務領域,它最大的優勢是解耦應用業務,企業能夠徹底從業務角度考慮問題,同時還可以與容器編排部署平台的內建,成為企業級應用編排部署和服務治理的标準形态。

讀者有興趣可持續關注,下面将持續更新Istio應用及剖析

·END·