Выбор ответа Middle Паттерны конкурентности обновлено
Ограничение частоты запросов
Вопрос
Нужно отправлять во внешний API не больше 10 запросов в секунду с допустимым всплеском до 20. Какой инструмент подходит лучше?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: rate.NewLimiter(10, 20) и limiter.Wait(ctx) перед запросом. Limiter реализует токен-бакет: 10 токенов в секунду, ёмкость 20, Wait блокирует до появления токена с учётом ctx.
Варианты ответа
time.Sleep(100 * time.Millisecond)перед каждым запросом- Семафор на 10 горутин: больше 10 в секунду не уйдёт
rate.NewLimiter(10, 20)иlimiter.Wait(ctx)перед запросомправильный ответtime.NewTicker(10 * time.Second)и запрос на каждый тик
Разбор
Limiter реализует токен-бакет: 10 токенов в секунду, ёмкость 20, Wait блокирует до появления токена с учётом ctx. Sleep в каждой горутине не ограничит суммарную частоту при нескольких горутинах и не даёт всплесков. Семафор ограничивает число одновременных запросов, а не их частоту. Тикер раз в 10 секунд выдаст 0.1 запроса в секунду.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.