EC2 でセットアップを最適化しようとしています。CentOS 6、nginx 1.0.15、php-fpm を使用した php 5.4.4、xcache 2.0.0、mysql 5.5.24-55-log、redis 2.4.10、EC2 High Cpu XLarge (c1.xlarge 8 コア、7G RAM)トラフィックの多いサイトでは、リクエストごとに書き込みます。結果として得られる Web リクエストは非常に小さいです (javascript スニペット)。
基本的に、これは 100% 動的環境 (挿入または更新) です。すべての Web リクエストで、memcached を調べてすばやく検索し、すべてのページ リクエストでいくつかの属性をログに記録する必要があります。世界中にいくつかの EC2 があり、1 日あたり 6 億以上のリクエストを処理しています。アイデアは、データをログに記録し、1 時間ごとにダンプして、他のマシンで処理することです。各マシンは 1 日約 20M を処理しています。私はいくつかのデータストアを試しましたが、いくつかのメモは次のとおりです。
MySQL
- 時間別テーブルを使用してデータを取得するので、2012 年 9 月 5 日の午前 11 時に log_2012_09_05_11 にのみ書き込みます。
- 一時ストレージの使用
- MyISAM は、私にとっては innodb よりも高速であることが証明されています。私はバッファプールをいじってみましたが、myisam を使うと常にパフォーマンスが向上するようです。ここでもチューニングに関する提案を受け付けていますが、クエリは高速です。Myisam ロック時間は非常に小さいです。
- xdebug を使用してコードのプロファイリングを行ったところ、負荷が高い状態では、98% の時間が mysql への接続に費やされました。その後、mysqli との永続的な接続を使用することで、パフォーマンスを向上させることができました。
- 最大 ~2200 rps、ゲートウェイのタイムアウトが発生し、その後応答が遅くなる
- サーバー負荷最大 1 または 2 (8 コア マシン)
レディス
- 私は本当にこれが素晴らしいと思っていましたが、php がボトルネックのようです。
- 最大 ~5-600 rps .
- これは、この「log_2012_09_05_11_12345」のような書き込みキーであり、12345 は時間ごとに INCR カウンターから取得されます。
- ディスクへの保存は 15 分ごとに 1 回 (私の記憶が正しければ、操作には約 2 分かかりました)
この EC2 マシンと 100% の書き込みシナリオから現実的に期待できる 1 秒あたりのリクエスト数は? EC2 のディスク パフォーマンスまたは php または mysql に拘束されますか? より多くの CPU を使用したり、使用しているリソースをより有効に使用したりするように構成できますか?
PHP-FPM http://pastebin.com/raw.php?i=9n2cpqrq
NGINX (nginx.conf) http://pastebin.com/raw.php?i=XuVBKr8m