idou老師教你學Istio 28:istio-proxy check 的緩存

      網友投稿 646 2025-03-31

      功能概述

      idou老師教你學Istio 28:istio-proxy check 的緩存

      功能概述

      istio-proxy主要的功能是連接istio的控制面組件和envoy之間的交互,其中check的功能是將envoy收集的attributes信息上報給mixer,在istio中有幾十種attributes(官方文檔中有Attribute Vocabulary的具體介紹), mixer根據自身的adapter給envoy 反饋。為了避免每次對mixer都進行遠程調用,保證運行時的性能,在istio-proxy這里配置了本地緩存。

      具體實現

      在proxy這里配置了兩層緩存,分別是referenced map和LRUcache,定義在check_cache.h中:

      Referenced map是用來存儲envoy check之后mixer的返回的屬性,也就是mixer的adapter所使用到的所有屬性。

      LRUCache是用來儲存每次對mixer請求之后所得到的check的結果。

      步驟簡析

      緩存檢查

      cache->Check(attributes, result);

      if (result->IsCacheHit()) return result->Status();

      未命中緩存,發起遠程連接并且接受mixer回復.

      result->SetReponse(status, response);

      return result->Status();

      代碼解讀:

      1.緩存命中

      檢查的入口在request_handler_impl.cc中,首先檢查enable_mixer_check開關是否打開:

      返回的值是SendCheck:

      SendCheck的定義在client_context_base.cc中,這里通過check跳轉到client_impl.cc中

      在client_impl.cc中,首先先初始化,重置新的檢查選項,將檢查的計數都歸為0

      這些選項的options定義在options.h中,這里是設置了緩存的大小num_entries和network_fail_open這個開關。

      前文提到的Check的實現是CancelFunc MixerClientImpl::Check()這個函數。

      這里主要是調用了checkcache::check這個函數來進行檢查。

      在沒有超時的情況下,如果匹配到了map的簽名(signature),并且在cache中命中。那么這一條cache的elem的status會返回result.status。在client_impl.cc中,判斷緩存命中,完成check。

      CheckResponseInfo在check_response.h中定義,保存了check的結果回復。其中is_check_cache_hit是來判斷這個response是否是在緩存中的,當命中時應該為true。

      2. 緩存沒有命中

      如果在之前的check本地緩存的狀態中返回的是Status(Code::NOT_FOUND, ""),就需要向mixer發起請求:

      這里是先將屬性進行compress,并且將這些屬性進行復制,給raw_check_result一個指針。

      向mixer發起異步的transport check請求,這個transport的定義在environment.h中。

      將從mixer得到的response傳入到SetResponse中,得到result。

      緩存mixer的返回值:

      在前文中提到的check NOT_FOUND時候,會像mixer發起請求,這里的network_fail_open開關如果是true的話,那么對mixer請求不成功也會返回OK,如果返回狀態為ok()時,證明已經得到了mixer的response,利用CacheResponse進行緩存(check_cache.cc):

      需要先進行前置檢查,確認response的合法性。

      然后檢查response得到的的map和cache中是否有重復,如果沒有重復,則插入新的map和緩存元素cache_elem,返回cache_elem的狀態。

      3. 簽名計算

      在referenced.h定義了2種key, 一種是exact_key,是請求時實際存在的key;一種是absence key,是mixer 的adapter用到envoy卻沒有request的key,也就是缺省的key:

      計算簽名的實現在referenced.cc中,這里首先在attributes map里檢查absentkeys和exactkeys;是否都存在。

      用函數CalculateSignature計算簽名,只對實際請求使用到的exactkeys的屬性進行簽名。

      計算得到的哈希值就可以用于的查找reference map。

      相關服務請訪問https://support.huaweicloud.com/cce/index.html?cce_helpcenter_2019

      Istio

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:如何能按自己設定的時間進行播放(怎樣設置播放時間)
      下一篇:Excel自定義序列怎么添加 自定義序列添加方式介紹
      相關文章
      亚洲成av人在线观看网站| 色偷偷亚洲女人天堂观看欧| 亚洲综合色丁香婷婷六月图片| 亚洲综合一区二区| 亚洲人成人77777网站| 亚洲乱码无码永久不卡在线| 国产午夜亚洲精品午夜鲁丝片| 亚洲精品和日本精品| 亚洲国产综合精品一区在线播放| 亚洲精品高清在线| 亚洲综合色视频在线观看| 亚洲精品视频在线看| 国产亚洲精品自在线观看| 亚洲综合熟女久久久30p| 亚洲日韩在线中文字幕第一页| 亚洲人成色7777在线观看不卡| 久久亚洲色一区二区三区| 曰韩亚洲av人人夜夜澡人人爽| 亚洲色婷婷六月亚洲婷婷6月| 亚洲啪啪AV无码片| 亚洲国产成人久久精品动漫| 亚洲国产精品自在线一区二区| 久久亚洲精品人成综合网| 亚洲明星合成图综合区在线| 亚洲AV无码一区二区三区人| 中文字幕在线观看亚洲日韩| 日韩欧美亚洲中文乱码| 亚洲高清国产拍精品青青草原 | 亚洲国产精品尤物YW在线观看| 亚洲无码日韩精品第一页| 亚洲欧洲日产国码无码网站| 久久久久久亚洲精品| 亚洲视频在线观看不卡| 2020年亚洲天天爽天天噜| 中文字幕在线观看亚洲日韩| 朝桐光亚洲专区在线中文字幕| 亚洲一区精品伊人久久伊人| 亚洲精品无码Av人在线观看国产| 亚洲成人在线网站| 亚洲第一成人在线| 精品国产亚洲AV麻豆|