web-dev-qa-db-ja.com

Heroku:Web dyno vs.worker dyno?いくつ/何の比率が必要ですか?

Webダイナモとワーカーダイノの違いがHerokuにどのようなものがあるのか​​について興味がありました。彼らは価格設定ページで一文の説明をしますが、これは私を混乱させました。それぞれをいくつ選ぶかをどのように知るのですか?目指すべき比率はありますか?私はこのものにかなり慣れていないので、誰かが詳細な説明をすることができますか、または必要なダイノの数と種類を計算する何らかの方法がありますか?

また、各dynoの時間数が意味するものについて混乱しています。

http://www.heroku.com/pricing

私もこの記事に出くわしました。提案された解決策の1つとして、彼らはdynoの量を増やすと言いました。ここではどのタイプのダイノを参照していますか?

http://devcenter.heroku.com/articles/backlog-too-deep

81
varatis

より多くのdyno(別名Cedarのプロセス)が必要な場合の最適な指標は、herokuログです。ログを追跡できるように、必ず拡張ログ(無料)にアップグレードしてください。

Heroku.routerエントリを探しており、最も関心のある値はキューの値です-これが常に0より大きい場合は、dynoを追加する必要があることを示す良い兆候です。基本的に、これは、プロセスが処理できるよりも多くの要求が着信するため、それらがキューに入れられることを意味します。データを返さずにキューに入れすぎると、タイムアウトになります。

私が恐れている理想的な比率はありません。多くのWebプロセスを必要とするが、1秒間に100リクエストを実行するアプリを持つことができますが、ワーカーを使用しません。電子メールの送信などのようにバックグラウンドで処理を行う場合にのみ、ワーカープロセスが必要です。

psバックログが深すぎると、DynoのWebプロセスになってしまいます。

更新:2013年3月26日に、Herokuはキューと待機フィールドをログアウト出力から削除しました。

キューおよび待機フィールドは、ルーターログメッセージから削除されました。また、Herokuルーターは、着信要求に対してX-Heroku-Dynos-In-Use、X-Heroku-Queue-Depth、およびX-Heroku-Queue-Wait-Time HTTPヘッダーを設定しなくなりました。

57
John Beynon

Dynosは基本的に、インスタンスで実行されるプロセスです。新しいCedarスタックでは、任意のシェルコマンドを実行するようにセットアップできます。 Webアプリケーションの場合、通常、ユーザーからのHTTP要求に応答する「web」と呼ばれる1つのプロセスがあります。他のすべてのプロセスは、以前は「ワーカー」と呼ばれていました。これらは、cron、処理キュー、Webプロセスを拘束したくない重い計算など、バックグラウンドで継続的に実行されます。また、各タイプのプロセスをスケーリングして、各タイプの複数のプロセスを起動して同時実行できるようにすることもできます。使用するそれぞれの量は、実際にアプリケーションのニーズとアプリケーションが受ける負荷に依存します。 New Relicプラグインなどのツールを使用して、これらのことを監視できます。詳細については、Herokuの開発センターのプロセスモデルとProcfileに関する記事をご覧ください。

15
Jimmy Cuadra

多くの人々は、既知の比率はなく、あなたが望む「バックグラウンド」ワーカーに対するウェブワーカーの比率は、アプリケーションの設計方法に依存していると述べています-それは正しいです。ただし、一般的な経験則として、Webワーカー(つまり、それらがサービスを提供するコントローラーアクション)をlightning quickおよび非常に軽量で、待ち時間を短縮することを追加すると便利だと思いましたブラウザのアクションからの応答時間。たとえば、約0.5秒以上のリアルタイムの処理を必要とするブラウザーアクションがある場合、そのアクションの大部分をキューにプッシュする何らかのシステムを設計する必要があります。

次に、このキューを処理するオフラインワーカーdynoを設計します。出力に保留中のHTTP応答がないため、時間がかかります。おそらく、アクションをプッシュした最初のブラウザリクエストからレンダリングしたページは、リクエストが5秒ごとに完了したかどうかをチェックするスレッドを開始するJavascriptまたはそれらの行に沿った何かを提供します。

他の人が与えたのと同じ理由で、私はまだあなたに働きかける比率を与えることはできませんが、願わくばこれはあなたがあなたのアプリを設計する方法を決めるのに役立つことを望みます。 (また、これは多くの有効なデザインの1つにすぎません)。

9
eblume

https://stackoverflow.com/a/19965981/1233555 -Herokuはランダムルーティングに移行しているため、一部のdynoはキューを積み重ねることができますが(長いリクエストを処理している間)、他のdynoは無料です。これを避けるには、すべてのリクエストがWeb dynoで非常に迅速に処理されるようにします。これにより、必要なWeb dynoの数が減り、より多くのワーカーdynoが必要になります。

同時実行をサポートするWebアプリにも注意する必要があります。これは、一部のRails configsが行う-Unicornを試す薄いです。

おそらく、計算するのではなく、必要な各種類のダイノの数を確認する必要があります。 New Relicがdynoキューを報告していることを確認してください-上記のリンクを参照してください。

3
ChrisPhoenix

簡単な答えは、キューを抑えるのに必要な数だけ必要だということです。

Johnが説明しているように、ログにキューが表示されるようになると、さらにダイノが必要になります。バックグラウンドキューが長くなりすぎるのを見るようになった場合(この情報を取得する方法は、実装した内容によって異なります)、さらに多くのワーカーが必要です。

アプリケーションの設計と使用方法に大きく依存するため、比率はありません。

1
Neil Middleton