淺談ISTIO服務(wù)網(wǎng)格
Part 02、istio到底做了什么工作
Buoyant的CEO William Morgan,也就是Service Mesh這個(gè)詞的發(fā)明人,對Service Mesh的定義為:“服務(wù)網(wǎng)格是一個(gè)基礎(chǔ)設(shè)施層,用于處理服務(wù)間通信。云原生應(yīng)用有著復(fù)雜的服務(wù)拓?fù)洌?wù)網(wǎng)格保證請求在這些拓?fù)渲锌煽康卮┧?。在?shí)際應(yīng)用當(dāng)中,服務(wù)網(wǎng)格通常是由一系列輕量級的網(wǎng)絡(luò)代理組成的,它們與應(yīng)用程序部署在一起,但對應(yīng)用程序透明。”
從上面的定義來看,我們可以總結(jié)以下service mesh或者說istio的幾個(gè)特點(diǎn):
1、 通過代理,保證服務(wù)與服務(wù)、服務(wù)與基礎(chǔ)設(shè)施間以及內(nèi)外部請求的可靠性,這樣的可靠不僅僅是代表網(wǎng)絡(luò)拓?fù)涞穆?lián)通性,還要考慮請求的負(fù)載均衡以及網(wǎng)絡(luò)問題下的熔斷。
2、 是集群的設(shè)施,對服務(wù)透明,不需要服務(wù)的強(qiáng)依賴,因此對服務(wù)的語言、框架也沒有特殊的要求。當(dāng)istio變更和升級時(shí)候,也不需要服務(wù)隨同升級。
3、 網(wǎng)絡(luò)控制和監(jiān)控粒度的細(xì)化。比如按照之前的灰度方式,基本上都是通過服務(wù)或者是網(wǎng)關(guān)服務(wù)進(jìn)行流量的分流,使用istio則通過基礎(chǔ)服務(wù)的代理配置分流的規(guī)則,從而保證研發(fā)對流量的深度控制。
Part 02、istio的實(shí)現(xiàn)框架
Istio服務(wù)網(wǎng)格可以劃為控制平面和數(shù)據(jù)平面,數(shù)據(jù)平面是代理組件以及服務(wù)通過代理進(jìn)行的請求,控制平面則對數(shù)據(jù)平面的組件進(jìn)行發(fā)現(xiàn)、配置、管控,是這個(gè)istio的大腦,不難看出,控制面實(shí)際上是一種中心化的設(shè)計(jì)。
圖1 istio部署視圖
宏觀上可以看作是代理組件之間在進(jìn)行數(shù)據(jù)的請求,而每個(gè)代理節(jié)點(diǎn)注冊到控制平面,有控制平面管控和調(diào)節(jié)代理節(jié)點(diǎn)(實(shí)際是代理節(jié)點(diǎn)所在的服務(wù))的路由。
?
圖2 istio具體組件
控制平面主要組件包括Pilot, Mixer、Galley和Citadel
Mixer:顧名思義,在應(yīng)用和控制層組件間形成中間層,從而實(shí)現(xiàn)不同架構(gòu)的后端應(yīng)用與組件間的解耦,路由組件的上報(bào)信息直接發(fā)向Mixer,由Mixer來適配和轉(zhuǎn)發(fā)。
Pilot: 是Istio實(shí)現(xiàn)流量管理的核心組件,它主要的作用是配置和管理Envoy代理。
Citadel:是安全相關(guān)的組件,主要負(fù)責(zé)密鑰和證書的管理。
Galley:配置管理組件,負(fù)責(zé)配置的獲取和處理。
Part 03、istio實(shí)現(xiàn)請求的可視化
Istio tracing可以用來做什么呢?
1、服務(wù)依賴分析
2、性能/延遲優(yōu)化
3、平均時(shí)延的統(tǒng)計(jì)
4、請求慢的原因分析
Istio利用Envoy的分布式跟蹤功能提供開箱即用的跟蹤集成,我們可以選用Jaeger的追蹤平臺來實(shí)現(xiàn)。
具體來講,一個(gè)請求在服務(wù)間或者服務(wù)調(diào)用過程中,對相關(guān)的請求都在頭部添加一個(gè)id,通過Envoy收集相同id的來判斷是否在一個(gè)請求流程中。
圖3 trace原理
Jaeger組件收集到數(shù)據(jù)流信息后經(jīng)過聚合,可以圖形化展示接口調(diào)用的記錄以及單個(gè)接口具體的流程。
圖4 服務(wù)流量聚合
圖5 某個(gè)請求具體信息
實(shí)際上,收集請求的過程并非是透明且對應(yīng)用無感知的,而是會對istio造成一定的影響,因此我們可以選用較少的流量比例進(jìn)行采樣。