wordpress 恢復(fù)備份西安seo關(guān)鍵字優(yōu)化
? ? ? ? 啟動(dòng)和初始化完成后,調(diào)用者調(diào)用受保護(hù)資源,觸發(fā)sentinel的機(jī)制,首先構(gòu)建或獲取Context和獲取Entry,然后進(jìn)入插槽鏈,決定調(diào)用是否通過,怎樣通過
上圖展示構(gòu)建Context和獲取Entry的類互動(dòng)圖
獲取或構(gòu)建Context
調(diào)用者使用ContextUtils獲取/構(gòu)建Context,Context是資源調(diào)用上下文,Entry和Node掛在其內(nèi),作為后面插槽的鏈路結(jié)構(gòu),統(tǒng)計(jì)指標(biāo)的容器
上面2圖,分別是spring mvc,web servlet獲取或構(gòu)建Context,可以看到,各個(gè)適配器負(fù)責(zé)生成contextName和origin
SphU內(nèi)也有使用ContextUtils構(gòu)建Context,沒有origin參數(shù),有些適配器沒有顯式使用ContextUtils構(gòu)建Context
獲取Entry
很多分析sentinel的文章Entry翻譯為令牌或憑證,我覺得簽證更合適,填寫簽證申請(qǐng)是出國的必備,但能不能出國,還要看你簽證面試,好比插槽能不能通過
代碼比較簡單,我們看構(gòu)建Context和獲取Entry 后的Context快照
上圖是Context&Entry后的Context后的快照
- ROOT:EntranceNode全局的,啟動(dòng)和初始化介紹過,持有所有Context調(diào)用入口EntranceNode,用于處理dashboard的查詢請(qǐng)求
- Context的EntranceNode? 該Node先嘗試從靜態(tài)類變量ContextUtils的contextNameNodeMap獲取,新建的放在該Map,key是context.name,context.name是適配器的維度,因此EntranceNode代表的是適配器的入口,但目前看來沒使用
- 調(diào)用Entry,可以parent/child級(jí)聯(lián),構(gòu)建調(diào)用關(guān)系,上面提過origin也是用來構(gòu)建調(diào)用關(guān)系,Context在線程變量,多次進(jìn)入是同一個(gè)線程或多線程復(fù)制線程,支持本地調(diào)用,本地調(diào)用的適配器aop沒有origin
插槽鏈
調(diào)用資源需要獲得Entry,插槽鏈好比是一道道的檢查口,通過檢查頒發(fā)調(diào)用Entry,允許調(diào)用資源
上圖構(gòu)建集群節(jié)點(diǎn),可以看到同一資源使用同一個(gè)chain實(shí)例,下面借用網(wǎng)一個(gè)圖解釋插槽鏈怎樣構(gòu)建
上圖插槽鏈結(jié)構(gòu),鏈表結(jié)構(gòu),構(gòu)建插槽鏈就是構(gòu)建鏈表,插槽有前后關(guān)系,大致分為:
調(diào)用鏈路->統(tǒng)計(jì)->功能插槽(系統(tǒng)/限流/降級(jí))
用戶可以實(shí)現(xiàn)自己的提供者(Provider),構(gòu)建自己的插槽鏈