47

異常に高いトラフィックスパイクを乗り切るための良い方法は何ですか?

私の考えでは、あるトリガーで、私のWebサイトは一時的に「低帯域幅」モードに切り替える必要があります。基本的なHTMLページ、最小限のグラフィック、データベースに不要な負荷をかける可能性のあるウィジェットの無効化などです。

私の考えは次のとおりです。

  • CPU使用率を監視する
  • 帯域幅を監視する
  • リクエストの監視/分

生き残るための手段として、キャッシュ、静的コンテンツやコンテンツ配信ネットワークへの切り替えなどのオプションに精通しているので、おそらく質問は、Webサイトが過負荷になりそうなときにどのように検出するかに焦点を当てる必要があります。(もちろん、他のサバイバル方法に関する回答は大歓迎です。)WebサイトがLinuxとPHPでApacheを実行しているとしましょう。これはおそらく最も一般的な構成であり、最大数の人が回答から支援を得ることができるはずです。また、別のサーバーの購入や負荷分散などの高価なオプションが利用できないと仮定しましょう-少なくとも私たちのほとんどにとって、Slashdotに関する言及は一生に一度の出来事であり、準備のためにお金を費やすことができるものではありません。

4

24 に答える 24

20
  1. munin をインストールして、負荷/メモリ消費などを監視し、過負荷を通知します。
  2. monit をインストールして、クラッシュした場合に apache2 を再起動します
  3. nginx を apache2 フロントエンドとしてインストールすると、高負荷時のメモリ要件が大幅に減少します
于 2008-10-20T13:40:49.040 に答える
12

接続に十分な帯域幅がない場合、巧妙なキャッシュと低帯域幅モードは役に立たないことに注意してください。そのため、サーバーへの接続が十分にファットであることを確認してください。たとえば、自宅の DSL 接続でホストしないでください。

私はスラッシュドットされた経験から話します。何千人もの人々が、同居人がジョージ フォアマン グリル内に取り付けられたコンピュータの写真を同時にダウンロードしようとしているために、インターネットにまったくアクセスできないと面白くありません。いくらファイアウォールを張ってもあなたを救うことはできません。

于 2008-10-20T13:51:46.473 に答える
11

基礎:

  1. 真のWindows の達人でない限り、大規模なサイトを Windows でホストしようとしないでください。可能ですが、時間とコストの問題です。
  2. 可能な限り静的コンテンツを使用してください (つまり、データベース クエリを使用しないでください)。
  3. キャッシュ制御ヘッダーについて学び、画像やその他の静的アセットに適切に使用します。
  4. 少なくとも Apache を使用しますが、可能であれば、lighttpd または別の高性能 Web サーバーを使用してください。

本当の答え:

  1. SQL をよく理解し、遅いクエリの分析に時間を費やしてください。ほとんどのページの読み込みでは、1 秒以上のストレート クエリが必要になることはありません。
  2. 負荷が実際にどこにあるかを判断します。メディアの多いサイトの場合は、別の場所 (Akamai やその他のサービスなど) でコンテンツをホストすることを検討してください。データベースが重いサイトの場合は、レプリケーションを検討してください。
  3. どのような種類のレプリケーションが機能するかを理解してください。読み取りが多いサイトの場合は、標準の MySQL マスター/スレーブ レプリケーションで問題ありません。大量の書き込みが行われている場合は、MySQL Cluster などのマルチマスター セットアップが必要になります (または、「カスケード」または「ウォーターフォール」レプリケーションを調査します)。
  4. 可能であれば、PHP の呼び出しは避けてください。つまり、ページの静的 (HTML) コピーをキャッシュします (これは、ほとんどの Wordpress キャッシュ プラグインが行うことです)。Apache は、最も単純な Hello World PHP スクリプトよりもはるかに高速に静的ファイルを提供します。
于 2008-09-16T20:44:02.200 に答える
9

これは、「フラッシュクラウド」の生き残りに関する、かなり長いが非常に有益な記事です

提案されたソリューションが対処する状況のシナリオは次のとおりです。

このホワイト ペーパーでは、ガレージ イノベーターと呼ばれるキャラクターの目を通してスケーリングの問題を検討します。ガレージのイノベーターは創造的で、技術に精通しており、野心的です。彼女は、Web 上の次のビッグ シングについて素晴らしいアイデアを思いつき、ガレージにあるいくつかの予備のサーバーを使用してそれを実装しました。このサービスは稼働しており、時々新しい訪問者を引き付け、広告とサブスクリプションからわずかな収入を得ています. いつの日か、彼女のサイトが大当たりするかもしれません。Slashdot や Digg のトップページに載るかもしれません。Valleywag や New York Times が取り上げるかもしれません。

私たちのイノベーターは、広く宣伝される可能性があります。そうなった場合、何万人もの人々が彼女のサイトを訪れるでしょう。彼女のアイデアは非常に斬新であるため、多くの人が収益を生み出す顧客になり、友人を紹介します. しかし、フラッシュ クラウドは気まぐれです。サイトが負荷の下でクラッシュした場合、結果はそれほど牧歌的ではありません. サイトが最初に機能しない場合、多くの人はわざわざ戻ってきません. それでも、サイトで突然の負荷スパイクが発生した場合に備えて、リソースに数万ドルを支払うことを正当化することは困難です. フラッシュ クラウドは、ガレージ イノベーターの悩みの種であり、彼女の目標でもあります。

この難問から抜け出す 1 つの方法は、現代のユーティリティ コンピューティングによって可能になりました。

この記事では、ストレージ配信ネットワークの使用や高度にスケーラブルなデータベースの実装など、ガレージ イノベーターが実行できる多くの手順を提案しました。

于 2008-10-20T14:21:52.590 に答える
7

いくつかの人気のあるサイトから参照されているすべての URL を、coralCDN を介してリダイレクトされるように書き換えます。

Apache の例:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_USER_AGENT} !^Googlebot
RewriteCond %{HTTP_USER_AGENT} !^CoralWebPrx
RewriteCond %{QUERY_STRING} !(^|&)coral-no-serve$
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?digg\.com [OR]
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?slashdot\.org [OR]
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?slashdot\.com [OR]
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?fark\.com [OR]
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?somethingawful\.com [OR]
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?kuro5hin\.org [OR]
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?engadget\.com [OR]
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?boingboing\.net [OR]
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?del\.icio\.us [OR]
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?delicious\.com
RewriteRule ^(.*)?$ http://example.com.nyud.net/$1 [R,L]
</IfModule>
于 2008-09-17T13:17:02.123 に答える
6

ストレス テストを行わない限り、Web サイトが高負荷に耐えられるかどうかを知る方法はありません。包囲のようなものを使用して、パフォーマンスの問題がどこにあるのかを確認してください。メモリ内での成長が速すぎますか? 多数の同時接続で速度が低下し始めますか? データベースへのアクセスに永遠に時間がかかりますか?

パフォーマンスの問題がどこにあるのかがわかれば、あとは問題を取り除くことになります。残念ながら、特定の状況について詳しく知ることなく、それ以上の詳細を説明することは困難ですが、ここでは最適化について話していることを覚えておいてください。したがって、パフォーマンスの問題があることがわかっている場合にのみ行動する必要があります。

そして、あなたは必ずしも一生に一度のイベントに備えているだけではないと私は主張します. DOS 攻撃は依然として発生しているため、サイトがスラッシュドット化されなくても、準備を整えておくことをお勧めします。

ほとんどすべての状況であなたを助けることができる唯一のことは、コンテンツを gzip することです。これにより、帯域幅が大幅に節約され、最新のブラウザはすべて、パフォーマンスの問題をあまり気にせずにサポートされます。

于 2008-10-20T13:31:04.800 に答える
5

前提が間違っていると思います。あなたは本当にスラッシュドットを取得したいのです。そうでなければ、そもそも Web サイトを持っていないでしょう。より良い質問は、余分なトラフィックをどのように処理するかです。そして、それは実際には2つの質問です:

  1. 追加のサーバー負荷を技術的にどのように管理しますか?
  2. 新しいユーザーにどのように挨拶し、うまくいけば何人かを定着させることができますか??
于 2008-09-16T20:31:55.270 に答える
2

クラウドに入れて!

これはおそらく個人のブログなどには関係ありませんが、より大きなサイトではクラウドホスティングがこれを解決します。たとえば、Amazon EC2の場合、この戦略には莫大な費用がかかります。

小規模では、すべての画像/静的コンテンツにCDNを使用することも少し役立つかもしれませんが、価格を評価することも重要です。Amazon S3は、私が最もよく耳にするCDNです。

于 2008-10-20T12:52:40.680 に答える
2

大量のトラフィックが発生するサイトの場合、Akamaiはサイトを高速にし、非常にスケーラブルで、独自のインフラストラクチャにもかかわらず信頼できるものにする優れたソリューションです。Akamai は、サイトを世界中の場所にキャッシュするサービス (無料ではありません) です。私の最後の仕事では、e コマース カタログがそれらを介してキャッシュされていたため、サーバーがダウンして、カートに追加しようとしない限り誰も知ることができませんでした。また、イメージ サーバーが一度ダウンすることもありましたが、Akamai のキャッシングが再び私たちを救ってくれました。

于 2008-10-20T13:44:58.267 に答える
1

キャッシュを使用してください!

たとえば、WordPressを使用している場合は、WP-Super-Cacheのようなものを使用できます。通常のPHPを使用している場合でも、memcacheを含む多くのオプションを使用できます。または、通常のsquidプロキシスタイルのキャッシュを使用することもできます。

使用するキャッシュは、サイトの防弾(またはスラッシュドット/ diggプルーフ)に役立ちます:-)

于 2008-10-20T12:40:49.627 に答える
1

DBからのキャッシュのレベルを上げて、コンテンツが少し古くなっているが、アクセスが速くなるようにします。当然、これはコンテンツが100%一貫している必要がない場合にのみ適用されます。

于 2008-10-20T12:42:06.223 に答える
1

人気になることはありません。

それは機能しますが、実際には役に立ちません。非常に短時間でスケーリングできるインフラストラクチャが必要です。Slashdot でさえ Google や Amazon を圧倒することはないので、Google Gears や Amazon の Web サービスのようなものがこれには理想的だと思われます。独自のサーバーが必要な場合は、ネットワーク プロバイダーが事前設定された帯域幅制限で切断されないようにしてください。突然のスパイクに対処する余裕がなく、通常のトラフィックを処理するだけで負担にならないように、十分な数のハードウェアを購入してください。

于 2008-09-16T20:31:56.800 に答える
1

キャッシュ... ハード。ヒットを記録し、スパイクが発生した場合は、ヒットしたページの完全に静的なコピーを書き出して、それを提供します。優れたキャッシング システムを使用して DB クエリを 100 から 2 に削減すると、弱いスラッシュドッティングに耐えることができますが、DB クエリがまったくない場合でも、準備ができていない深刻な負荷がかかるとサイトが機能しなくなります。

于 2008-09-16T20:38:36.020 に答える
1

netstat -plant | awk '$4 ~ /:80\>/ {print}' | wc -l

これにより、Apache サーバーへのすべての接続が表示されます。Apache サービスへの接続の総数を計算し、一定のしきい値に達すると警告を発する cgi スクリプトを作成できます。その時点で何をするかは別の問題です。

サーバーの準備ができていることを願っています。

于 2009-01-02T17:06:25.270 に答える
1

Nagiosを使用してサーバーの状態を監視することもできます。要件に基づいて、特定の条件で、既存の SQL ファイルをトリガーして Web サイトのモードを切り替えることができます。

たとえば、「UPDATE settings_table SET bandwidth = 'low';」を追加します。その SQL ファイルにコピーして mysql で実行し、条件が正常に戻ったら反対のことを行います。

于 2008-10-20T16:20:40.793 に答える
0

作成するすべてのページが静的であり、データベースがなく、画像を使用していないことを確認してください。

実際、この場所はそれほど悪くはありません。

于 2008-09-16T20:33:51.927 に答える
0

.htaccess:

RewriteEngine on
RewriteCond %{HTTP_REFERER} slashdot\.org [NC]
RewriteRule .* - [F]
于 2008-09-16T20:59:09.963 に答える
0

あなたが生き残ることについては正しいです:スラッシュドットリンクをグラフィックのない静的なhtmlページに切り替えるかリダイレクトします。このページを他のWebサーバーに配置して、元のサーバーに過度の負荷がかからないようにすることもできます。

これには一時的なリダイレクトを使用し、トラフィックが減少したときにリダイレクトを削除します。

しかし、これを検出する方法、これも知りたいです!最後の数秒間のヒット数を数えるだけでは不十分かもしれません。

于 2008-10-20T12:41:09.910 に答える
0

データをキャッシュします。

負荷ごとに同じように表示されるものを表示するためにデータベースに不要なトリップを行うと、サーバーが停止します。その出力をファイルに書き込み、代わりにそれを使用します。ほとんどの CMS とフレームワークにはキャッシングが組み込まれています (ただし、有効にする必要があります) が、独自のものを展開することは最も困難な作業ではありません。

于 2008-09-16T20:36:37.163 に答える
0

リクエストがコーラル cdn からのものでない限り、コーラル CDN に自動リダイレクトします。

于 2008-09-16T20:46:38.887 に答える
0

ページが Last-Modified & If-Modified-Since および/または ETag & If-None-Match ヘッダーをサポートしていることを確認してください。これらを使用すると、多くの計算と転送を完全に回避できます。

詳細については、HTTP 条件付き GET を検索してください。

于 2008-10-20T13:20:44.853 に答える
0

これを行う方法、または少なくとも支援する方法はいくつかあります。Google で「slashdot-proof」を検索すると、いくつかのものが見つかります。

  • FreeCache でサーバーをスラッシュドットプルーフ - Boing Boing
  • Simple Thoughts ブログが Slashdot Proof になりました

于 2008-09-16T20:32:59.730 に答える
0

nearfreespeech.net はいわばセミクラウドであり、このような状況で大いに役立ちます。上記の他の人が述べたように、階層化されたキャッシュは非常に役立ちます。データベースの代わりに memcached から大量の情報を取得し、目の前にリバース プロキシ (または分散型リバース プロキシ、別名 CDN、Panther Networks は安価) を配置します。

于 2008-10-21T06:48:25.207 に答える
-1

負荷分散については誰も言及していません...haproxyなど。最適化、キャッシュ、および負荷分散は、ほとんど何でも存続するはずです。そうは言っても、stackoverflowがロードバランサーの背後にあるかどうかはわかりません;)

于 2008-09-16T21:49:28.907 に答える