Token bucket допускает всплеск запросов, пока есть токены, а затем пополняет запас с заданной частотой. В локальном примере запас равен двум: первые два запроса разрешены, третий отклонён. Через 1,1 секунды появился новый токен.
Но настройка лимита — только половина дела. Остаток хранится в состоянии лимитера. В Symfony по умолчанию это
cache.rate_limiter: очистка кеша сбрасывает лимиты. Для нескольких процессов нужны общее хранилище и согласованный механизм блокировок, иначе параллельные запросы могут обойти ограничение.Компонент начинает работать после запуска PHP и Symfony. Защиту от DoS нужно ставить раньше, на сервере или прокси. Учебный тест на карточке последовательный, он не проверяет распределённую конкуренцию.
Политики, хранилище и locks
Библиотека пхпшника
