配置隔離規(guī)則
隔離規(guī)則通過控制接口或依賴的并發(fā)線程數(shù),來保證系統(tǒng)的穩(wěn)定性。通常適用于應(yīng)用內(nèi)部或下游依賴出現(xiàn)不穩(wěn)定的場景,例如慢SQL、下游應(yīng)用響應(yīng)時(shí)間變長等。本文介紹如何配置和管理隔離規(guī)則。
前提條件
將應(yīng)用接入AHAS應(yīng)用防護(hù),具體操作,請參見接入應(yīng)用方式。
背景信息
當(dāng)強(qiáng)依賴的方法或接口出現(xiàn)不穩(wěn)定的時(shí)候,可以通過配置并發(fā)線程數(shù)來限制不穩(wěn)定的強(qiáng)依賴并發(fā)數(shù),起到隔離異常的效果。若運(yùn)行該請求的響應(yīng)時(shí)間變長,會(huì)導(dǎo)致線程的并發(fā)數(shù)變大。當(dāng)并發(fā)數(shù)超過閾值以后,AHAS將拒絕多余的請求,直到堆積的任務(wù)完成,并發(fā)線程數(shù)變少。達(dá)到將異常隔離,減小不穩(wěn)定性的效果。
如何設(shè)定并發(fā)線程數(shù)閾值,可參見以下內(nèi)容:
- 并發(fā)線程數(shù) = 期望QPS*響應(yīng)時(shí)間+冗余量。
- 例如預(yù)期的SQL執(zhí)行時(shí)間為20毫秒,預(yù)期該請求每秒有20個(gè),并發(fā)最大時(shí)候是6個(gè),建議并發(fā)線程數(shù)按照以下邏輯設(shè)置:Max(20/1000*20,6)= 6 ,再加上冗余量2 ,則建議并發(fā)數(shù)閾值設(shè)置為8。
- 設(shè)置好后,當(dāng)這個(gè)SQL發(fā)生死鎖或者有性能問題,SQL運(yùn)行特別慢成為慢SQL時(shí),即使請求不斷的進(jìn)來,也僅僅會(huì)占用8個(gè)線程,不會(huì)因?yàn)槌掷m(xù)進(jìn)來的請求(請求也無法在短時(shí)間內(nèi)退出),從而耗光進(jìn)程的活躍線程。
- 當(dāng)這個(gè)SQL恢復(fù)正常后,并發(fā)數(shù)會(huì)迅速減少。當(dāng)并發(fā)數(shù)減少至低于預(yù)設(shè)的閾值時(shí),系統(tǒng)就不會(huì)拒絕請求,應(yīng)用的處理能力也快速的恢復(fù)。通過這樣的方式,起到了根據(jù)響應(yīng)時(shí)間自動(dòng)調(diào)節(jié)的效果,隔離了不穩(wěn)定的應(yīng)用。
隔離規(guī)則配置通常用于強(qiáng)依賴隔離場景,詳情請參見強(qiáng)依賴隔離。
功能入口
- 登錄AHAS控制臺(tái)。
- 在AHAS控制臺(tái)左上角,選擇應(yīng)用接入的地域。
- 在控制臺(tái)左側(cè)導(dǎo)航欄中選擇 。
- 在應(yīng)用防護(hù)頁面的應(yīng)用卡片頁簽單擊目標(biāo)應(yīng)用卡片。
- 選擇以下任意一種方法新建隔離規(guī)則:
- 在左側(cè)導(dǎo)航欄單擊應(yīng)用概覽,然后單擊頁面下方目標(biāo)接口操作列中的隔離。
- 在左側(cè)導(dǎo)航欄單擊接口詳情,在接口詳情頁面單擊資源卡片右上角圖標(biāo),在新建規(guī)則對(duì)話框中,選擇新增隔離規(guī)則頁簽。說明 如果接口中已存在規(guī)則,單擊圖標(biāo),在隔離規(guī)則頁簽中創(chuàng)建隔離規(guī)則。
- 在左側(cè)導(dǎo)航欄單擊規(guī)則管理,單擊隔離規(guī)則頁簽,在隔離規(guī)則頁簽,單擊新增隔離規(guī)則。
- 在新增隔離防護(hù)規(guī)則對(duì)話框中配置規(guī)則信息 :
- 在選擇防護(hù)場景頁面,修改接口名稱,然后單擊下一步。
- 在配置防護(hù)規(guī)則頁面,配置防護(hù)規(guī)則,然后單擊下一步。說明 若需對(duì)隔離防護(hù)規(guī)則進(jìn)行編輯,則直接進(jìn)入配置防護(hù)規(guī)則。
- 在配置限流行為頁面,新增和選擇關(guān)聯(lián)規(guī)則,然后單擊 。
- 在管理規(guī)則頁面,狀態(tài)欄下單擊開啟。
- 在溫馨提示頁面,單擊確定,開啟已配置的防護(hù)規(guī)則。
常用場景1 保障自身資源充足
當(dāng)運(yùn)行該請求的響應(yīng)時(shí)間變長,會(huì)導(dǎo)致線程的并發(fā)數(shù)變大。當(dāng)并發(fā)數(shù)超過閾值以后,AHAS將拒絕多余的請求,直到堆積的任務(wù)完成,并發(fā)線程數(shù)變少。達(dá)到將異常隔離,減小不穩(wěn)定性的效果。例如某個(gè)SQL執(zhí)行時(shí)間為20毫秒,預(yù)期該請求每秒有20個(gè)。
在新增隔離防護(hù)規(guī)則對(duì)話框中配置以下規(guī)則信息:
- 填寫接口名稱和來源應(yīng)用。
- 統(tǒng)計(jì)維度選擇當(dāng)前接口。
- 并發(fā)數(shù)閾值為10。
設(shè)置完成后,當(dāng)這個(gè)SQL發(fā)生死鎖或者存在性能問題時(shí),該SQL運(yùn)行變慢,成為慢SQL,此時(shí)即使請求不斷進(jìn)來,也僅僅會(huì)占用10個(gè)線程,不會(huì)因?yàn)槌掷m(xù)進(jìn)來的請求(請求也無法在短時(shí)間內(nèi)退出),從而耗光進(jìn)程的活躍線程。當(dāng)這個(gè)SQL恢復(fù)正常后,并發(fā)數(shù)會(huì)迅速減少。當(dāng)并發(fā)數(shù)減少至低于預(yù)設(shè)的閾值時(shí),系統(tǒng)就不會(huì)拒絕請求,應(yīng)用的處理能力也快速的恢復(fù)。通過這樣的方式,起到了根據(jù)響應(yīng)時(shí)間自動(dòng)調(diào)節(jié)的效果,隔離了不穩(wěn)定的應(yīng)用。
常用場景2 有一定相關(guān)聯(lián)性的接口
當(dāng)關(guān)聯(lián)接口被來源應(yīng)用調(diào)用QPS超過閾值時(shí),會(huì)對(duì)當(dāng)前接口來源應(yīng)用的請求進(jìn)行限流,有一定的相關(guān)性的方法來配置規(guī)則。例如read_db
和 write_db
這兩個(gè)資源分別代表數(shù)據(jù)庫讀寫,write_db
接口優(yōu)先級(jí)更高。
為保證讀寫資源爭搶時(shí),write_db
的接口可以留足資源,可在新增隔離防護(hù)規(guī)則對(duì)話框中配置以下規(guī)則信息:
- 接口名稱為
read_db
。 - 統(tǒng)計(jì)維度選擇關(guān)聯(lián)接口。
- 關(guān)聯(lián)接口名為
write_db
。 - 關(guān)聯(lián)接口閾值為10。
這樣在write_db
接口被調(diào)用QPS超過10次后,會(huì)對(duì)read_db
接口來自于來源應(yīng)用的請求進(jìn)行隔離限流,保證write_db
的足夠資源。
常用場景3 針對(duì)入口鏈路來配置隔離規(guī)則
從入口處將資源進(jìn)行分別隔離,以保障更高優(yōu)先級(jí)入口。當(dāng)callstack入口被來源應(yīng)用調(diào)用QPS數(shù)超過閾值時(shí),會(huì)對(duì)當(dāng)前接口來自于來源應(yīng)用的請求進(jìn)行隔離流控。
在新增隔離防護(hù)規(guī)則對(duì)話框中配置以下規(guī)則信息:
- 填寫接口名稱和來源應(yīng)用。
- 統(tǒng)計(jì)維度選擇鏈路入口。
- 并發(fā)數(shù)閾值設(shè)置為10。
當(dāng)callstack入口的接口被調(diào)用超過10次,當(dāng)前接口user_test
會(huì)對(duì)來自于來源應(yīng)用的請求進(jìn)行隔離流控。
更多信息
新增隔離防護(hù)規(guī)則頁面參數(shù)解釋如下:
參數(shù) | 描述 |
接口名稱 | 待隔離的資源名稱。 |
來源應(yīng)用 | 該規(guī)則針對(duì)的來源應(yīng)用,默認(rèn)來源應(yīng)用設(shè)為default ,表示不區(qū)分來源應(yīng)用。
重要 來源數(shù)目不宜過多,200個(gè)以內(nèi)內(nèi)存使用量可控,過多則會(huì)影響性能。 |
統(tǒng)計(jì)維度 | 選擇資源調(diào)用關(guān)系進(jìn)行隔離流控。
|
并發(fā)數(shù)閾值 | 資源的并發(fā)線程數(shù)(即該資源正在執(zhí)行的線程數(shù))閾值。 |