Выбор ответа Senior HTTP, WSGI и ASGI обновлено
Медленные клиенты и sync-воркеры
Вопрос
Почему sync-воркеры gunicorn без буферизующего прокси впереди уязвимы к медленным клиентам?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Воркер занят, пока клиент медленно шлёт или читает; так заняты все воркеры. Sync-воркер обрабатывает одно соединение от начала до конца, включая чтение тела и отправку ответа.
Варианты ответа
- Медленные клиенты вызывают утечку памяти в Python из-за буферов сокета
- Gunicorn не поддерживает HTTP/1.1, и медленные клиенты подолгу держат соединение
- Медленные клиенты обходят TLS и шлют запросы без шифрования
- Воркер занят, пока клиент медленно шлёт или читает; так заняты все воркерыправильный ответ
Разбор
Sync-воркер обрабатывает одно соединение от начала до конца, включая чтение тела и отправку ответа. Мобильный клиент на плохой сети или атака в стиле slowloris держит воркер десятки секунд. nginx принимает запрос целиком, буферизует ответ и отдаёт его клиенту сам, освобождая воркер за миллисекунды. Документация gunicorn прямо рекомендует ставить его за буферизующим прокси.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.