Выбор ответа Senior Django REST Framework обновлено

Троттлинг DRF и несколько воркеров

Вопрос

Троттлинг UserRateThrottle настроен на 100 запросов в минуту, но фактически пользователь делает 400. На сервере 4 процесса gunicorn и LocMemCache. В чём причина?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Счётчики лежат в локальном кеше каждого процесса, лимит у каждого свой. Троттлинг DRF хранит историю запросов в кеше Django.

Варианты ответа

  1. DRF считает только POST-запросы, а GET пропускает без учёта
  2. Лимит применяется к IP-адресу, а не к пользователю, и делится на NAT
  3. Счётчики лежат в локальном кеше каждого процесса, лимит у каждого свойправильный ответ
  4. Троттлинг работает только в режиме DEBUG, а в проде отключается

Разбор

Троттлинг DRF хранит историю запросов в кеше Django. LocMemCache живёт внутри процесса, поэтому четыре воркера ведут четыре независимых счётчика. Нужен общий кеш, например Redis. Кроме того, троттлинг DRF не атомарный и служит защитой от злоупотреблений, а не точным биллингом.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.