限流的算法
常見的限流算法有:計(jì)數(shù)器驮履、漏桶和令牌桶算法。
計(jì)數(shù)器
- 設(shè)定單位時(shí)間限制接口的請(qǐng)求數(shù)量為n廉嚼,單位時(shí)間內(nèi)的每次請(qǐng)求加1玫镐,如果超過(guò)請(qǐng)求數(shù)量的限制,則拒絕或者等待下一個(gè)單位時(shí)間的但來(lái)怠噪,缺點(diǎn):請(qǐng)求不均衡恐似,導(dǎo)致響應(yīng)不平滑,有時(shí)集中舰绘、有時(shí)稀疏
令牌桶算法
令牌桶算法是一個(gè)存放固定容量令牌的桶蹂喻,按照固定速率往桶里添加令牌葱椭。令牌桶算法的描述如下:
- 假設(shè)限制 2r/s ,則按照 500 毫秒的固定速率往桶中添加令牌口四;
- 桶中最多存放 b 個(gè)令牌孵运,當(dāng)桶滿時(shí),新添加的令牌被丟棄或拒絕蔓彩;
- 當(dāng)一個(gè) n 個(gè)字節(jié)大小的數(shù)據(jù)包到達(dá)治笨,將從桶中刪除 n 個(gè)令牌,接著數(shù)據(jù)包被發(fā)送到網(wǎng)絡(luò)上赤嚼;(或者說(shuō)n個(gè)請(qǐng)求旷赖,請(qǐng)求想要執(zhí)行必須先拿到執(zhí)行令牌,同時(shí)令牌桶內(nèi)相應(yīng)的減少n個(gè)令牌更卒,沒(méi)拿到令牌的請(qǐng)求被拒絕或者等待)
- 如果桶中的令牌不足 n 個(gè)等孵,則不會(huì)刪除令牌,且該數(shù)據(jù)包將被限流(要么丟棄蹂空,要么緩沖區(qū)等待)俯萌。
漏桶算法
漏桶作為計(jì)量工具( The Leaky Bucket Algorithm as a Meter )時(shí),可以用于流量整形( Traffic Shaping )和流量控制( TrafficPolicing )上枕,漏桶算法的描述如下:
- 一個(gè)固定容量的漏桶咐熙,按照常量固定速率流出水滴;
- 如果桶是空的辨萍,則不需流出水滴棋恼;
- 可以以任意速率流入水滴到漏桶;
- 如果流入水滴超出了桶的容量锈玉,則流入的水滴溢出了(被丟棄)爪飘,而漏桶容量是不變的。