如何利用redis來進行分散式叢集系統的限流設計

tianxiaoxu發表於2018-06-19

【本文轉自部落格園 作者:張永清 原文連結:https://www.cnblogs.com/laoqing/p/9190430.html】
在很多高併發請求的情況下,我們經常需要對系統進行限流,而且需要對應用叢集進行全域性的限流,那麼我們如何類實現呢。

  我們可以利用redis的快取來進行實現,並且結合mysql資料庫一起,先來看一個流程圖。

如何用redis進行分散式叢集系統的限流設計

  這個就是一個典型的對http請求進行全侷限流的流程圖。

  入口透過請求攔截器進行攔截(filter)。

  來看程式碼片段,這個程式碼片段就是一個標準的filter(我們這裡基於springboot來定義filter)

如何用redis進行分散式叢集系統的限流設計

  我們需要做全侷限流時,就需要用到redis了。在redis中,可以將限流配置定義為

  redis key:介面名稱(或者url)_limit

  value:map,key:appid(業務id),value:限流大小

  就做到配置的快速讀取。

  限流的配置定義完後,那麼就需要定義限流的計數了。可以定義為

  redis key:介面名稱(或者url)_count

  value:map,key:appid(業務id),value:計數值

  一個好的限流設計,還需要能做到對限流配置的實時進行更改和動態的配置。那我們就來看如何實現呢

  下面就是一個限流配置的新增流程。我們可以將改新增配置定義成一個介面或者頁面上的一個功能。就能做到配置的實時增加。

如何用redis進行分散式叢集系統的限流設計

  最後我們再來看下配置的修改和限流配置的刪除

如何用redis進行分散式叢集系統的限流設計

  總結:

  我們充分利用redis的快取配置以及做了限流時,儘量不要影響到系統的整體效能。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31137683/viewspace-2156339/,如需轉載,請註明出處,否則將追究法律責任。

相關文章