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 28:istio-proxy check 的快取快取
- idou老師教你學Istio 27:解讀Mixer Report流程
- idou老師教你學Istio:如何用 Istio 實現速率限制
- idou老師教你學Istio 23 : 如何用 Istio 實現速率限制
- idou老師教你學Istio 19 : Istio 流量治理功能原理與實戰
- idou老師教你學Istio :5分鐘簡析Istio異常檢測
- idou老師教你學Istio06: 如何用istio實現流量遷移
- idou老師教你學Istio 22 : 如何用istio實現呼叫鏈跟蹤
- idou老師教你學Istio 07: 如何用istio實現請求超時管理
- idou老師教你學Istio: 如何用Istio實現K8S Egress流量管理K8S
- idou老師教你學Istio :如何用istio實現監控和日誌採集
- idou老師教你學Istio 25:如何用istio實現監控和日誌採集
- idou老師教你學Istio05: 如何用Isito實現智慧路由配置路由
- idou老師教你學Istio 09: 如何用Istio實現K8S Ingress流量管理K8S
- idou老師教你學Istio 26:如何使用Grafana進行視覺化監控Grafana視覺化
- idou老師教你學Istio 17 : 透過HTTPS進行雙向TLS傳輸HTTPTLS
- idou老師教你學Istio 17 : 通過HTTPS進行雙向TLS傳輸HTTPTLS
- idou教你學Istio10 : 如何用Istio實現K8S Egress流量管理K8S
- 經濟學老師教你選大學專業的13個訣竅
- 《老碼農教你學英語》讀者的經驗分享
- 十年經驗的老程式設計師:教你如何享受工作程式設計師
- 戴老師的學習驗收(一,二)
- 【日記】這可能是我遇到的最好的街舞老師(631 字)
- 上海文華學院 Java老師Java
- 驚喜Skr人,Istio的創始人Shriram Rajagopalan手把手教你如何使用IstioGo
- Istio Polit-agent & Envoy 啟動流程
- Mars老師的Android學習基本路線Android
- 侯捷老師C++學習路線C++
- 張傳波老師Scrum學習心得Scrum
- 特殊情況之下,千鋒老師教你如何準備影片面試面試
- 不做第二個“陳老師” 教你徹底刪除硬碟資料硬碟
- istio的sidecar原理學習IDE
- “老師”的商業模式模式
- 給老師的作文:育兒經驗-父母是孩子最好的老師薦
- 老碼農教你學英語:補充一些英語學習素材
- python老師的部落格Python
- 一個老程式設計師對剛上大學的學弟學妹的忠告程式設計師
- 一個老程式設計師對學弟學妹的一些忠告程式設計師