web-dev-qa-db-ja.com

トラフィックの急増に備えて

当社は今週、プライムタイムのテレビ番組に出演する予定であり、当社のウェブサイトには一度に約20万人の訪問者が期待できると言われています。

通常、1日あたりの訪問数は約100だけなので、これだけのトラフィックを処理できるかどうかはわかりません。ホストは1and1.co.ukです。

サイトに障害が発生するのを防ぐための予防策はありますか?

35
SamTheMan

トラフィックの多い期間中、サーバーはWebサイトへの訪問者によるすべてのリクエストを処理できる必要があります。ただし、サーバーが処理する同時接続にはいくつかの制限があります。そのため、できるだけ早くページリクエストを処理するのが最善です。

これらの状況で考慮すべきいくつかの提案があります。

アプリケーションレベルの改善:

1。HTTP要求を最小化してページの読み込み時間を短縮します。

a)すべてのJSファイルを1つの結合されたJSファイルに結合し、すべてのCSSファイルを1つの結合されたCSSファイルに結合します。

b)JSおよびCSSファイルを縮小して、ファイルサイズを縮小し、ダウンロードを高速化します。

c)CSSスプライトを使用する-画像のほとんどまたはすべてをSpriteに結合すると、複数の画像リクエストが1つになります。次に、background-image CSSプロパティを使用して、必要な画像のセクションを表示します。

d)遅延読み込みでイメージのダウンロードを遅らせます。これは、httpリクエストを減らすのに役立ちます。

2。より多くの訪問を期待している軽量ページを準備します:

a)可能な限り画像やフラッシュなどの装飾的な要素を除外します。サイトナビゲーションとクロムで画像の代わりにテキストを使用し、ほとんどのコンテンツをHTMLに入れます。

b)動的なHTMLページではなく静的なHTMLページを使用します。後者はサーバーにより多くの負荷をかけます。サーバーの負荷を減らすために、動的ページの静的出力をキャッシュすることもできます。


サーバーレベルの改善:

1。サーバーのタイムアウト値を減らすホスティングプロバイダーに相談してください(低すぎてはいけません)。

タイムアウトが短い場合、接続はすぐに解放されるため、サーバーはより多くの接続を処理できます。

2。サードパーティのサービスを使用する CloudFlareのように静的データのキャッシュに使用し、悪意のあるユーザーやDDOSのような攻撃からWebサイトを保護します。

。サーバーハードウェアのアップグレード-必要に応じて、物理メモリと仮想メモリをアップグレードし、I/Oとエントリプロセスの制限を増やします。あなたのホスティングプロバイダーはあなたをより良く助けることができるでしょう。

4。動的コードのキャッシュ-APCを使用してPHPオペコードをキャッシュします。

5。負荷分散-複数の負荷分散サーバーに負荷を分散します。


  • 必要なすべてのアクションが実行されたら、今度はWebサイトが大量のトラフィックスパイクに対応できる状態になっているかどうかを確認します。

    Loadimpact.comのような、シミュレートされたトラフィックで負荷テストを提供するサードパーティサービスがあります。この分析は、Webサイトが処理できる負荷と改善できる点を理解するのに役立ちます。

  • また、トラフィックスパイク期間中は、WebサイトバックアップcronジョブなどのCPU使用率の高い操作を避けます。

26
Nikhil Supekar

まず、Cloudflareをお勧めします。無料の基本アカウントを作成すると、ローカルデータセンター経由でトラフィックをルーティングして、サーバーホップの量を最小限に抑えることができます。 Cloudflareはコンテンツのキャッシュにも優れており、DDOS保護を備えています。

それ以外は、サービスレイヤーから脂肪を削除してみてください。コードのボトルネックになっている過度に肥大化したデータベースクエリや、単純化できるCPU集中型のロジックがないことを確認してください。

また、データベースクエリをキャッシュしようとします。クエリキャッシュの優れたオプションには、RedisまたはMemcacheがあります。コンパイルされていない言語を使用している場合、OpCachingも考慮事項の1つです。

ただし、おそらく最も重要なことは、静的コンテンツ(CSS、JS、画像)を可能な限り最適化することです。すべてのJavascriptを縮小し、可能であればすべてを1つのファイルに結合します。サイトに含まれる各ファイルは、エンドユーザーに到達するためにいくつかのサーバーホップを作成する必要があることに注意してください。

画像を圧縮することで節約できる帯域幅とロード時間を過小評価しないでください!

最後に、New Relicなどのツールを使用してパフォーマンスを監視することを検討してください。

幸運を祈ります!!

出典:Alexaによると、英国で12番目に人気のあるサイトの開発者の1人。

7
Ewan Valentine

サイトの負荷テストを検討してください。 JMeterThe Grinder 、および Gatling などの無料ツールがあり、サイトへの多数の訪問者をシミュレートできます。

大量のトラフィックの影響を事前にテストすることで、行った調整が効果的であるかどうかを判断し、効果がない場合はさらに調整することができます。

5
James_pic

1and1を使用している場合は、おそらく安価なホスティングを探しているでしょう。安価なホスティングは、1つのボックスの下ですべてを行う傾向があることを意味します。ホスティングの大きな問題は、すべてを同じボックスでホストする場合、リソースをサイトの重要な部分に分割することです。

  • Webサーバー(Apache、Nginxなど)
  • データベース(MySQL、PostGreSQLなど)

また、1and1であるため、PleskやcPanelなどのコントロールパネルを使用している可能性が高くなります。つまり、リソースを奪い合う物の層が余分にあることを意味します。そして、あなたのcoの最後の爪?あなたは多くのリソースを持っていません。おそらく1つのCPU(または仮想CPU)とごくわずかのRAMがあります(2GBを超えると驚くでしょう)。

1and1を廃止したとき、スケーラブルなホスティングプロバイダー(この場合はAmazon Web Services)を使用し、以前はできなかったいくつかのことを行いました

  1. Amazonにはデータベース(RDS)の独自のインスタンスがあるため、データベースには息をするリソースがあります。ほとんどのRDBMSシステムはRAMで動作し、呼吸しますが、それは十分に得られるものでした。これで、I/Oの高いSSDもプロビジョニングできるようになり、他のDBチョークポイント(データの書き込み)の痛みが軽減されます。
  2. 2台のWebサーバーを備えたロードバランサーを取得しました。 DBのバックエンドが非常に大きいため、ハイエンドのフロントエンドは必要なかったため、2台のローエンドサーバーが用意されました。
  3. 完全に構成されたマシンをオンデマンドで起動できるものに切り替えました。 ChefやPuppetのようなものを使用すると、新しいWebサーバーを簡単に追加でき、適切に行うとエンドユーザーに対して100%透過的になります。 AWSには Opsworks もあるため、スクリプトを直接AWSにビルドできます。
  4. オンデマンドでインスタンスサイズを変更します。これは私たちにとって重要な作品です。 DBが行き詰まったら、数分でそれを下げて、より大きなものとして再起動できます。はい、それはダウンタイムを伴いますが、数分のダウンタイムは恐ろしく遅いサイトの時間よりも優れています。完全にダウンタイムが怖いですか?ウィングにリードレプリカを保持し、それをダウンさせて、より大きなインスタンスに切り替え、マスターに昇格させると、余分なマシンのコストでダウンタイムを回避できます。

AWSは町で唯一のゲーム(Azure、Rackspaceなど)ではありませんが、1and1があなたの需要に合わせて拡張できることを確認してください。

3
Machavity

「一度に」を十分に定義していない。 30分で200,000人のユニークビジターを見ているとします。これは1秒あたり111リクエストであり、クリックスルーしてより多くのページを開くビジターを考慮していません(これは必要ですか?)。

私が最初にやることは、同じ量のトラフィックを処理する人々のGoogleストーリーです。多くの人が自分の経験についてブログに書いて、他の人を助けます。共有ホスティングで誰かがそれをやっているという話を見つけるのは非常に難しいことに気付くでしょう、そしてそれには理由があります。手始めに、視聴者に最も近いデータセンターを使用して、Digital OceanやAmazon Web Servicesなどのソリューションを検討してください。そして、無料のアカウントであっても、すべての静的リソースをCloudFlareにオフロードすることは素晴らしいアイデアです。

それとは別に、動的であると仮定して、ページの上部と下部にタイミングスクリプトを追加して、コードをテストします。数値に関する私の仮定が正しいと仮定すると、許容可能なパフォーマンスを維持するには、10ミリ秒以内に各ページを提供できる必要があります。デフォルトですべてのリクエストをSSL経由で処理している場合、ストームが通過する間、数日間それを無効にします。

また、200,000は非常に怖いように聞こえますが、too怖がる必要はないことを覚えておいてください(多少はあるべきですが)。たとえば、Paper誌がKim KardashianのNSFW写真を発行したとき、負荷を処理するのに4台の中型のWebサーバーとAmazon ELBだけが必要でした この記事による (SFW) 。現在の設定で処理できるとは思いませんが、48個のコアがそれぞれ独自の小型原子力発電機で駆動される16台のWebサーバーは必ずしも必要ではありません。

1
John Cave

ISPに問い合わせて、帯域幅に上限があるかどうかを確認してください。予想されるトラフィック量に対して帯域幅が不十分な場合は、ホスティングプランをアップグレードします。訪問者に「帯域幅制限を超えました」というメッセージを表示したくない場合。

1
Salman A

この古いが非常に良い質問を知っていて、数年前に私が主題について良い情報を持っていたなら...

テレビネットワークに掲載される(学校活動に関連する)サイトが時々あります。非常に厳しい予算で運営しているため、「負荷分散」がソリューションです。 VPSボックスは最近非常に安くなっている可能性があり、2〜3個のコンテンツをミラーリングまたは複製するだけです。

これを見てください 記事 と「ラウンドロビン」について読んでください。

負荷テストの詳細については、 こちら をご覧ください。

最初にスパイクの処理を試みたとき、コンテンツを2〜3個のVPSボックスに配置し、NSをレジストラー設定に配置しました。

1
Woody

私の個人的な経験から、最高のVPSにも限界があることを知っています。私は本当の素人のここに行きます。

スポーツWebサイトの1つがVPSでホストされていました。パキスタンとインドの試合中、70,000件以上のヒットがありました。 Inmotinghosting VPSには4GB RAMと2.GHz処理、1TB帯域幅、SSDストレージ、およびその他の豪華なものがありました。 Cloudflareの有料版もアクティブ化されました。

試合の途中で、ウェブサイトはダウンしました。試合中にライブになることはなく、潜在的に70,000人以上の訪問者を失いました。帯域幅が消費され、ソースホストが機能していなければ、CDNはほとんど役に立たないことが後でわかりました。

レッスン:VPSを取得してCloudflareのようなCNDにチューニングするとともに、ページサイズを最小化します。小さいほど良い。トラフィックを処理する際に非常に便利なページキャッシングとコードミニフィケーションを利用できます。

1
imranhunzai

1週間もかからずにWebサイトの書き換え、プロバイダーの切り替え、コンテンツのCDNへの移行をお楽しみください。

他の回答から気付いたかもしれませんが、これらは、トラフィックを大幅に増加させるためにサイトを準備するために必要な最小限のものです。現在1and1.co.ukで実行している場合、ネットワークエンジニア、DBA、プログラマー、フロントエンドオプティマイザーの強力なチームはおそらくいないでしょう。

それは起こりそうにないですよね?

ショッピングカートを実行するか、静的コンテンツを使用して実装できるかどうか、Webサイトで何をするかについては説明していません。後者の場合、サイト全体を静的ファイルにスクレイピングし、通常のサイトの代わりに公開すると、津波を生き延びます(最初に現在のバージョンをバックアップしてください)。

また、1and1と話す必要があります(クレジットカードを手に入れて)。

0
symcbean

最適なのは、マルチクラスター化された専用サーバーを使用して問題を解決することです。

0
Himanshu Singla