idou老師教你學istio 31:Istio-proxy的report流程
Istio-proxy的report主要是將envoy採集到的連線attributes的資訊上報給控制面的mixer,它的入口在request_handler_impl.cc檔案中,這裡需要開啟enable_mixer_report開關,提取出report_data中的attribute資訊,呼叫SendReport傳送出去。
SendReport的實現在client_context_base.cc中,跳轉到client_impl中。
client_impl.cc跳轉到report_batch中。
report_batch.cc中會在batch_compresser中新增attributes作為向mixer發起的請求report,這裡的Add是一個bool,判斷是否所有的上次請求所用的attributes都在本次的report的請求中。
attribute_compressor.cc中定義了Add的方法,利用CompressByDict更新壓縮過的attributes &pb,如果在這一步壓縮的變數全部都在,那麼compressbydict的返回值是true,會更新pb。如果有的attributes的變數不存在,那麼返回值為false,不更新pb,回到上一張圖。
Compress是否成功在下圖的函式中判斷,這裡用到的是delta_update,在delta_update.cc 中,也就是增量更新:
具體是最先Start(),這裡會設定set變數prev_set_,將之前一次report的map中的index存入,然後呼叫Check,利用MessageDifferencer::Equals比較同一個index的值是否更新,如果更新就會重新整理prev_map_中index對應的value。如果是新的index,那麼會作為一個新的元素插入prev_map_,每次執行一次index的比較,就會刪去prev_set_中當前的index值,直到執行完成所有的當前上報的attributes的index:
對於index的對應的value有更新,或者新的index的情況,Check返回false,會根據對應的值的屬性新增到對應的map中,更新pb的值。
當所有的attributes都for迴圈完成之後,這個函式會返回delta_update.Finish(),也就是prev_set_中的index是否全部存在。如果全部存在都會被erase掉,此時set為空,返回true,證明CompressByDict完成。如果有值沒有上報,那麼返回值為false。
現在我們會回到report_batch.cc中,現在request已經壓縮完成如果Add值為true,這時會判斷compressor的尺寸是否大於等於預設的batch的大小,或是否超過了上報的max_batch_time,如果兩者其中一個滿足條件,就會呼叫FlushWithLock()像mixer傳送report。
如果add的值為false,那麼會將這條request之前的已經壓縮好的資訊呼叫FlushWithLock()先傳送出去,然後再執行一遍Add操作,本次的request會在下一次report中傳送出去。
max_batch_entries和max_batch_time_ms的預設值在options.h中,分別為1000條和1000ms。
在FlushWithLock中:
attribute_compressor.cc中用Finish()把dictionary中的message_words_新增上。
需要report的資訊完整之後,reset_compressor,呼叫transport_把report的request傳送給mixer,並且刪除response。
如果傳送的資訊狀態!ok,返回ERROR提示"Mixer Report failed with: ",並且將GlobalDictionary()重置大小。
相關服務請訪問:https://support.huaweicloud.com/cce/index.html?utm_content=cce_helpcenter_2019
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69908804/viewspace-2640630/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- idou老師教你學Istio 27:解讀Mixer Report流程
- idou老師教你學Istio 28:istio-proxy check 的快取快取
- idou老師教你學Istio:如何用 Istio 實現速率限制
- idou老師教你學Istio 23 : 如何用 Istio 實現速率限制
- idou老師教你學istio :基於角色的訪問控制
- idou老師教你學Istio 19 : Istio 流量治理功能原理與實戰
- idou老師教你學Istio06: 如何用istio實現流量遷移
- idou老師教你學Istio :5分鐘簡析Istio異常檢測
- idou老師教你學Istio 22 : 如何用istio實現呼叫鏈跟蹤
- idou老師教你學Istio 07: 如何用istio實現請求超時管理
- idou老師教你學Istio: 如何用Istio實現K8S Egress流量管理K8S
- idou老師教你學Istio :如何用istio實現監控和日誌採集
- idou老師教你學Istio 09: 如何用Istio實現K8S Ingress流量管理K8S
- idou老師教你學Istio 25:如何用istio實現監控和日誌採集
- idou老師教你學Istio05: 如何用Isito實現智慧路由配置路由
- idou老師教你學Istio 26:如何使用Grafana進行視覺化監控Grafana視覺化
- idou老師教你學Istio 17 : 通過HTTPS進行雙向TLS傳輸HTTPTLS
- idou老師教你學Istio 17 : 透過HTTPS進行雙向TLS傳輸HTTPTLS
- idou教你學Istio10 : 如何用Istio實現K8S Egress流量管理K8S
- 戴老師的學習驗收(一,二)
- 驚喜Skr人,Istio的創始人Shriram Rajagopalan手把手教你如何使用IstioGo
- Istio Polit-agent & Envoy 啟動流程
- 系統架構設計師學習之路(31)架構
- istio的sidecar原理學習IDE
- 從厭學到好學,興趣是我最好的老師
- 張傳波老師Scrum學習心得Scrum
- 特殊情況之下,千鋒老師教你如何準備影片面試面試
- python老師的部落格Python
- 關於南方醫科大學老師的遲到的處罰
- 【吳軍老師推薦】大學書單
- 侯捷老師C++學習路線C++
- 老司機 iOS 週報 #31 | 2018-08-13iOS
- 大學教程式設計的老師為何不去當高收入的程式設計師?程式設計師
- 老程式設計師的10個程式設計小技巧,教你寫出高質量程式碼!程式設計師
- 騰科張老師教你如何在cisco路由器上部署和使用FTP/TFTP路由器FTP
- 老瞿中國遊戲發展親歷記(31)遊戲
- 【趙強老師】MySQL的閃回MySql
- 計算機學院的老師實際程式設計能力如何?計算機程式設計