トークンバケット
https://ja.wikipedia.org/wiki/トークンバケット
トークンバケット(英: token bucket)とは、ネットワークへのデータ流入量を制御するアルゴリズムの一種であり、バースト性のあるデータ送信を許容する。いくつかの用途があるがトラフィックシェーピングの手法として使うことが多い。
トークンバケットは、バケット内のトークンの存在に基づいてトラフィックの転送をいつ行うかを指示する制御機構である。バケットには複数のトークンがあり、それぞれがあるバイト列単位に対応したり、事前に設定した大きさの1つのパケットに対応している。バケット内のトークンはパケットを送信する際に削除される。ネットワーク管理者は何バイトの転送に何個のトークンを対応させるかを設定する。トークンがあるとき、トラフィックを転送できる。バケット内にトークンがないとき、パケットを転送することはできない。従って、個別のフローに十分なトークンが割り当てられていて、バーストしきい値が適切に設定されていれば、そのフローはバースト的に転送可能である。
Go の golang.org/x/time/rate パッケージに実装がある
ルータなど
https://www.infraexpert.com/study/qos16.htm
Linux TC の TBFフィルタ
https://labs.gree.jp/blog/2014/10/11266/
AWSの API Gateway
AWSのIOバーストやCPUバースト
http://itlabor.blogspot.com/2014/06/amazon-elastic-block-store-ebs-general.html
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/burstable-credits-baseline-concepts.html
リーキーバケット
https://ja.wikipedia.org/wiki/リーキーバケット
トラフィックシェーピングではリーキーバケットのほかにトークンバケットというアルゴリズムもよく利用する。この2つは誤って混同されやすい。これらは性質も異なり、目的も異なる1。大きな違いは、リーキーバケットがデータ転送レートの上限を設定するのに対して、トークンバケットはデータ転送レートの平均に制限を課して、ある程度のバースト性を許容する。