Railsでのファイルのアップロードが原因でWebアプリケーションがハングすることについてオンラインでたくさん読んだことがありますが、これがHerokuDynoの場合であるかどうか疑問に思いました。ユーザーが1ギガのファイルをアップロードする場合、単一のdynoでホストされていると、アプリケーションの残りの部分がハングしますか?
1 に答える
デフォルトでは、Railsはスレッドセーフではありません。つまり、実行中の各Railsインスタンスは、一度に1つのリクエストしか処理できません。
Herokuでは、1つのdynoで1つのプロセスを実行できます。それは、Thin、Unicorn、delayed_jobワーカーなどである可能性があります。
Railsはデフォルトではスレッドセーフではないため、Thinは一度に1つのリクエストしか処理できません(つまり、dynoは一度に1つのリクエストしか処理できません)。その場合、ユーザーが1 GBのファイルをアップロードすると、Thinはそのリクエストのみを処理できます=次のリクエストがハングします。これを解決するには、dynoの量をスケーリングする必要があります。たとえば、4つのdynoを実行している(Thinを実行している)場合、一度に4つのリクエストを処理できます。
ただし、Heroku dynoでUnicornを使用し、Unicornワーカーの量を4に設定すると、Railsは一度に4つのリクエストを処理できます。ユニコーンは賢いです。その単一のHerokudyno内に4つのプロセスを生成します。つまり、1 GBのファイルをアップロードすると、Unicornは続行し、その時点で3つのリクエストを処理します。そして、これはすべて単一のダイノで実行されています。
HerokuとUnicornの詳細については、次の記事を確認してください:http: //michaelvanrooijen.com/articles/2011/06/01-more-concurrency-on-a-single-heroku-dyno-with-the-new-celadon-シダースタック/
お役に立てれば。
アップデート
ファイルをS3にアップロードする場合、実際にはdynoを完全にスキップして、ファイルをS3に直接アップロードできます。ちょっとしたヒント。;-)