令牌桶演算法原理及實現(圖文詳解)
在高併發的場景裡,由於突發流量過大,經常會限流,而限流就會涉及到具體的演算法,令牌桶演算法就是一種限流演算法,今天分享令牌桶演算法。
令牌桶簡介
令牌桶,英文名token bucket,可以看作是一個存放令牌的容器,預先設定一定的容量,系統按設定的速度向桶中放置令牌,當桶中令牌滿時,多餘的令牌溢位。
如下圖所示:
為什麼需要令牌桶?
在高併發系統,比如大家熟知的秒殺,這個時候有大量的使用者在同一時間大量湧入,這個時候很可能會超過系統的承受能力,這個就需要考慮限流了。
而令牌桶演算法就是限流的一種策略,是進行流量限制的一種常用演算法,常用於控制傳送到網路上的資料的數量,並允許突發資料的傳送。
為了保證系統的穩定執行,一旦達到的需要限制的閾值,就需要限制流量並採取一些措施以完成限制流量的目的,比如:延遲處理,拒絕處理,或者部分拒絕處理等等。
令牌桶演算法原理
令牌桶演算法的原理是系統會以一個恆定的速度往桶裡放入令牌,如果請求需要被處理,則需要先從桶裡獲取一個令牌,當桶滿時新新增的令牌被丟棄或拒絕。
令牌桶演算法流程,如下圖所示:
令牌桶演算法流程,大致分為如下三步:
第一步:放入令牌到桶
按照固定的速率被放入令牌桶中,比如每秒放10個、100個、1000個令牌到桶中。
第二步:獲取令牌
所有的請求在處理之前都需要拿到一個可用的令牌才會被處理。
第三步 :令牌桶滿了拒絕
比如:桶中最多能放10000個令牌,當桶滿時,就不能繼續放入了,新新增的令牌要麼被丟棄,要麼就直接拒絕。
令牌桶演算法實現
可以使用google提供的guava工具來實現。
可以透過RateLimiter限流元件來實現。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024923/viewspace-2937357/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 三.Go微服務--令牌桶實現原理Go微服務
- php令牌桶演算法實現介面限流PHP演算法
- 基於令牌桶演算法實現一個限流器演算法
- 漏桶、令牌桶限流的Go語言實現Go
- 基於多 goroutine 實現令牌桶Go
- Q-Q圖原理詳解及Python實現Python
- 介面限流演算法:漏桶演算法&令牌桶演算法演算法
- 帶你快速瞭解:限流中的漏桶和令牌桶演算法演算法
- go的令牌桶實現庫 go-rateGo
- 介面限流演算法:漏桶演算法&令牌桶演算法&redis限流演算法Redis
- 流量控制與令牌桶演算法演算法
- SpringBoot中實現API速率限制的令牌桶演算法專案Spring BootAPI演算法
- 十分鐘快速掌握HashMap底層實現原理(圖文詳解)HashMap
- Android圖文混排實現方式詳解Android
- Svm演算法原理及實現演算法
- js排序演算法原理圖示詳解JS排序演算法
- 多圖詳解萬星 Restful 框架原理與實現REST框架
- 二.Go微服務--令牌桶Go微服務
- **超詳細的**10種排序演算法原理及 JS 實現排序演算法JS
- 高可用之限流-07-token bucket 令牌桶演算法演算法
- IOS SDWebImage實現原理詳解iOSWeb
- Golang make和new的區別及實現原理詳解Golang
- Prometheus+Grafana+Alertmanager實現告警推送教程 ----- 圖文詳解PrometheusGrafana
- 一文詳解|Go 分散式鏈路追蹤實現原理Go分散式
- vue內建元件——transition簡單原理圖文詳解Vue元件
- 微服務 Zipkin 鏈路追蹤原理(圖文詳解)微服務
- Kafka 架構和原理機制 (圖文全面詳解)Kafka架構
- 圖文詳解 HDFS 的工作機制及其原理
- 15行Python程式碼,幫你理解令牌桶演算法Python演算法
- CRC演算法原理、推導及實現演算法
- 詳解Spring Retry實現原理Spring
- Java HashMap 的實現原理詳解JavaHashMap
- Go 分散式令牌桶限流 + 兜底策略Go分散式
- 圖解氣泡排序及演算法優化(Java實現)圖解排序演算法優化Java
- 圖解選擇排序及演算法優化(Java實現)圖解排序演算法優化Java
- 蟻群演算法原理及Matlab實現演算法Matlab
- kmp演算法實現原理及簡單示例KMP演算法
- HMAC-MD5演算法原理及實現Mac演算法