Выбор ответа Senior Django REST Framework обновлено
Троттлинг DRF и несколько воркеров
Вопрос
Троттлинг UserRateThrottle настроен на 100 запросов в минуту, но фактически пользователь делает 400. На сервере 4 процесса gunicorn и LocMemCache. В чём причина?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Счётчики лежат в локальном кеше каждого процесса, лимит у каждого свой. Троттлинг DRF хранит историю запросов в кеше Django.
Варианты ответа
- DRF считает только POST-запросы, а GET пропускает без учёта
- Лимит применяется к IP-адресу, а не к пользователю, и делится на NAT
- Счётчики лежат в локальном кеше каждого процесса, лимит у каждого свойправильный ответ
- Троттлинг работает только в режиме DEBUG, а в проде отключается
Разбор
Троттлинг DRF хранит историю запросов в кеше Django. LocMemCache живёт внутри процесса, поэтому четыре воркера ведут четыре независимых счётчика. Нужен общий кеш, например Redis. Кроме того, троттлинг DRF не атомарный и служит защитой от злоупотреблений, а не точным биллингом.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.