首頁>技術>

五、系統設計1、IP限流Agent

該Agent用於整合到應用端,提供了一些方便性的功能,如IP訪問資料的收集與上報、從遠端控制檯獲取IP黑/白名單等;

每個節點本地預設保留60份以1分鐘為緯度的訪問統計資料,即儲存60分鐘以分鐘為緯度統計的訪問資料,預設保留60份以秒為統計緯度的訪問資料,這都可以根據相應的配置項進行調整。

1)功能模組2)限流演算法

常用的限流演算法有以下四種:

計數器(固定視窗)演算法滑動視窗演算法漏桶演算法令牌桶演算法

各種演算法的優缺點,可以檢視這裡。

選擇的演算法為計數器(固定視窗)演算法,因為我們的應用場景為單個IP的限流,而不是針對所有請求限流,且該演算法實現簡單,能夠滿足一定的突發情況的處理,該演算法的實現類為com.laidian.limiter.core.interceptor.IpQpsRateLimiter。

3)核心功能

IP流控請求合法性檢查:確保IP的訪問不會超過QPS的限制,如果是黑名單的IP直接拒絕訪問,確保系統的安全性

本地訪問資料的上報:目前只是以分緯度主動上報了每分鐘IP的訪問統計資料

從遠端更新IP黑白名單及QPS限制配置:更新到的配置會存放在本地快取中,以確保本地檢查合法性訪問的高效性

提供秒緯度訪問統計介面:遠端控制檯可以呼叫本地以秒緯度統計的實時QPS,更方便的瞭解當前應用的執行情況

4)核心流程

請求合法性檢查

注:IP白名單、IP黑名單及IP的QPS都是在本地記憶體或本地快取中,沒有遠端的IO操作,因而該校驗過程僅會對整體效能產生非常微弱的影響。

請求合法性檢查 子邏輯之 IP白名單校驗邏輯

請求合法性檢查 子邏輯之 IP黑名單校驗邏輯

請求合法性檢查 子邏輯之 IP QPS超限訪問校驗及增加IP的訪問量

請求合法性檢查 子邏輯之 IP QPS超限訪問校驗及增加IP的訪問量 子邏輯之 當前IP是否超限訪問的判斷

從遠端更新配置

5)核心配置
#IP Limiter控制檯的地址ip.limiter.core.dashboardAddress = [不配置則預設為系統自動判斷,如果指定則例用指定值]#當前伺服器的IP地址ip.limiter.core.serverAddress = [不配置則自動獲取,如果指定則例用指定值]#本地快取中保留多少份以秒緯度統計的資料,單位為秒ip.limiter.core.secondsMetricLocalKeeped = 60#本地應用最多保留多少份以分鐘為單位的統計,如值為60時,則表示本地會保留60份以分鐘為統計緯度統計的訪問最多的Ip,也可以理解為保留60分鐘每分鐘訪問最多的Ip的統計ip.limiter.core.maxTopAccessMinutes = 60#IP的QPS限制配置及IP黑/白名單從遠端控制檯更新時間間隔,單位為毫秒ip.limiter.core.ipQpsLimitAndBlackIpUpdateTimeInterval = 10000
2、IP限流控制檯1)功能模組2)核心功能

a)超限訪問IP自動限制訪問

針對超限訪問的IP,會臨時將其加入到黑名單中,以臨時阻止其對系統的訪問。

限制分為四個等級:

限制訪問一分鐘限制訪問一小時限制訪問二十四小時限制永久訪問

限制規則及限制升級規則:

針對首次訪問超限的IP,會將其加到黑名單中,並限制其訪問一分鐘,如果一分鐘後沒有超限訪問的行為,則將解除其訪問限制;針對被限制訪問一分鐘的IP,如果在一分鐘後解除其訪問限制後,還有繼續超限訪問的行為,則會將其訪問限制升級為限制訪問一小時,如果沒有系統則會自動將其從黑名單中移除;針對被限制訪問一小時的IP,如果在一小時後解除其訪問限制後,還有繼續超限訪問的行為,則會將其訪問限制升級為限制訪問一天,如果沒有系統則會自動將其從黑名單中移除;針對被限制訪問二十四小時的IP,如果在二十四小時後解除其訪問限制後,還有繼續超限訪問的行為,則會將其訪問限制升級為限制記久訪問,如果沒有系統則會自動將其從黑名單中移除;

b)IP黑/白名單的管理

c)IP的最大QPS管理

IP的最大QPS設定分為以下幾塊內容:

針對指定應用指定IP的最大QPS進行設定,判斷IP是否超限訪問最優先適用的規則;針對指定應用所有預設IP的最大QPS進行設定,這個設定適用於訪問該應用所有未指定最大QPS的IP,判斷IP是否超限訪問次優先適用的規則;針對所有應用預設IP的最大QPS進行設定,判斷IP是否超限訪問最後適用的規則;

滿足以上任何規則,都認為該IP是超限訪問IP。

d)註冊客戶端健康檢查

定期對註冊到控制檯中所有的應用及每個應用的所有節點進行健康檢查,檢查邏輯如下:

應用的某個節點連續三次都檢查不成功,那該節點就會從該應用刪除掉;應用的所有節點都檢查不成功,或者該應用本身已經沒有了任何可用的節點,那該應用就會被刪除;

e)系統對自動增加為黑名單的IP進行自檢

針對首次訪問超限的IP,如果一分鐘後沒有超限訪問的行為,則將解除其訪問限制,系統會將其從黑名單中刪除;針對被限制訪問一分鐘的IP,如果在一分鐘解除其訪問限制後,沒有繼續超限訪問的行為,系統會自動將其從黑名單中移除;針對被限制訪問一小時的IP,如果在一小時解除其訪問限制後,沒有繼續超限訪問的行為,系統會自動將其從黑名單中移除;針對被限制訪問二十四小時的IP,如果在二十四小時解除其訪問限制後,沒有繼續超限訪問的行為,系統會自動將其從黑名單中移除;

f)查詢應用的實時訪問情況

在控制檯查詢指定應用端節點的實時IP訪問情況。

3)核心流程

a)註冊客戶端健康檢查

b)系統對自動增加為黑名單的IP進行自檢

4)核心配置

application.properties

#active.env= DEV# 將 Apollo 配置載入提到初始化日誌系統之前,需要託管日誌配置時開啟apollo.bootstrap.eagerLoad.enabled = true# 應用全域性唯一的身份標識app.id = ip-limiter-dashboard# Apollo Meta Server 地址#apollo.meta = http://apollo.dev.imlaidian.com:8072# 自定義本地配置檔案快取路徑apollo.cacheDir = ./config# 設定在應用啟動階段就載入 Apollo 配置apollo.bootstrap.enabled = true# 注入 application namespaceapollo.bootstrap.namespaces = application ###################配置項都在Apollo中配置(開始)#####################每秒每個IP最大允許的QPS的預設值#ip.limiter.dashboard.permitsPerSecondEachIp = 50#將應用上報上來的分/秒緯度的統計資料,根據其訪問量做倒序排序,取指定數量的Top個IP的訪問資料用於後續處理#ip.limiter.dashboard.maxTopAccessIps = 10#以分鐘為單位統計,並根據訪問量做倒序排序,Redis中每分鐘保留的訪問最多的IP的數量,也即每分鐘最多保留Top個IP的訪問資料#ip.limiter.dashboard.maxRedisTopAccessIps = 50#(Global)以分鐘為單位統計,並根據訪問量做倒序排序,Redis中每分鐘保留的訪問最多的IP的數量,也即每分鐘最多保留Top個IP的訪問資料#ip.limiter.dashboard.globalMaxRedisTopAccessIps = 50#單個應用Redis最多保留多少份以分鐘為單位的統計,如值為60時,則表示Redis中會保留60份以分鐘為統計緯度統計的訪問最多的Ip,也可以理解為保留60分鐘每分鐘訪問最多的Ip的統計#ip.limiter.dashboard.maxRedisTopAccessMinutes = 60#(Global)Redis最多保留多少份以分鐘為單位的統計,如值為60時,則表示Redis中會保留60份以分鐘為統計緯度統計的訪問最多的Ip,也可以理解為保留60分鐘每分鐘訪問最多的Ip的統計#ip.limiter.dashboard.globalMaxRedisTopAccessMinutes = 60#從Redis中獲取鎖的最大等待時間,單位為毫秒#ip.limiter.dashboard.redisLockMaxWaitMillis = 60000 #HTTP請求的最大重試次數#ip.limiter.dashboard.maxHttpRetryTimes = 5#每次HTTP請求重試的間隔時間,單位為毫秒#ip.limiter.dashboard.httpRetryIntervalTime = 20#應用客戶端健康檢查的頻率,以分鐘為單位#ip.limiter.dashboard.appClientHealthCheckRate = 1#檢查由於超限訪問的IP被系統自動加入到黑名單中的IP,並對其進行釋放操作的頻率,以分鐘為單位#ip.limiter.dashboard.systemAddBlackIpCheckRate = 1 #Redis相關配置#spring.redis.host = 192.168.10.232#spring.redis.port = 6379#spring.redis.password = laidiantech#spring.redis.database = 10###################配置項都在Apollo中配置(結束)####################
5)功能介面

(單個應用)分緯度訪問TOP統計

(單個應用)秒緯度訪問TOP統計

(單個應用)IP白名單設定

(單個應用)IP黑名單設定

(單個應用)單個IP的QPS設定

(分局)分緯度訪問TOP統計

(全域性)黑名單設定

(全域性)白名單設定

(全域性)單個IP的QPS設定

11
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 微服務架構下你的資料一致了嗎?