天天看點

雲原生 - Istio可觀察性之分布式跟蹤(三)

作者:justmine 頭條号:大資料與雲原生 微信公衆号:大資料與雲原生 創作不易,在滿足創作共用版權協定的基礎上可以轉載,但請以超連結形式注明出處。 為了友善閱讀,微信公衆号已按分類排版,後續的文章将在移動端首發,想學習雲原生相關知識,請關注我。

雲原生 - 體驗Istio的完美入門之旅(一)

雲原生 - Why is istio(二)

[請持續關注...]

如前所述,業務微服務化後,每個單獨的微服務可能會有很多副本,多個版本,這麼多微服務之間的互相調用、管理和治理非常複雜,Istio統一封裝了這塊内容在代理層,最終形成一個分布式的微服務代理叢集(服務網格)。管理者通過統一的控制平面來配置整個叢集的應用流量、安全規則等,代理會自動從控制中心擷取動态配置,根據使用者的期望來改變行為。

話外音:借着微服務和容器化的東風,傳統的代理搖身一變,成了如今炙手可熱的服務網格。
雲原生 - Istio可觀察性之分布式跟蹤(三)

Istio就是上面service mesh架構的一種實作,通過代理(預設是envoy)全面接管服務間通信,完全支援主流的通信協定HTTP/1.1,HTTP/2,gRPC ,TCP等;同時進一步細分控制中心,包括Pilot、Mixer、Citadel等。

話外音:後面系列會詳細介紹控制中心的各個元件,請持續關注。

整體功能描述如下:

連接配接(Connect)

控制中心從叢集中擷取所有微服務的資訊,并分發給代理,這樣代理就能根據使用者的期望來完成服務之間的通信(自動地服務發現、負載均衡、流量控制等)。

保護(Secure)

所有的流量都是通過代理,當代理接收到未加密流量時,可以自動做一次封裝,把它更新成安全的加密流量。

控制(Control)

使用者可以配置各種規則(比如 RBAC 授權、白名單、rate limit 、quota等),當代理發現服務之間的通路不符合這些規則,就直接拒絕掉。

觀察(Observe)

所有的流量都經過代理,是以代理對整個叢集的通路情況知道得一清二楚,它把這些資料上報到控制中心,那麼管理者就能觀察到整個叢集的流量情況。

作為服務網格的一個完整解決方案,為了向運維人員提供豐富而深入的控制,同時又不給服務開發人員帶來負擔,Istio被設計為高度子產品化和可擴充的平台,涉及到衆多的元件,它們分工協作,共同組成了完整的控制平面。為了更好地學習如何運用Istio的連接配接、安全、控制、可觀察性全面地治理分布式微服務應用,先從戰略上鳥瞰Istio,進一步從戰術上學習Istio将更加容易,故作者決定從可觀察性開始Istio的布道,先體驗,再實踐,最後落地,一步步愛上Istio,愛上雲原生,充分利用雲資源的優勢,解放應用開發工程師的雙手,使他們僅僅關注業務實作,讓專業的人做專業的事,為企業創造更大的價值。

當流量流入服務網格中的微服務時,Istio可以為每個請求生成完整的記錄,包括源和目标的中繼資料等。使運維人員能夠将服務行為的審查控制到單個微服務的級别。

Istio基于監控的4 個黃金信号(延遲、流量、錯誤、飽和)來生成一系列的服務名額,同時還提供了一組預設的服務網格監控大盤。

話外音:Istio還為服務網格控制平面提供了更為詳細的監控名額。

Istio根據采樣率為每個請求生成完整的分布式追蹤軌迹,以便運維人員可以了解服務網格内微服務的依賴關系和調用流程。

當業務微服務化後,一次業務請求,可能會涉及到多個微服務,分布式跟蹤可以對跨多個分布式服務網格的1個請求進行追蹤分析,并通過可視化的方式深入地了解請求的延遲,序列化和并發,充分地了解服務流量實況,進而快速地排查和定位問題。

Istio利用Envoy 的分布式追蹤功能提供了開箱即用的追蹤內建。确切地說,Istio 提供了安裝各種各種追蹤後端服務的選項,并且通過配置代理來自動發送追蹤span到追蹤後端服務。

話外音:Istio目前支援的追蹤後端服務包括Zipkin、Jaeger、LightStep。 話外音:Istio分布式追蹤的整體功能,請參考文末連結。

預設情況下,使用demo配置檔案安裝時,Istio會捕獲所有請求的追蹤資訊,即每次通路 <code>/productpage</code> 接口時,都可以在dashboard中看到一條相應的追蹤資訊。此采樣頻率适用于測試或低流量網格。對于高流量網格(如:生産環境),請通過下面的兩種方法之一來降低追蹤采樣頻率:

在安裝時,使用可選項 <code>values.pilot.traceSampling</code> 來設定采樣百分比。

在運作時,通過編輯 <code>istio-pilot</code> deployment并通過以下步驟來改變環境變量:

Istio預設的追蹤采樣率為1%,即100個請求生成一次追蹤報告,有效值的範圍從 0.0 到100.0,精度為 0.01。

本篇以zipkin為例,體驗Istio的分布式追蹤功能。

請先部署Istio系統和線上書店例子,詳情請參考:雲原生 - 體驗Istio的完美入門之旅(一)。

要檢視追蹤資料,必須向服務發送請求。請求的數量取決于Istio的追蹤采樣率,預設為1%,即在第一個追蹤報告可見之前,需要發送至少100個請求。

使用如下指令向<code>productpage</code>服務發送200個請求:

雲原生 - Istio可觀察性之分布式跟蹤(三)

從上可以看出,産生了兩份追蹤報告,完全符合追蹤采集率。

雲原生 - Istio可觀察性之分布式跟蹤(三)
雲原生 - Istio可觀察性之分布式跟蹤(三)

關于追蹤報告的分析,這裡就不贅述了。

本篇先回顧了微服務架構的痛點,以及服務網格的本質,然後大緻概述了Istio的整體功能,最後從why、what、how的角度體驗了Istio的分布式跟蹤特性。除了分布式跟蹤,Istio的可觀察性還包括:日志、監控,敬請期待,未完待續。

如果有什麼疑問和見解,歡迎評論區交流。

如果覺得本篇有幫助的話,歡迎推薦和轉發。

如果覺得本篇非常不錯的話,可以請作者吃個雞腿,創作的源泉将如滔滔江水連綿不斷,嘿嘿。

https://istio.io/docs/tasks/observability/distributed-tracing/overview

https://istio.io/docs/tasks/observability/distributed-tracing/zipkin

https://www.envoyproxy.io/docs/envoy/v1.12.0/intro/arch_overview/observability/tracing

做一個有底蘊的軟體工作者