DEV//UNIT
← АлгоритмыReal-world Development

Token Bucket

Токены капают равномерно; запрос тратит токен; пусто — отказ.

время O(1) на запроспамять O(1)уровень: начальный
Что происходит сейчас0/0
Нажмите Play, чтобы запустить сценарий
TypeScript — активная строка подсвечена шагом
1class TokenBucket {
2 private tokens: number
3 private last = 0
4
5 constructor(private capacity: number, private ratePerSec: number) {
6 this.tokens = capacity
7 }
8
9 tryConsume(nowMs: number): boolean {
10 const elapsed = (nowMs - this.last) / 1000
11 this.last = nowMs
12 this.tokens = Math.min(this.capacity, this.tokens + elapsed * this.ratePerSec)
13
14 if (this.tokens >= 1) {
15 this.tokens -= 1
16 return true
17 }
18 return false
19 }
20}

Проблема

Токены капают равномерно; запрос тратит токен; пусто — отказ.

Что вы видите

Таймлайн: зелёные OK против красных 429; уровень ведра — лейбл.

Как это работает

Позволяет короткие всплески (полное ведро), удерживая средний темп rate. Гибче throttle; стандарт rate limiting в API-шлюзах.

Пошаговый разбор

  1. 01

    Пополнение

    rate токенов в секунду.

  2. 02

    Расход

    Запрос = 1 токен.

  3. 03

    Отказ

    Пусто — 429.

Complexity и ограничения

time
O(1) на запрос
space
O(1)

См. complexity в шапке страницы.

Edge cases

  • Пустой вход

    Корректно завершается без лишних шагов.

  • Вырожденный случай

    Минимум работы — сразу ответ.

Где встречается в реальности

Продукт

Классический приём в реальных системах.

Собеседования

Стандартный вопрос на понимание структуры.

Связанные алгоритмы

Shorts

«Почему API отвечает 429: token bucket»

Тот же сценарий StepSequence в вертикальной композиции — с safe zones и записью WebM ниже на странице.

Shorts 9:16

Вертикальная композиция строится той же последовательностью шагов, что и страница: safe zones отмечены пунктиром (там живёт UI платформ), биты сценария подсвечиваются по прогрессу. Кнопка записи сохраняет WebM — детерминированная StepSequence даёт воспроизводимый ролик без монтажа.

Почему API отвечает 429: token bucket
Нажмите Play
Бит 1/6 · 0–2 с
Hook
script-setup.ru/algorithms/token-bucket