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方案最易控制和實現,大家可以試下。


以上就是我的觀點,對於這個問題大家是怎麼看待的呢?歡迎在下方評論區交流 ~ 我是科技領域創作者,十年互聯網從業經驗,歡迎關注我瞭解更多科技知識!


分享到:


相關文章: