Windows system >> Windowsの知識 >  >> コンピュータソフトウェアのチュートリアル >> サーバー技術 >> サーバーについて >> 管理サーバー:サーバーがクラッシュする一般的な6つの理由

管理サーバー:サーバーがクラッシュする一般的な6つの理由

  

経験がない場合、Webサイトを拡張する方法を学ぶことは非常に困難です。 highscalability.comのようなサイトがたくさんあるとしたら、それらを拡張するための優れたソリューションが必要ですが、世界には「万能薬」はなく、すべてのWebサイトのニーズに対応できるソリューションはありません。あなたは自分でそれをしなければならず、あなたのニーズを満たす解決策を見つけるために絶え間ない考えを通して考えなければなりません。私も同じようにしました。

数年前、私の上司が私のところにやってきて、「私たちはあなたにあげたい新しいプロジェクトがあります。これは主に1か月以内にこのサイトをリファクタリングするものです。私はすでに100万人のユーザーを抱えています。将来増えるユーザーを確実に処理できるように、このWebサイトを再構築する必要があります。」私はすでに経験豊富なプログラマーですが、あまり得意ではありません。ウェブサイトを拡大する方法を学び始めないでください - プロセス全体が困難を経験しました。 (推奨される関連記事:リファクタリング:「なぜ」と「その方法」)

このサイトのバックグラウンドソフトウェアは、SmartyとMySQLに基づくPHPコンテンツ管理システムです。最初の仕事は私達のためにサーバーを管理する経験を持っている必要がある適切なホスティング会社を見つけることです。いくつかの調査の結果、私たちはこのような会社を見つけ、私たちのニーズを語ったところ、彼らに推奨される設定は次のとおりです。

ロードバランサー(+フォールバック)
2 Webサーバー< BR> MySQLサーバー(+フォールバック)
開発中のマシン
彼らは、これが私たちが必要とするすべてであると言いました - そして、私たちは確信しています。最後に行った設定は次のとおりです。

ロードバランサ(シングルコア、1GB RAM、ポンド)2台のWebサーバー(デュアルコア、4GB RAM、Apache)
MySQLサーバー(クアッドコア、8GB)メモリ)開発マシン(シングルコア、1GBメモリ)この構成は非常に基本的なものであり、それ以上最適化されていない。ファイル(PHPとメディアファイル)を同期させるために、彼らはアクティブ - アクティブDRBDを構築しました。最後に、リファクタリングが始まりました - もちろん、私たちは非常に興奮しています。早朝、ドメイン名を新しいIPに切り替え、監視スクリプトを実行して、画面を見つめました。私たちはすぐにこれらのマシンのトラフィックを見て、すべてが非常にうまくいっているように見えました。ページは非常に速く読み込まれます、そしてMySQLは多くの問い合わせタスクを負担しています、そして我々は皆とても幸せです。

それから突然、私たちの電話が鳴り始めました。「私たちはあなたのウェブサイトにアクセスできません。何が起こっていますか。」私たちは監視ソフトウェアを調べました。フリーズして、サイトはオフラインになりました!もちろん、最初にしたのはホスティングプロバイダに電話することでした:「すべてのサーバーが停止しています。何が起こっていますか?」彼らはマシンをチェックすることを約束しました。後でまた電話します。 「あなたのシステムは単純に介入できません。あなたは何をしましたか?それは完全に混乱しています。」彼らはロードバランサーを止め、そして私にウェブサーバーの一つを観察させました。 index.phpファイルを見てショックを受けました。奇妙なCコードの断片、エラーメッセージ、そしてログファイルのようなものが含まれています。さらに調査した結果、DRBDが事故の原因であることがわかりました。

サーバーを "kill"する1つの方法

Smartyのコンパイルとテンプレートのキャッシュを高負荷のアクティブ - アクティブDRBDクラスターに置くと、サーバーはハングします私たちのホスティングプロバイダーがWebサーバーを修正したとき、私はこれらのサーバーのローカルファイルシステムにSmartyキャッシュファイルを保存するためにいくつかのCMSコードを書き直しました。私たちはまたオンラインです!

今日は午後です。このサイトは通常夕方から深夜にかけてピークに達します。夜はほとんど交通がありません。私たちは監視ソフトウェアを見つめてきました、そして私たちはみんなとても緊張しています。このWebサイトはロードすることができますが、後で、システム負荷が高いほど、応答が遅くなります。 Smartyテンプレートキャッシュの有効期間を追加しました、うまくいけばこれはうまくいくでしょう - しかし残念ながらこれはうまくいきませんでした!間もなく、サーバーはタイムアウト、空白ページ、エラーメッセージを出し始めました。負荷を処理できないマシンが2つあります。

現時点では私達の顧客は少し緊張しています、しかし彼は言った:OK、リファクタリングは通常いくつかの問題を引き起こします。すばやく修正できるのであれば、問題ありません。

負荷を軽減するための計画が必要です。その後、ホスティングプロバイダと相談しました。彼らのシステム管理者の1人は、「考えてみてください。あなたのサーバーは現在、非常に一般的なApache + mod_phpアーキテクチャーで稼働しています。WebサーバーをLighttpdに置き換えるのはどうですか?それはかなり小さなプロジェクトですが、ウィキペディアで使用されています。」と同意しました。 (推奨される関連記事:Apacheサーバに代わる4つの選択肢のより良い選択)

あなたのサーバを「殺す方法」

すぐに使えるWebを手に入れるサーバーはあなたのマシンにセットアップされていて、まったく最適化されていないとサーバーはハングします!管理者はできるだけ早くすべてのWebサーバーを再設定するように最善を尽くしました。彼はApacheを捨ててLighttpd + FastCGI + Xcacheに切り替えました。その後、オンラインに戻ったときに、二度とプレッシャーを感じることは二度とありませんでした。これらのサーバーはどのくらい持続しますか?

これらのサーバーは驚くほど優れています。負荷は以前よりはるかに低く、平均応答時間は良好です。私達は完全に安心し、そして私達全員は家に寝て寝た。もう遅れていますし、他にやらなければならないことはないと思います。翌日、このサイトは非常に順調に稼働していましたが、ピーク時にはクラッシュの端に近づいていました。 MySQLがボトルネックになっていることがわかり、ホスティングプロバイダに再度電話をかけました。 MySQLを使用して、各Webサーバー上のサーバーからMySQLマスター/スレーブ同期を実行することをお勧めします。

サーバーを強制終了する3番目の方法

強力なデータベースサーバーにも限界があり、限界に達するとサーバーはハングします。この場合、データベースが非常に遅くなってキュー内の多数のネットワーク接続が再び私たちのWebサーバーを "kill"することがあります。残念ながら、この問題は解決するのが難しいです。コンテンツ管理システムはこの点で非常に単純であり、それ自体がSQLクエリの読み書きを個別にサポートすることはありません。これを書き換えるのには長い時間がかかりました、しかし毎分休止状態に遭遇することは非常に価値があります。

MySQLの同期は本当に成功し、サイトはついに安定しました!今後数週間と数カ月のうちに、サイトは成功し、ユーザー数が増え始めました。トラフィックは再びリソース制限を超えますが、これは時間の問題です。

サーバーを強制終了する4番目の方法

事前の計画はありません。サーバーがハングする可能性があります。

幸い、私たちは考えていますそして計画しています。私たちはコードを最適化し、各ページをロードするのに必要なSQLクエリの数を減らしました。まず、いくつかのコア機能でMemCachedのサポートを追加し、いくつかのヘビー級(低速で実行中)の機能でMemCachedのサポートも追加しました。私たちがこれらの変化を展開したとき、私たちはその結果を信じることができませんでした - それは聖杯を発見するように少し感じました。 1秒あたりのクエリ数は少なくとも50%削減されました。他のWebサーバーを購入するよりもMemCachedを使用することにしました。

サーバーを殺す5つの方法

キャッシュするのを忘れると、たくさんのお金を無駄にし、サーバーがハングするでしょう!MemCachedは、私たちの負担を減らすのに役立ちます。 MySQLサーバーの負荷の70%〜80%、その一方でWebサーバーの負荷も、大幅なパフォーマンスの向上をもたらしました。ページはかなり早く読み込まれます。

最後に、私たちの設定は完璧なようです。ピーク時でも、クラッシュやページの応答が遅いことを心配する必要はありません。我々はそれを手に入れましたか?いいえ、青いWebサーバーの反応が少し遅くなり始めました。その後、いくつかのエラーメッセージ、空白のページなどがあります。このシステムは非常に優れた負荷容量を持ち、ほとんどの場合サーバーは動作していますが、ほとんどの場合のみです。

サーバーを強制終了する6つの方法

フォルダに何百もの小さなファイルを置くインデックスノードが使い果たされると、サーバーはハングします!

はい、あなたは間違えていません。私たちは以前はMySQL、PHP、そしてWebサーバーそのものに焦点を合わせていましたが、ファイルシステムにはあまり注意を払いませんでした。 Smartyキャッシュファイルはローカルファイルシステムに保存されます - すべてのキャッシュファイルは同じディレクトリに保存されます。解決策はSmartyを専用のReiserFSパーティションに入れることです。さらに、Smartyの "use_subdirs"オプションもオンにしました。

過去数年間、ページを最適化してきました。 Smartyキャッシュをmemcachedに入れます。静的ファイルをより早く処理するために、I /O負荷を減らすためにVarnishをインストールしました。私達はまたNginxに切り替え(Lighttpdはランダムにエラー500のメッセージを生成します)、より多くのメモリをインストールし、より良いハードウェアを購入し、より多くのハードウェア...このリストは終わらないでしょう。

概要

Webサイトを拡張することは決して終わることのないプロセスです。ボトルネックを解決すると、次のボトルネックに遭遇する可能性があります。このように考えないでください。これはあなたのサーバー、あるいはあなたのビジネスさえも「殺す」でしょう。計画と学習は継続的なプロセスです。経験やリソースが足りないためにこれを自分で行うことができない場合は、仕事をすることができ、非常に信頼できるパートナーを見つけて、仕事をするために一緒に仕事をすることができます。現在発生している問題や発生する可能性のある問題について、チームやパートナーとのコミュニケーションをやめないでください。先に進むことができる前に考えなさい。

Copyright © Windowsの知識 All Rights Reserved