Рассмотрим нашей текущая архитектуры:Как избежать простоя таймаута подключения при загрузке большого файла?
+---------------+
| Clients |
| (API) |
+-------+-------+
∧
∨
+-------+-------+ +-----------------------+
| Load Balancer | | Nginx |
| (AWS - ELB) +<-->+ (Service Routing) |
+---------------+ +-----------------------+
∧
∨
+-----------------------+
| Nginx |
| (Backend layer) |
+-----------+-----------+
∧
∨
----------------- +-----------+-----------+
File Storage | Gunicorn |
(AWS - S3) <-->+ (Django) |
----------------- +-----------------------+
Когда клиент, мобильный телефон или Интернет, попытайтесь загрузить большие файлы (больше, чем в Великобритании) на наших серверах, то часто сталкивается неработающее время ожидания соединения. Либо из их клиентской библиотеки, например, в iOS, либо из нашего балансировщика нагрузки.
Когда файл фактически загружается клиентом, никаких таймаутов не происходит, потому что соединение не является «незанятым», байты передаются. Но я думаю, что когда файл был перенесен в базовый слой Nginx, и Django начинает загрузку файла на S3, соединение между клиентом и нашим сервером становится бездействующим до завершения загрузки.
Есть ли способ предотвратить это и на каком уровне я должен решить эту проблему?
Вы установили client_max_body_size в NGINX conf? –
Какая система запускает тайм-аут? ELB или что-то еще? ELB по умолчанию - 60 секунд, но он настраивается. –
В этом случае это время ожидания клиента –