発売日のトラフィックバーストに耐えるためのベストプラクティス

StackOverflow https://stackoverflow.com/questions/117966

質問

私たちは、(一応)初日にかなりの量のトラフィックを獲得すると予想されるクライアント向けの Web サイトの制作に取り組んでいます。プレスリリースがあり、人々がそれについてブログを書いているなどです。初日からボロボロになってしまうのではないかと少し心配です。(実際の交通データを使用せずに事前に) 大規模な打ち上げの後に立ち続けることができることを確認するために、主に何に注目しますか。

詳細:これは L/A/M/PHP スタック、内部開発された MVC フレームワークを使用します。これは現在、Apache と MySQL の両方を含む 1 つのサーバー上で起動されていますが、必要に応じて分割することもできます。すでに memcached をインストールし、考えられる限りの PHP レベルのキャッシュを実行しています。一部のページはクエリ集中型であり、テンプレート エンジンとして Smarty を使用しています。これらの主要な側面を変更する時間はないことに注意してください。これは単なるセットアップです。どのようなことに気をつけるべきでしょうか?

役に立ちましたか?

解決

スパイク (またはピーク) パフォーマンスに備えて対処するには、まず次のような簡単なパフォーマンス テストを通じて準備ができているかどうかを判断します。 jメーター.

セットアップと開始が簡単で、予想されるピーク負荷に対処できるかどうかの早期の指標が得られます。

ただし、時間の制約を考慮すると、他の手順として、最も注目を集めるコンテンツの静的バージョンを準備することもできます (発売日の場合はプレス リリースなど)。また、クライアント側のキャッシュを最大限に活用していることを確認してください (サーバーへのリクエストが 1 つ減るだけで、大きな違いが生まれます)。このような状況では、非常に高いスケーラビリティとコンテンツ キャッシュの効果的な使用を目的として設計された Web が最適です。

高いスケーラビリティに関する優れたポッドキャストがあります。 新しいガーディアン Web サイトのデザインに関するソフトウェア エンジニアリング ラジオ 物事が落ち着いたとき。

打ち上げ頑張ってね

他のヒント

まず測定してから最適化します。負荷テストは行ったことがありますか?ボトルネックはどこにあるのでしょうか?

ボトルネックがわかれば、追加の DB ボックスまたは Web ボックスが必要かどうかをインテリジェントに決定できます (現時点では推測にすぎません)。

また、負荷テストの結果は、予想されるトラフィックとどのように比較されますか?予想されるトラフィックの 2 倍を処理できますか?5倍?追加のハードウェアをどれくらい簡単に/早く入手して解放できますか?ビジネス要件は、起動中に失敗しないことであると確信しています。 たくさん 利用可能な容量がある場合は、負荷が安定し、必要なものがわかったら、いつでも解放できます。

少なくともすべての静的コンテンツを除外します。別の場所に別の vhost をセットアップし、そこにすべてのグラフィックス/css/js をロードします。追加のサイクルを購入して、その種類のコンテンツの提供をオフロードすることができます。本当に心配な場合は、コンテンツ配信サービスに登録して使用できます。現在、Akamai に似た、非常に安価な製品がたくさんあります。

もう 1 つのアイデアは、Apache mod_proxy を利用して、生成されたページ出力を特定の時間保持することです。APCもかなり使えそうです。出力バッファリング キャプチャとページ上の関連データの最終変更時刻を使用し、APC キャッシュ バージョンを使用することができます。ページがもう有効でない場合は、再生成して APC に再度保存します。

頑張ってください、それは学習経験になるでしょう!

ベータ期間を設けて、処理できるだけ多くのユーザーを受け入れ、サイトのパフォーマンスを測定し、本番稼働前にバグを解決します。

プライベート ベータではユーザー数を明示的に制御することも、各ユーザーが友人に提供できる紹介数を設定できる Google スタイルの半公開ベータでも、ユーザーの数を制御できます。

個人的には、いくつかのことをしたいと思います

1) 何らかのロードバランサ/データベース複製システムを導入する

これは、サービスを複数のサーバーに分散できることを意味します。複数のサーバーを永続的に保有する余裕はないですか?Amazon E3 を使用します - このようなことを行う場合に適しています (負荷を処理するためにさらにいくつかのサーバーをオンにします)

2) 一部の「高負荷」制限内のコーディング

たとえば、検索が非効率な場合は、負荷が特定のレベルに達したらスイッチをオフにします。「申し訳ありませんが、忙しいので、後でもう一度検索してください。」

3) 負荷テスト...次のようなものを使用してください アパッチベンチ サーバーのストレステストを行います。

4) 個人的には、「キープアライブ」接続をオフにする方が良いと思います。全体的なパフォーマンスがわずかに低下する可能性がありますが、そのレベルに達すると、サイトが少数の人にはうまく機能し、他の人にはタイムアウトが発生する代わりに、全員が一貫性のないサービスを受けることになります。

Linux Format は、「スラッシュドット攻撃を生き残る方法」に関する優れた記事を掲載しました...過去に便利だったもの。その オンラインで PDF として入手可能

高トラフィックに備えてサイトを強化するための基本的な最初のステップ。

1) 次のような低コストのツールを使用します。 https://browsermob.com/ サイトの負荷テストを行います。少なくとも、1 時間あたり 10 万人のユニーク訪問者を確認する必要があります。MSN ホーム ページから広告を取得する場合は、1 時間あたり 500,000 のユニークを処理できるようにしてください。

2) すべての静的なグラフィック/ビデオ コンテンツを CDN に移動します。Edgecast と Amazon は優れた選択肢です。

3) Jet Profiler を使用して MySQL サーバーのプロファイリングを行い、パフォーマンスの遅いクエリを分析します。小さな変更は大きなメリットをもたらす可能性があります。

使用を検討してください ワニス- キャッシュ リバース プロキシ サーバーです (squid に似ていますが、より単一の目的に特化しています)。私はこれでいくつかのかなり大きなサイトを運営しましたが、非常にうまく機能しているようでした。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top