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