高併發系統中有三把利器用來保護系統:快取、降級和限流
限流的目的是為了保護系統不被大量的請求沖垮,通過限制請求的速度和次數來保護系統
在電商的描述活動中(例如:雙11),限流是必不可少的乙個環節
限流的方式也有很多種,可以在 nginx 層面限流,也可以在應用當中限流,比如在api閘道器中
令牌桶令牌桶演算法是 乙個存放固定容量令牌的桶,按照固定速率往桶裡新增令牌。可以控制流量也可以控制併發量,
假如我們想要控制 api 閘道器的併發量最高為1000,可以建立乙個令牌桶,以固定的速度往桶裡新增令牌,超出了1000則不新增。
當乙個請求到達之後就從桶中獲取乙個令牌,如果能獲取到令牌就可以繼續往下請求,
獲取不到就說明令牌不夠,併發量達到了最高,請求就被攔截
漏桶漏桶是乙個固定容量的桶,按照固定的速率流出,可以以任意的速率流入到漏桶中,超出了漏桶的容量就被丟棄,
總容量是不變的。但是輸出的速率是固定的,無論你上面的水流入的多快,下面的出口中有這麼大,就像水壩開閘放水一樣
package com.jwxt.filter;
import com.alibaba.fastjson.json;
import com.google.common.util.concurrent.ratelimiter;
import com.jwxt.response.result;
import com.jwxt.response.resultcode;
import com.netflix.zuul.zuulfilter;
import com.netflix.zuul.context.requestcontext;
import com.netflix.zuul.exception.zuulexception;
import org.springframework.stereotype.component;
/**閘道器限流過濾器,通過令牌桶演算法實現 最先執行*/
@component
public class limiterfilter extends zuulfilter
@override
public string filtertype()
@override
public int filterorder()
@override
public boolean shouldfilter()
@override
public object run() throws zuulexception
return null;
}}
pom.xml
com.marcosbarbero.cloud
spring-cloud-zuul-ratelimit
2.0.6.release
全侷限流配置zuul:
routes:
jwxt-teacher:
path: /teacher/**
service-id: jwxt-teacher
jwxt-learner:
path: /student/**
service-id: jwxt-learner
ignored-services: '*'
ratelimit: #3秒內訪問不允許超過 2 次,並且這 2 次請求要小於 5 秒
enabled: true # 開啟限流開關
behind-proxy: true # 開啟限流**
default-policy: #
limit: 2 #單元時間內建允許訪問2次
quota: 5 #單元時間內每個請求不得超過5秒
refresh-interval: 3 #單元時間 3秒
服務限流配置zuul:
routes:
jwxt-teacher:
path: /teacher/**
service-id: jwxt-teacher
jwxt-learner:
path: /student/**
service-id: jwxt-learner
ignored-services: '*'
ratelimit: #3秒內訪問不允許超過 2 次,並且這 2 次請求要小於 5 秒
enabled: true # 開啟限流開關
behind-proxy: true # 開啟限流**
default-policy: #
limit: 2 #單元時間內建允許訪問2次
quota: 5 #單元時間內每個請求不得超過5秒
refresh-interval: 3 #單元時間 3秒
type:
- user
- origin
- url
policies:
jwxt-learner: #特定服務
limit: 4 #單元時間內建允許訪問4次
quota: 5 #單元時間內每個請求不得超過5秒
refresh-interval: 3 #單元時間 3秒
springcloud筆記7 服務閘道器Zuul
zuul 主要提供了對請求的路由與過濾功能。1,建立springboot工程,匯入依賴 1.8 hoxton.release org.springframework.cloud spring cloud starter netflix eureka client org.springframewor...
SpringCloud服務調服務
org.springframework.cloud spring cloud starter feign enablefeignclients configuration public class mybatisplusconfig 資料許可權外掛程式 return datascopeinterce...
springcloud 服務降級
降級就是將一些不常用的服務停掉從而釋放更多的資源來 一些主要的服務使用 1.服務降級中有很多的方法,最好的方式就是利用 docker 來實現,當 需要對某個服務進行降級時可以直接將這個服務的容器停掉,等到需要使用時在把這個服務重啟就行。2.通過api閘道器的方式進行降級這樣我們的就可以將前台的一切請...