做者:justmine
頭條號:大數據與雲原生
微信公衆號:大數據與雲原生
創做不易,在知足創做共用版權協議的基礎上能夠轉載,但請以超連接形式註明出處。
爲了方便閱讀,微信公衆號已按分類排版,後續的文章將在移動端首發,想學習雲原生相關知識,請關注我。html
[請持續關注...]api
如前所述,業務微服務化後,每一個單獨的微服務可能會有不少副本,多個版本,這麼多微服務之間的相互調用、管理和治理很是複雜,Istio統一封裝了這塊內容在代理層,最終造成一個分佈式的微服務代理集羣(服務網格)。管理員經過統一的控制平面來配置整個集羣的應用流量、安全規則等,代理會自動從控制中心獲取動態配置,根據用戶的指望來改變行爲。安全
話外音:藉着微服務和容器化的東風,傳統的代理搖身一變,成了現在煊赫一時的服務網格。微信
Istio就是上面service mesh架構的一種實現,經過代理(默認是envoy)全面接管服務間通訊,徹底支持主流的通訊協議HTTP/1.1,HTTP/2,gRPC ,TCP等;同時進一步細分控制中心,包括Pilot、Mixer、Citadel等。架構
話外音:後面系列會詳細介紹控制中心的各個組件,請持續關注。併發
總體功能描述以下:app
鏈接(Connect)負載均衡
控制中心從集羣中獲取全部微服務的信息,並分發給代理,這樣代理就能根據用戶的指望來完成服務之間的通訊(自動地服務發現、負載均衡、流量控制等)。
保護(Secure)
全部的流量都是經過代理,當代理接收到未加密流量時,能夠自動作一次封裝,把它升級成安全的加密流量。
控制(Control)
用戶能夠配置各類規則(好比 RBAC 受權、白名單、rate limit 、quota等),當代理髮現服務之間的訪問不符合這些規則,就直接拒絕掉。
觀察(Observe)
全部的流量都通過代理,所以代理對整個集羣的訪問狀況知道得一清二楚,它把這些數據上報到控制中心,那麼管理員就能觀察到整個集羣的流量狀況。
做爲服務網格的一個完整解決方案,爲了追求完美,Istio高度抽象並設計了一個優雅的架構,涉及到衆多的組件,它們分工協做,共同組成了完整的控制平面。爲了更好地學習如何運用Istio的鏈接、安全、控制、可觀察性全面地治理分佈式微服務應用,先從戰略上鳥瞰Istio,進一步從戰術上學習Istio將更加容易,故做者決定從可觀察性開始Istio的佈道,先體驗,再實踐,最後落地,一步步愛上Istio,愛上雲原生,充分利用雲資源的優點,解放應用開發工程師的雙手,使他們僅僅關注業務實現,讓專業的人作專業的事,爲企業創造更大的價值。
當業務微服務化後,一次業務請求,可能會涉及到多個微服務,分佈式跟蹤能夠對跨多個分佈式服務網格的1個請求進行追蹤分析,並經過可視化的方式深刻地瞭解請求的延遲,序列化和併發,充分地瞭解服務流量實況,從而快速地排查和定位問題。
Istio利用Envoy 的分佈式追蹤功能提供了開箱即用的追蹤集成。確切地說,Istio 提供了安裝各類各類追蹤後端服務的選項,而且經過配置代理來自動發送追蹤span到追蹤後端服務。
話外音:Istio目前支持的追蹤後端服務包括Zipkin、Jaeger、LightStep。
話外音:Istio分佈式追蹤的總體功能,請參考文末連接。
默認狀況下,使用demo配置文件安裝時,Istio會捕獲全部請求的追蹤信息,即每次訪問 /productpage
接口時,均可以在dashboard中看到一條相應的追蹤信息。此採樣頻率適用於測試或低流量網格。對於高流量網格(如:生產環境),請經過下面的兩種方法之一來下降追蹤採樣頻率:
在安裝時,使用可選項 values.pilot.traceSampling
來設置採樣百分比。
在運行時,經過編輯 istio-pilot
deployment並經過如下步驟來改變環境變量:
root@just:~# kubectl -n istio-system get deploy istio-pilot -o yaml apiVersion: extensions/v1beta1 kind: Deployment [...] name: istio-pilot namespace: istio-system [...] env: - name: PILOT_TRACE_SAMPLING value: "1" [...]
Istio默認的追蹤採樣率爲1%,即100個請求生成一次追蹤報告,有效值的範圍從 0.0 到100.0,精度爲 0.01。
本篇以zipkin爲例,體驗Istio的分佈式追蹤功能。
請先部署Istio系統和在線書店例子,詳情請參考:雲原生 - 體驗Istio的完美入門之旅(一)。
istioctl manifest apply --set values.tracing.enabled=true \ --set values.tracing.provider=zipkin
要查看追蹤數據,必須向服務發送請求。請求的數量取決於Istio的追蹤採樣率,默認爲1%,即在第一個追蹤報告可見以前,須要發送至少100個請求。
使用以下命令向productpage
服務發送200個請求:
for i in `seq 1 200`; do curl -s -o /dev/null http://$GATEWAY_URL/productpage; done
從上能夠看出,產生了兩份追蹤報告,徹底符合追蹤採集率。
關於追蹤報告的分析,這裏就不贅述了。
本篇先回顧了微服務架構的痛點,以及服務網格的本質,而後大體概述了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