本文主要研究的是RateLimit-使用guava來做接口限流的相關(guān)內(nèi)容,具體如下。
成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),天河企業(yè)網(wǎng)站建設(shè),天河品牌網(wǎng)站建設(shè),網(wǎng)站定制,天河網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,天河網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。一、問題描述
某天A君突然發(fā)現(xiàn)自己的接口請求量突然漲到之前的10倍,沒多久該接口幾乎不可使用,并引發(fā)連鎖反應(yīng)導(dǎo)致整個系統(tǒng)崩潰。如何應(yīng)對這種情況呢?生活給了我們答案:比如老式電閘都安裝了保險絲,一旦有人使用超大功率的設(shè)備,保險絲就會燒斷以保護(hù)各個電器不被強(qiáng)電流給燒壞。同理我們的接口也需要安裝上“保險絲”,以防止非預(yù)期的請求對系統(tǒng)壓力過大而引起的系統(tǒng)癱瘓,當(dāng)流量過大時,可以采取拒絕或者引流等機(jī)制。
二、常用的限流算法
常用的限流算法有兩種:漏桶算法和令牌桶算法。
漏桶算法思路很簡單,請求先進(jìn)入到漏桶里,漏桶以一定的速度出水,當(dāng)水請求過大會直接溢出,可以看出漏桶算法能強(qiáng)行限制數(shù)據(jù)的傳輸速率。
圖1 漏桶算法示意圖
對于很多應(yīng)用場景來說,除了要求能夠限制數(shù)據(jù)的平均傳輸速率外,還要求允許某種程度的突發(fā)傳輸。這時候漏桶算法可能就不合適了,令牌桶算法更為適合。如圖2所示,令牌桶算法的原理是系統(tǒng)會以一個恒定的速度往桶里放入令牌,而如果請求需要被處理,則需要先從桶里獲取一個令牌,當(dāng)桶里沒有令牌可取時,則拒絕服務(wù)。
圖2 令牌桶算法示意圖
三、限流工具類RateLimiter
google開源工具包guava提供了限流工具類RateLimiter,該類基于“令牌桶算法”,非常方便使用。該類的接口具體的使用請參考:RateLimiter使用實(shí)踐。
RateLimiter 使用Demo
package ratelimite; import com.google.common.util.concurrent.RateLimiter; public class RateLimiterDemo { public static void main(String[] args) { testNoRateLimiter(); testWithRateLimiter(); } public static void testNoRateLimiter() { long start = System.currentTimeMillis(); for (int i = 0; i < 10; i++) { System.out.println("call execute.." + i); } long end = System.currentTimeMillis(); System.out.println(end - start); } public static void testWithRateLimiter() { long start = System.currentTimeMillis(); RateLimiter limiter = RateLimiter.create(10.0); // 每秒不超過10個任務(wù)被提交 for (int i = 0; i < 10; i++) { limiter.acquire(); // 請求RateLimiter, 超過permits會被阻塞 System.out.println("call execute.." + i); } long end = System.currentTimeMillis(); System.out.println(end - start); } }
網(wǎng)站題目:RateLimit-使用guava來做接口限流代碼示例-創(chuàng)新互聯(lián)
瀏覽地址:http://jinyejixie.com/article16/dcjdgg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、定制網(wǎng)站、外貿(mào)建站、網(wǎng)站內(nèi)鏈、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)