Выбор ответа Senior HTTP, WSGI и ASGI обновлено

Медленные клиенты и sync-воркеры

Вопрос

Почему sync-воркеры gunicorn без буферизующего прокси впереди уязвимы к медленным клиентам?

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

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

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

Коротко

Правильный ответ: Воркер занят, пока клиент медленно шлёт или читает; так заняты все воркеры. Sync-воркер обрабатывает одно соединение от начала до конца, включая чтение тела и отправку ответа.

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

  1. Медленные клиенты вызывают утечку памяти в Python из-за буферов сокета
  2. Gunicorn не поддерживает HTTP/1.1, и медленные клиенты подолгу держат соединение
  3. Медленные клиенты обходят TLS и шлют запросы без шифрования
  4. Воркер занят, пока клиент медленно шлёт или читает; так заняты все воркерыправильный ответ

Разбор

Sync-воркер обрабатывает одно соединение от начала до конца, включая чтение тела и отправку ответа. Мобильный клиент на плохой сети или атака в стиле slowloris держит воркер десятки секунд. nginx принимает запрос целиком, буферизует ответ и отдаёт его клиенту сам, освобождая воркер за миллисекунды. Документация gunicorn прямо рекомендует ставить его за буферизующим прокси.

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

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