天天看點

令牌桶限流 - guava的使用、限流相關的介紹guava使用 幾個限流講解

目錄

guava使用 

幾個限流講解

令牌桶和漏桶差別

令牌桶原理

漏桶算法原理

服務熔斷

服務降級

首先目前主流限流架構底層都是用的令牌桶或漏桶算法。

guava使用 

pom

<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
		<dependency>
		    <groupId>com.google.guava</groupId>
		    <artifactId>guava</artifactId>
		    <version>23.0</version>
		</dependency>
           

 令牌桶限流 - RateLimiter,一秒處理0.5個請求

 限流代碼寫在網關層

// 1秒處理0.5個請求,2秒處理1個請求 -- 原理:令牌桶儲存在記憶體當中
        private final static RateLimiter rateLimiter = RateLimiter.create(0.5);

        @ResponseBody
	@RequestMapping("toIndex")
	public String toIndexHtml(){
		// 擷取令牌
		boolean tryAcquire = rateLimiter.tryAcquire();
		if(!tryAcquire){ // 限流
                        
			return "請稍後通路...";
		}else{ // 正常     
			log.info("ok");
		}
        }
           

幾個限流講解

令牌桶和漏桶差別

漏桶

漏桶的出水速度是固定的,那麼意味着如果瞬時大流量的話,将有大部分請求被丢棄掉(也就是所謂的溢出)。

令牌桶

生成令牌的速度是固定的,而請求去拿令牌是沒有速度限制的。這意味,面對瞬時大流量,該算法可以在短時間内請求拿到大量令牌,而且拿令牌的過程并不是消耗很大的事情。

最後

不論是對于令牌桶拿不到令牌被拒絕,還是漏桶的水滿了溢出,都是為了保證大部分流量的正常使用,而犧牲掉了少部分流量,這是合理的,如果因為極少部分流量需要保證的話,那麼就可能導緻系統達到極限而挂掉,得不償失。

令牌桶原理

令牌桶限流 - guava的使用、限流相關的介紹guava使用 幾個限流講解

漏桶算法原理

令牌桶限流 - guava的使用、限流相關的介紹guava使用 幾個限流講解

服務熔斷

令牌桶限流 - guava的使用、限流相關的介紹guava使用 幾個限流講解

服務降級

令牌桶限流 - guava的使用、限流相關的介紹guava使用 幾個限流講解