スロットリングは「わざと速度を絞る」仕組み
スロットリング(throttling)は、英語の throttle =「(エンジンの)絞り弁」から来た言葉です。ソフトウェアの世界では、処理やリクエストの速度・回数をわざと制限することを指します。
「制限」と聞くと意地悪な機能に思えるかもしれませんが、実際は逆で、システム全体が壊れないようにするためのブレーキです。誰か一人が全速力でリクエストを投げ続けると、他の利用者に処理が回らなくなる。それを防ぐために、一定のペースを超えた分は待たされたり、断られたりします。
高速道路の入口の信号をイメージする
高速道路のインターチェンジに、赤と青を数秒ごとに繰り返す信号(ランプメーター)が付いているのを見たことがあるでしょうか。あれは「一度に流れ込む車の数を絞ることで、本線が渋滞して全体が止まるのを防ぐ」ための仕掛けです。
スロットリングもまったく同じ発想です。入口で少し待たされるのは面倒ですが、それがないと本線が詰まって、結局全員が動けなくなる。目の前の一台にとっては損に見えても、全体で見ると速い。このバランスを取るのがスロットリングの役割です。
もう一つ身近な例を挙げると、スマホの「ギガを使い切ったあとの低速モード」もスロットリングです。接続自体は切られないけれど、速度が絞られる。「完全に止める」のではなく「遅くする」という点が特徴的です。
止める(遮断)との違い
よく混同されるのが、単純に拒否する動きとの違いです。
スロットリング(絞る)
使えなくはないが、速度や頻度が落ちる。待てば処理は進む。低速モードや、順番待ちの行列に近い感覚。
遮断・拒否(止める)
そのリクエスト自体が受け付けられない。エラーが返ってきて、こちら側でやり直しを考える必要がある。
実際のサービスでは、この2つが組み合わさっていることが多いです。ある程度までは絞って耐え、それでも超えたら断る、という段階的な作りですね。
スロットリングに出会ったときの感覚
使っていて「さっきまでサクサクだったのに急にもたつくようになった」と感じたら、スロットリングがかかっている可能性があります。ここで焦って何度もやり直すのは、だいたい逆効果です。制限は「一定時間内の回数」で判断されることが多いので、リトライを連打すると余計に制限に引っかかり続けます。
正直、自分も最初は「反応がないからもう一回」と連打してしまって、結果的にずっと待たされたことがあります。落ち着いて少し間を空けてから再開する、というのが結局いちばん早い。
なぜ絞る必要があるのか
理由はだいたい次のどれかです。
- 公平性:特定の利用者が資源を独占しないようにする
- 安定性:サーバーが処理しきれない量の負荷を受けて落ちるのを防ぐ
- コスト:処理量がそのまま費用になる場合、暴走を止める安全装置になる
特に3つ目は、外部サービスを自動で呼び出すプログラムを書いたときに効いてきます。バグで無限ループしてリクエストを投げ続けても、絞りがあれば被害が限定される。守られている側でもあるわけです。
付き合い方のコツ
スロットリングは「避けるもの」というより「前提として設計に織り込むもの」です。大量の処理を一気に投げるのではなく、少しずつ分けて流す。うまくいかなかったときは、すぐ再試行せず間隔を空ける。この2つを意識しておくだけで、遭遇したときの被害はかなり小さくなります。
ブレーキのない車が速いわけではないのと同じで、絞りがあるからこそ安心して踏める、という側面もあります。制限を見かけたら「嫌がらせ」ではなく「全体を守る仕組み」だと思っておくと、原因追跡もしやすくなります。
このページは役に立ちましたか?