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

本文作者:孫玄、吳守星
孫玄 :【架構之美】微信公衆號作者,畢業於浙江大學,前轉轉公司首席架構師,大中後臺技術負責人;前58集團技術委員會主席,高級系統架構師;前百度資深研發工程師;
江帥帥:【江帥帥】微信公衆號作者,擅長系統架構設計,大數據,運維等技術領域;對大中後臺技術有豐富經驗;曾擔任懷致科技 CTO,並還在東軟集團、中國移動、多迪集團等企業中任職過相關技術負責人。

1、前言

通上文講到《微服務架構何去何從》,如果暫時沒有理解 ServiceMesh 存在解決什麼問題,建議先從從上文看起。微服務架構 2.0 Service Mesh 架構框架方面,業內陸續開源了不少優秀框架,主流兩個:Service Mesh 產品 Istio 和 AWS App Mesh,我們將從多角度探索與實踐Istio。

2、什麼是 Istio?

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

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

  1. 服務之間建立一個連接
  2. 連接通信之間整數等安全性
  3. 連接進行流量管理等控制
  4. 服務連接監控、日誌等觀察服務

爲了保證數據不丟,我們儘可能的設置較大的重試次數(參數是 retries),如果重試失敗了,對異常進行處理,可以把消息保存到另外安全到地方。

3、k8s、Istio 相輔相成

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

在這裏插入圖片描述

3.1 Istio 的架構

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

主要架構在於數據平面(Data Plane)和控制平面(Control Plane),

  • 數據平面:由一組和業務服務(如下圖 ServiceA 和 ServceB)成對出現的 Sidecar 代理(Envoy)構成,它的主要功能是接管服務的進出流量或服務轉發,並且與控制平面的 Mixer 通訊,接受調度策略。
  • 控制平面:主要包括了 Pilot、Mixer、Citadel 和 Galley 共 4 個組件,主要功能是通過管理和配置 Envoy 來管理流量,此外,控制平面配置 Mixers 來實施路由策略並收集檢測到的監控數據。
    在這裏插入圖片描述

3.2 Istio 核心組件

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

ps: 之後會在代碼配置中重新標誌這塊知識點。

  • Pilot
    主要的作用是配置和管理Envoy代理,爲高級路由(例如,A / B 測試,金絲雀部署等)提供流量管理功能,以及異常控制,如:超時,重試,斷路器等。下圖是Pilot的原理圖,主要的規則數據來源於用戶手動配置(路由規則)以及k8s(pod等信息)、Mesos來的一些元數據,通過proxy(Envoy)進行流量轉發。
    在這裏插入圖片描述
  • Mixer
    是一個獨立於平臺的組件,負責在整個 Service Mesh 中執行訪問控制和使用策略,並從 Envoy 代理和其他服務收集監控到的數據。
    提供 API 服務,可以自研監控分析 PAM 平臺對接 Mixer。
    在這裏插入圖片描述
  • Citadel
    通過內置身份和憑證管理,提供強大的服務到服務和最終用戶身份驗證。我們可以使用 Citadel 升級 Service Mesh 中的未加密流量。我們可以使用 Istio 的授權功能來控制誰可以訪問服務。
    在這裏插入圖片描述
  • Galley
    負責配置的獲取、處理和分發。Gally使用了一種叫作MCP(Mesh Configuration Protocol,網格配置協議)的協議與其他組件進行通信。

4、Bookinfo 微服務源碼分析

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

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

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

5、Service Mesh 的應用難點

企業是在原有技術棧的基礎上引入 Service Mesh,從實際的應用實踐情況來看,往往會存在以下 4 種問題:
1、Service Mesh 模式在業務每次遠程調用,通信鏈路會變長,必將增加請求的響應延遲,性能損耗會被明顯放大。
2、基礎設施與業務解耦帶來的複雜性對運營系統的易用性和 Service Mesh 的穩定性要求極高,否則排查問題時很可能會面臨根本無從下手的情況。
3、服務通信框架及治理系統技術棧往往不是雲原生優先支持的 GRPC 和 HTTP,在 RPC 框架不兼容的背景下改造成本和挑戰非常大。
4、增加基礎設施團隊的運維成本,並且遇到業務問題,定位問題涉及到業務研發團隊和基礎設施研發團隊頻繁溝通交互,自然成本也會相應增加。

6、小結及預告

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章