web-dev-qa-db-ja.com

Heroku(小)アプリを高速化する

Herokuアプリを高速化したいのですが、Dynoを追加する必要がありますか、それとも最初のWorkerを追加する必要がありますか?

ありがとう。

2
andkjaer

これが最初に回答されてから、状況は少し変化しました。また、重要なポイントが欠けていると思います。

  • Dynoを追加してもパフォーマンスは向上しませんが、最近では 異なるdynoサイズも を選択するオプションがあります。ただし、新しいサイズのすべてのナットを使用する前に、以下を参照してください。 Dyno使用法の最適化:CP

異なるdynoサイズは異なるCPUパフォーマンス特性を提供し、高CPUの状況で少し役立ちますが、理想的には、最適化の最初のステップとしてバックグラウンドワーカーに作業をオフロードし、コードを最適化することを検討する必要があります。

  • 本番環境では、少なくとも2つの1 x dynoまたは1つの2 x dynoが常に必要です。 Herokuで「生産チェック」を実行すると、無料の1 dynoアカウントを実行していると文句を言います。これは、無料アカウントがスタンバイ状態に留まらないためです。ただし、しばらくアクティブでない場合、dynoがシャットダウンされ、リクエストが着信すると、dynoを最初から開始し、リクエストの処理を開始する前に環境をロードする必要があります。もちろん、これは大きな遅延を追加します。参照: Dyno sleeping 詳細については、 Dyno Redundancy も考慮してください。

まとめると。 dynoが1つしかない場合は、別のdynoを追加するか、2 x dynoを使用してアイドルスリープを回避することを選択する必要があります(冗長性を高める可能性があります)。 dynoサイズを調整することでCPUのパフォーマンスをある程度得ることができますが、CPUを集中的に使用するアプリケーションを本当に向上させる主な方法は、バックグラウンドジョブ、アーキテクチャ、および一般的にコード効率を向上させることです。

追伸もちろん、1時間ごとにアプリに何らかのポーリングを設定し、この方法でこのポリシーを回避することもできますが、ここで公正にしましょう-不正行為ではありませんか? Herokuが(小さいとはいえ、うまくいけばうまく機能している)アプリを実行するためにいくらかのペニーに値するとは思わないのですか? :)

1
Timo

これで私の応答を参照してください post -Dynosはパフォーマンスを向上させません

1
John Beynon

ワーカーもダイノも、アプリケーションの速度を直接上げることはありません。アプリケーションが遅い場合、dynoを追加しても、引き続き遅くなります。

Dynosは同時リクエストを表します。 1つのダイノで、Herokuは一度に1つの同時リクエストを処理します。 4つのダイノでは、4つのリクエストを処理しますが、リクエストの完了に10秒かかる場合、4つのリクエストはそれぞれ10秒かかります。

重くて遅いプロセス(電子メール配信や.PDF生成など)をバックグラウンドタスクに移行し始めると、ワーカーは間接的にアプリケーションを高速化できます。

一般的に、アプリケーションのパフォーマンスを向上させる方法は、アプリケーションの動作を検査し、コードを改善することです。通常、低速のクエリを高速化したり、ビューフラグメントをキャッシュするには、高速キャッシュレイヤー(RedisやMemcachedなど)を使用する必要があります。

0
Simone Carletti