ServiceMesh(3)程序員
前篇:後端
Istio是ServiceMesh的產品化落地:架構
(1)服務發現(discovery)負載均衡
(2)負載均衡(load balancing)框架
(3)故障恢復(failure recovery)ide
(4)服務度量(metrics)微服務
(5)服務監控(monitoring)post
(6)A/B測試(A/B testing)
(7)灰度發佈(canary rollouts)
(8)限流限速(rate limiting)
(9)訪問控制(access control)
(10)身份認證(end-to-end authentication)
等功能。
今天來講一下Istio的核心架構設計。
關於Istio的架構設計,官網用了這樣一句話:
邏輯上,Istio分爲:
這兩個詞,是Istio架構核心,但又是你們被誤導最多的地方。
數據平面和控制平面,不是ServiceMesh和Istio第一次提出,它是計算機網絡,報文路由轉發裏很成熟的概念:
畫外音:上兩圖爲路由器架構。
它的設計原則是:
畫外音:
IGMP(Internet GroupManagement Protocol),一個組播協議;
ARP(Address ResolutionProtocol),這個你們比較熟悉,根據IP地址獲取MAC地址;
Istio的架構核心與路由器很是相似:
(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的一些核心能力是:
(1)跨平臺,做爲其餘組件的adapter,實現Istio跨平臺的能力;
(2)和Envoy通信,實時各類策略
(3)和Envoy通信,收集各類數據
Mixer的設計核心在於「插件化」,這種模型使得Istio可以適配各類複雜的主機環境,以及後端基礎設施。
Pilot做爲很是重要的控制平面組件,其核心能力是:
(1)爲Envoy提供服務發現能力;
(2)爲Envoy提供各類智能路由管理能力,例如A/B測試,灰度發佈;
(3)爲Envoy提供各類彈性管理能力,例如超時,重試,斷路策略;
Pilot的設計核心在於「標準化」,它會將各類流控的控制命令轉化爲Envoy可以識別的配置,並在運行時,將這些指令擴散到全部的Envoy。Pilot將這些能力抽象成通用配置的好處是,全部符合這種標準的Envoy都可以接入到Pilot來。
潛臺詞是,任何第三方能夠實現本身的proxy,只要符合相關的API標準,均可以和Pilot集成。
Citadel組件,它提供終端用戶身份認證,以及服務到服務的訪問控制。總之,這是一個和安全相關的組件。
Gally組件,它是一個配置獲取、校驗、處理、分發的組件,它的設計核心在於「解耦」,它將「從底層平臺(例如:K8S)獲取用戶配置」與Istio解耦開來。
不少朋友問我,經過什麼渠道學習最新的技術知識,個人回答一直是,英文官網。
我在百度搜了下Istio,80%的資料,將二層架構翻譯爲:
一開始我極其蒙圈,由於「數據平面」和「控制平面」是很是成熟的翻譯,路由器就是使用這個二層架構,ServiceMesh使用相同的架構設計進行解耦,應該不須要創造性翻譯呀。
後來,我懂了:
半吊子英語的程序員,二手的技術文檔,真害人,唉。
Istio採用二層架構,五大模塊,進行微服務ServiceMesh解耦:
(1)envoy模塊:即proxy;
(2)mixer模塊:支持跨平臺,標準化API的adapter;
(3)pilot模塊:控制與配置envoy的大部分策略;
(4)citadel模塊:安全相關;
(5)galley模塊:與底層平臺(例如:K8S)配置解耦;
實施與控制分離,經典的架構設計方法,GOT?
思路比結論重要。