您好,登錄后才能下訂單哦!
目前的設(shè)計方案
1.1.控制計數(shù):
在目前的項目中,有很多接口需要對訪問方進行權(quán)限訪問控制。目前設(shè)計方案是:利用redis集群來存儲每個訪問控制點的訪問計數(shù)信息。Key值為=PlatformId(接入平臺方)+InterfaceId(系統(tǒng)接口)+dayTime(日期時間),value值為當(dāng)天每個時段的訪問次數(shù)統(tǒng)計列表。
1.2.控制規(guī)則:
通過頁面配置并制定控制規(guī)則、業(yè)務(wù)系統(tǒng)在啟動時加載控制規(guī)則,并訪問redis獲取控制次數(shù),然后在業(yè)務(wù)系統(tǒng)中做邏輯判斷完成,ACL控制做請求攔截處理。
目前的痛點:
2.1.在大數(shù)據(jù)量高并發(fā)時,由于業(yè)務(wù)系統(tǒng)是集的并且是并發(fā)處理,會出現(xiàn)瞬間redis單點的qps峰值達到13w/s。出現(xiàn)這種情況的原因是Platform+InterfaceId+Day作為key的設(shè)計,會造成一個接入方的請QPS過大時直接映射到后端的redis的單點請求上,沒有利用到redis的集群效應(yīng)。
2.2.當(dāng)前的訪問控制功能和業(yè)務(wù)代碼緊密耦合在一起,無法做到單獨對訪問控制功能進行水平擴展,造成管理與優(yōu)化不便。
結(jié)構(gòu)圖:
初步解決思路:
4.1. 減少redis的訪問量、并將redis的key值做細分使其能均勻分布到所在redis集群上.
4.2. 對ACL訪問控制功能進行服務(wù)化處理,做成無狀態(tài)支持水平擴展。
4.3. 引入異步處理邏輯、將ACL服務(wù)與業(yè)務(wù)方分離。后續(xù)ACL服務(wù)的變動對業(yè)務(wù)系統(tǒng)無感知。
4.4.實現(xiàn)預(yù)先計算功能,在做redis匯總統(tǒng)計時現(xiàn)在ACL系統(tǒng)中做分組預(yù)計算,減少更新redis的頻率。
4.5.延遲檢測控制,ACL訪問控制目的主要是對一些過量請求進行攔截處理,非一定要保證實時性和一致性。通過延遲統(tǒng)計策略實現(xiàn)高吞吐量的處理能力。
4.6.通知攔截機制,業(yè)務(wù)方不需要做任何攔截控制統(tǒng)計和分析,只需要接受ACL系統(tǒng)通知并執(zhí)行通知動作即可。
具體實施細則:
5.1. 所有配置信息統(tǒng)一由配置中心管理,ACL和Service(服務(wù)系統(tǒng))都到zk上注冊和訂閱服務(wù)。
5.2. Service方發(fā)送統(tǒng)計消息到MQ上,ACL去訂閱該TOPIC來消費
5.3. ACL在自身內(nèi)存中做初步預(yù)處理計算,并定時刷新到redis集群做聚合運算。
5.4. 啟動定時服務(wù)掃描所有控制規(guī)則,檢測到需要攔截的規(guī)則后,創(chuàng)建廣播消息,發(fā)送到MQ上。
5.5. Service方訂閱廣播消息,發(fā)現(xiàn)消息后,解析并在內(nèi)存中對滿足規(guī)則的訪問進行攔截控制。
5.6. 配置中心信息變更時,通過廣播推送給所有訂閱方,訂閱方獲取消息后到服務(wù)提供方來拉取信息并更新自身內(nèi)存信息。
結(jié)構(gòu)圖如下:
目前該項目的重構(gòu)方案正在實施,后續(xù)實施效果待更新第二版。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。