データベースとのインタラクションのない高性能ウェブサーバー

データベースとのインタラクションのない高性能ウェブサーバー

大量のトラフィック ソースからの統計データを追跡するサーバーをセットアップする準備をしています。平均して 600 万~ 700 万件/時のリクエストを処理しますが、そのすべてが小さな GET です。必要なのは、GET リクエストのパラメータを処理して CSV ファイルに書き込むことができるシンプルなサーバー セットアップだけです。

最初に考えたのは、すでに使い慣れている構成である lighttpd+fastcgi+php を使用することです。しかし、このようなパフォーマンスの決定を毎日行うわけではないので、他のオプションを検討して、この目的にさらに適したものがあるかどうかを確認したいと思います。

答え1

1日あたりCSVファイルに対して600万~700万回の書き込み操作を実行する場合時間?

真面目な話、データベースの方が良いアイデアです。データベースは同時書き込みを処理するように設計されており、垂直方向(マシンの大型化、ディスクの高速化)または水平方向(複数のサーバーに負荷を分散)に拡張できます。単一のCSVファイル(またはどれでもファイル) では、同時実行の問題を処理するために何らかの形式のロックが必要であり、IO 負荷と同時実行が増加するとスケーリングが低下します。

これを回避するには、おそらく独自のキャッシュ レイヤーとバッファ レイヤーを実装し、複数のファイル間で負荷を分割するなどすることになるでしょう。最初から何らかのタイプのデータベースを使用して、多くの頭痛の種を省きましょう。

答え2

毎秒2000リクエスト、または500µs/リクエストの処理速度を考えると、平均(つまり、ピークがはるかに高くなります)、ファイルへのアトミック書き込みを保証するものは何もないため、同時書き込み時にエントリが上書きされる可能性があるため、CSV はおそらく使用できません。

1つのアイデアは、後で収集されるプロセスごと/ライターごとのファイルです。もう1つのアイデアは、大量の書き込みに重点的に調整されたデータベースを使用することです。メッセージキューやグループ通信プロトコル(例:広める)、しかし、彼らがその量の音量に耐えられるかどうかはわかりません。

何をするにしても、簡単なアイデアをいくつか出してベンチマークしてください。現在のハードウェアはパフォーマンスに関して素晴らしい効果を発揮しますが、必要なときだけ最適化してください。PHPに関しては、Opcode Cacheがインストールされていることを確認してください(例:電子計算機) 、そうしないと、スクリプトの不必要な再コンパイルに多くのサイクルを費やすことになります。

また、サービスの成長がどのようになるかについても考慮してください。数か月以内に圧倒されてしまうようなソリューションを目指すことはほとんど意味がありません。

答え3

GET リクエストではどのようなパラメータが渡されますか? CSV/データベースでリアルタイムに行う必要がありますか? または、ダミーの HTML ファイル (または PHP) を作成し、Web ログを使用して解析し、後でバッチ ジョブとして CSV にダンプできると思いますか? (分かりにくいようですが、扱いは簡単です)。

答え4

Server 2008 Web エディションを調べて、ADO.net を使用して CSV ファイルに書き込みます。ado.net が書き込みをバッファリングするため、スループットの問題は発生しないはずです。

関連情報