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

Leaky Bucket

Запросы копятся в очереди, обрабатываются строго равномерно.

время O(1) на запроспамять O(очередь)уровень: начальный
Что происходит сейчас0/0
Нажмите Play, чтобы запустить сценарий
TypeScript — активная строка подсвечена шагом
1class LeakyBucket {
2 private queue: number[] = []
3
4 constructor(private capacity: number, private outRateMs: number) {}
5
6 /** принимает запрос в момент at, возвращает моменты обработок */
7 accept(at: number, processedAt: number[]): 'queued' | 'dropped' {
8 if (this.queue.length >= this.capacity) return 'dropped'
9 this.queue.push(at)
10 processedAt.push(at)
11 return 'queued'
12 }
13
14 /** дырка: обработка строго каждые outRateMs */
15 leak(nowMs: number): number {
16 return Math.ceil(nowMs / this.outRateMs) * this.outRateMs
17 }
18}

Проблема

Запросы копятся в очереди, обрабатываются строго равномерно.

Что вы видите

Дырка в ведре тикает по расписанию: выход гладкий, что бы ни лилось внутрь.

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

Выравнивает темп (сглаживание трафика), переполнение — сброс. Token bucket прощает всплеск, leaky — гарантирует ровный выход.

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

  1. 01

    Очередь

    Входящие ждут в ведре.

  2. 02

    Дырка

    Обработка каждые T мс.

  3. 03

    Сброс

    Ведро полно — запрос потерян.

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

time
O(1) на запрос
space
O(очередь)

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

Edge cases

  • Пустой вход

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

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

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

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

Продукт

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

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

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

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

Shorts

«Ровный выход при рваном входе»

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

Shorts 9:16

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

Ровный выход при рваном входе
Нажмите Play
Бит 1/6 · 0–2 с
Hook
script-setup.ru/algorithms/leaky-bucket