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小時內刪除侵權內容。