之所以要進(jìn)行流量控制,是要避免業(yè)務(wù)應(yīng)用流出量?jī)A斜,超過分庫(kù)能承載的壓力
zebra的限流架構(gòu)
image.png
粒度
- 指定要保護(hù)的db節(jié)點(diǎn)
- 指定要流控的應(yīng)用ip
- 指定sqlId, 計(jì)算規(guī)則: sqlId = MD5(/appName/{mapper方法}).subString(0, 8)
限流策略:
- autoControl 自動(dòng)限流, 失敗率達(dá)到一定的閾值后觸發(fā) 小于的時(shí)候逐步恢復(fù)(線性、指數(shù))
- forceControl 強(qiáng)制限流,會(huì)對(duì)所有連接進(jìn)行過濾,立即將流量降到下限; 用于緊急情況,需要手動(dòng)開啟和關(guān)閉
流程的處理收攏在 WallFilter(實(shí)現(xiàn)JdbcFilter的 processSql方法)
更詳細(xì)的說明: 參見官方 zebra流量控制