API開發中如何使用限速應對大規模訪問?
API作為應用程序編程接口提供給調用方使用,在設計時不光光要考慮到安全性,還要考慮其穩定性。而對于API而言,提供給調用方使用時一定要對調用次數做限制,防止API并發過高導致服務不可用。舉個例子,像微博每次碰到某明星爆料一個熱點,微博就會癱瘓一次,典型的過載導致的。
限流需要考慮的問題1、閾值設定為多大
閾值過小會影響用戶的正常訪問,所以需要視具體情定確定閾值大小。
2、單位時間范圍持續多久
可以按天、小時、分鐘等時間段計時。
3、何時重置閾值,重新計數
達到閾值后,該用戶發出的請求不再處理,但需要在一段時間后恢復訪問,重新計數,避免服務一直不可用。
限流處理模式1、延遲處理(隊列機制)
我們在系統前端設置一個緩沖池,所有的請求全部進入這個緩沖池,但不立即處理請求。由后端程序依次從緩沖池里取出請求進行處理,這樣就減小了后端的處理壓力。
2、服務降級
將整個系統各個功能模塊設置一個等級,當核心API負載過大時,將一些等級不高的服務進行降級處理(停止服務),這樣就相當于把資源節省給核心API使用了,保證核心業務的正常運行。像一般電商平臺推出活動時,都會有服務降級機制。
3、熔斷
當API出現問題時,若短時間內無法修復及恢復服務,那就需要開啟熔斷開關,拒絕后續的流量請求,避免一個API的故障導致連鎖反應。
限流方案1、借助Nginx實現限流
通過Nginx limit_req 模塊可以方便的基于特定IP、請求來做限流。
2、基于Redis實現限流(推薦)
比如根據用戶IP創建一個Key,每次請求時就將此鍵值加1,當特定時間段內達到閾值后禁用服務訪問,等Key過期后又重新計數。
從限流實現成本上說,Redis方案最易控制和實現,大家可以試下。
以上就是我的觀點,對于這個問題大家是怎么看待的呢?歡迎在下方評論區交流 ~ 我是科技領域創作者,十年互聯網從業經驗,歡迎關注我了解更多科技知識!