は、私たちの現在のアーキテクチャを考えてみましょう:大きなファイルをアップロードするときにアイドル状態の接続タイムアウトが発生しないようにするにはどうすればよいですか?
+---------------+
| Clients |
| (API) |
+-------+-------+
∧
∨
+-------+-------+ +-----------------------+
| Load Balancer | | Nginx |
| (AWS - ELB) +<-->+ (Service Routing) |
+---------------+ +-----------------------+
∧
∨
+-----------------------+
| Nginx |
| (Backend layer) |
+-----------+-----------+
∧
∨
----------------- +-----------+-----------+
File Storage | Gunicorn |
(AWS - S3) <-->+ (Django) |
----------------- +-----------------------+
クライアントは、モバイルやウェブ、当社のサーバー上の大きなファイル(GB以上)をアップロードしようとし、その後、多くの場合、アイドル状態の接続タイムアウトに直面しています。クライアントライブラリ、iOSなど、またはロードバランサから。
ファイルがクライアントによって実際にアップロードされているとき、接続が「アイドル」でないためにバイトが転送されているため、タイムアウトは発生しません。しかし、ファイルがNginxのバックエンド層に転送され、DjangoがファイルをS3にアップロードし始めると、アップロードが完了するまでクライアントとサーバーの間の接続がアイドル状態になると思います。
これが起こらないようにする方法はありますか、どのレイヤーでこの問題に取り組まなければなりませんか?
NGINX confにclient_max_body_sizeを設定しましたか? –
タイムアウトを発生させるのはどのシステムですか? ELBなど何か? ELBのデフォルトは60秒ですが、設定可能です。 –
この場合、タイムアウトしているクライアントです –