ServiceMesh(3)
前篇:
《ServiceMesh究竟解決什麼問題》 《什麼是Istio,ServiceMesh最流行落地》 Istio是ServiceMesh的産品化落地:- 它幫助微服務之間建立連接配接,幫助研發團隊更好的管理與監控微服務,并使得系統架構更加安全
- 它幫助微服務分層解耦,解耦後的proxy層能夠更加專注于提供基礎架構能力,例如:
(1)服務發現(discovery)
(2)負載均衡(load balancing)
(3)故障恢複(failure recovery)
(4)服務度量(metrics)
(5)服務監控(monitoring)
(6)A/B測試(A/B testing)
(7)灰階釋出(canary rollouts)
(8)限流限速(rate limiting)
(9)通路控制(access control)
(10)身份認證(end-to-end authentication)
等功能。
- 它使得業務工程團隊與基礎架構團隊都更加高效的工作,各自專注于自己的工作,更好的彼此賦能
今天來說一下Istio的核心架構設計。
關于Istio的架構設計,官網用了這樣一句話:

邏輯上,Istio分為:
- 資料平面(data plane)
- 控制平面(control plane)
這兩個詞,是Istio架構核心,但又是大家被誤導最多的地方。
資料平面和控制平面,不是ServiceMesh和Istio第一次提出,它是計算機網絡,封包路由轉發裡很成熟的概念:
資料平面(data plane):一般用來做快速轉發
控制平面(control plane):為快速轉發提供必要的資訊
畫外音:上兩圖為路由器架構。
它的設計原則是:
- 在一個路由裝置裡,轉發是最重要的工作,它具備最高的優先級,資料平面(data plane)的設計核心就是高效轉發,如何在最短的時間裡處理最多的包,往往使用高效記憶體管理、隊列管理、逾時管理等技術實作在硬體裡
- 控制平面(control plane)則不然,它要實作路由協定,裝置管理,IGMP,ARP協定的,它更偏向于控制與應用,往往由軟體實作
畫外音:
IGMP(Internet GroupManagement Protocol),一個多點傳播協定;
ARP(Address ResolutionProtocol),這個大家比較熟悉,根據IP位址擷取MAC位址;
Istio的架構核心與路由器非常類似:
服務(最上面的小紅框),通過本地通訊與proxy互動
資料平面,由一系列proxy組成(中間一層的兩個小紅框),核心職責是:
(1)高效轉發;
(2)接收和實施來自mixer的政策;
- 控制平面(底下的大紅框),核心是控制與應用,核心職責是:
(1)管理和配置邊車代理;
(2)通過mixer實施政策與收集來自邊車代理的資料;
(1)sidecar proxy,原文使用的是envoy,後文envoy表示代理;
(2)mixer,不确定要怎麼翻譯了,有些文章叫“混音器”,後文直接叫mixer;
(3)pilot,galley,citadel,不敢翻譯為飛行員,廚房,堡壘,後文直接用英文;
如架構圖所示,該兩層架構中,有五個核心元件。
資料平面,有一個核心元件:
Envoy (proxy)
Envoy的核心職責是高效轉發,更具體的,它具備這樣一些能力:
(1)服務發現
(2)負載均衡
(3)安全傳輸
(4)多協定支援,例如HTTP/2,gRPC
(5)斷路器(Circuit breakers)
(6)健康檢查
(7)百分比分流路由
(8)故障注入(Fault injection)
(9)系統度量
大部分能力是RPC架構都具備,或者比較好了解的,這裡面重點介紹下斷路器和故障注入。
斷路器設計
它是軟體架構設計中,一個服務自我保護,或者說降級的設計思路。
舉個例子:當系統檢測出某個接口有大量逾時時,斷路器政策可以終止對這個接口的調用(斷路器打開),經過一段時間後,再次嘗試調用,如果接口不再逾時,則慢慢恢複調用(斷路器關閉)。
故障注入設計
它是軟體架構設計中,一種故意引入故障,以擴大測試覆寫範圍,保障系統健壯性的方法,主要用于測試。
國内大部分網際網路公司,架構設計中不太會考慮故障注入,在作業系統核心開發與調試,路由器開發與調試中經常使用,可以用來模拟記憶體配置設定失敗、磁盤IO錯誤等一些非常難出現的異常,以確定測試覆寫度。
控制平面,有四個核心元件:
Mixer
Mixer的一些核心能力是:
(1)跨平台,作為其他元件的adapter,實作Istio跨平台的能力;
(2)和Envoy通訊,實時各種政策
(3)和Envoy通訊,收集各種資料
Mixer的設計核心在于“插件化”,這種模型使得Istio能夠适配各種複雜的主機環境,以及後端基礎設施。
Pilot
Pilot作為非常重要的控制平面元件,其核心能力是:
(1)為Envoy提供服務發現能力;
(2)為Envoy提供各種智能路由管理能力,例如A/B測試,灰階釋出;
(3)為Envoy提供各種彈性管理能力,例如逾時,重試,斷路政策;
Pilot的設計核心在于“标準化”,它會将各種流控的控制指令轉化為Envoy能夠識别的配置,并在運作時,将這些指令擴散到所有的Envoy。Pilot将這些能力抽象成通用配置的好處是,所有符合這種标準的Envoy都能夠接入到Pilot來。
潛台詞是,任何第三方可以實作自己的proxy,隻要符合相關的API标準,都可以和Pilot內建。
Citadel
Citadel元件,它提供終端使用者身份認證,以及服務到服務的通路控制。總之,這是一個和安全相關的元件。
Galley
Gally元件,它是一個配置擷取、校驗、處理、分發的元件,它的設計核心在于“解耦”,它将“從底層平台(例如:K8S)擷取使用者配置”與Istio解耦開來。
花邊:為什麼80%的中文使用者對Istio的二層架構的了解是錯的?
很多朋友問我,通過什麼管道學習最新的技術知識,我的回答一直是,英文官網。
畫外音:本文所有資訊來源于Istio1.1英文官網。
我在百度搜了下Istio,80%的資料,将二層架構翻譯為:
- 資料面闆
- 控制台
畫外音:大家可以百度搜一下“istio 控制台”
一開始我極其蒙圈,因為“資料平面”和“控制平面”是非常成熟的翻譯,路由器就是使用這個二層架構,ServiceMesh使用相同的架構設計進行解耦,應該不需要創造性翻譯呀。
後來,我懂了:
- 控制台(control panel)
半吊子英語的程式員,二手的技術文檔,真害人,唉。
總結
Istio采用二層架構,五大子產品,進行微服務ServiceMesh解耦:
- 資料平面,主要負責高效轉發
(1)envoy子產品:即proxy;
- 控制平面,主要負責控制與應用
(2)mixer子產品:支援跨平台,标準化API的adapter;
(3)pilot子產品:控制與配置envoy的大部分政策;
(4)citadel子產品:安全相關;
(5)galley子產品:與底層平台(例如:K8S)配置解耦;
實施與控制分離,經典的架構設計方法,GOT?
思路比結論重要。
本文轉自“架構師之路”公衆号,58沈劍提供。