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