spring cloud gateway

Spring Cloud Gateway是Spring Cloud官方推出的第二代網關框架,取代Zuul網關。算法

網關做爲流量的,在微服務系統中有着很是做用。spring

網關常見的功能有:緩存

  一、路由轉發、併發

  二、權限校驗、框架

  三、限流控制、微服務

  四、日誌監控post

  五、協議轉換lua

  六、網關層緩存3d

總結:日誌

  網關的本質,就是它能夠實現功能的集合。

 

概覽圖:

  

 

關鍵的類:

  一、RouteLocator 路由的轉發。

  二、predicate 請求與路由進行匹配

    

 

 

   三、filter 過濾與修改

    3.一、GatewayFilter : 須要經過spring.cloud.routes.filters 配置在具體路由下,只做用在當前路由上或經過spring.cloud.default-filters配置在全局,做用在全部路由上。

 

 

    3.二、GlobalFilter : 全局過濾器,不須要在配置文件中配置,做用在全部的路由上,最終經過GatewayFilterAdapter包裝成GatewayFilterChain可識別的過濾器,它爲請求業務以及路由的URI轉換爲真實業務服務的請求地址的核心過濾器,不須要配置,系統初始化時加載,並做用在每一個路由上。

    

 

 

  四、自定義過濾器,須要實現如下兩個接口 :GatewayFilter, Ordered

  五、限流過濾器

    5.一、常見的限流算法:

      5.1.一、計數器算法:簡單來講,就是一分鐘以內僅容許經過多少個請求。(缺點:突刺現象,沒法解決某段時間併發高的問題)

      5.1.二、漏桶算法:無論流量瞬間併發多高,都保持勻速消費request。(弊端:沒法應對短期的突發流量)

      5.1.三、令牌桶算法:從某種意義上講,令牌桶算法是對漏桶算法的一種改進,桶算法可以限制請求調用的速率,而令牌桶算法可以在限制調用的平均速率的同時還容許必定程度的突發調用。在令牌桶算法中,存在一個桶,用來存放固定數量的令牌。算法中存在一種機制,以必定的速率往桶中放令牌。每次請求調用須要先獲取令牌,只有拿到令牌,纔有機會繼續執行,不然選擇選擇等待可用的令牌、或者直接拒絕。放令牌這個動做是持續不斷的進行,若是桶中令牌數達到上限,就丟棄令牌,因此就存在這種狀況,桶中一直有大量的可用令牌,這時進來的請求就能夠直接拿到令牌執行,好比設置qps爲100,那麼限流器初始化完成一秒後,桶中就已經有100個令牌了,這時服務還沒徹底啓動好,等啓動完成對外提供服務時,該限流器能夠抵擋瞬時的100個請求。因此,只有桶中沒有令牌時,請求才會進行等待,最後至關於以必定的速率執行。

        

 

     5.二、GateWay的實現:Spring Cloud Gateway官方就提供了RequestRateLimiterGatewayFilterFactory這個類,適用Redis和lua腳本實現了令牌桶的方式。

 

注意:在「pre」類型的過濾器能夠作參數校驗、權限校驗、流量監控、日誌輸出、協議轉換等,在「post」類型的過濾器中能夠作響應內容、響應頭的修改,日誌的輸出,流量監控等。

相關文章
相關標籤/搜索