web-dev-qa-db-ja.com

巨大な負荷スパイクを処理するためにアプリケーションを最適化する

私たちのアプリケーションは急速に成長しているので、今では、インフラストラクチャを拡張して、Webサイト全体の速度を、ユーザーの数に関係なく遅くしないようにする必要があります

バックエンドシステムは、1〜10秒続く多くのcurl呼び出しに基づいており、並列に実行する必要があります。

現在、4GB RAM 4コアvpsがありますが、50チャンネルすべてが並行して開始されると、503エラーが発生します(50 cronジョブをセットアップします)。

これらの数値は急速に増加するため、エンドユーザーが処理を完了するまで1分以上待たないようにする解決策を見つける必要があります。

専用サーバーが必要ですか、それともそれほど違いはありませんか?または、snsキューを使用してAWSラムダ関数を設定しますか? Amazonは、キューに入れるsnsメッセージの量に関係なく、トリガーを有効にすることで即座に処理されるため、最良のソリューションになりますが、ラムダ関数は現在PHPをサポートしていないため、すべてを書き換えますPythonのコード

パフォーマンスを改善するために、この状況をどのように管理しますか?

ありがとうございました

3
lorigio

これは、ハードウェアの代わりにコードを改善する必要があるように聞こえます。質問に例を挙げていないので、品質を評価することはできません。そのため、説明した状況に基づいています。

これらのcronjobs、なぜより多くの訪問者を獲得するときにそれがもっと必要なのですか?私にとって、それは小さな赤い旗です。訪問者ごとにコードを維持する必要はありません。

E.g.1:ユーザーのために何かをフェッチしますか?もしそうなら、[click here to get result]を作成して、ユーザーがクリックしたときにのみcURLを作成することはできませんか?これにより、多くのリソースを節約でき、アクティブなユーザーのみがリソースを必要とするため、拡張が容易になります。
E.g.2:これらのcronジョブは同時に起動する必要がありますか、それとも連鎖させることができますか?非常に激しいスクリプトがあり、すべてのブランドのすべての製品をループします。しかし、多少の遅延は許されるので、25の製品ごとに1秒間スリープし、すべてのブランドが10秒間スリープします。これは、より長い期間にわたってそれを広げることによって30%を落としました。
Eg3:すべてのコードが常に更新されるか、または移動できますかこれは毎晩ですか?これにより、ユーザーを煩わせず、プロセスを遅くするユーザーがいないため、CPUをさらにプッシュできます。

これはあなたの状況には当てはまらないかもしれませんが、もっと例を考えてみてください。多くの場合、人々はコードを改善するのではなく、ハードウェアをアップするだけです。より高価なサーバーを取得する必要がないため、長期的にはさらに安くなる可能性があります。


これらのすべてが適用可能でなく、コードが高品質で賢明な場合は、VPSサービスをチェックアウトすることをお勧めします。それらはしばしば数回のクリックで費用を許可します。コントロールパネルから別のコアまたはメモリを追加し、スパイク後にそれをオフにします。

1
Martijn