2

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

4

2 に答える 2

0

アーキテクチャ コンポーネントを別のシステムに分割することを検討する必要があると思います。たとえば、MySQL をエフェメラル ストレージで実行しているとします。データが簡単に失われる可能性があるという点で、これは MySQL にとって奇妙に思えます。Amazon RDS の使用を検討したことがありますか?

また、REDIS の代わりに、Key-Value ストアに ElasticCache または SimpleDB を検討しています。

私の要点は、大量のリクエストを処理している場合は、サービス スタックを互いに独立してスケーリングできる複数の層に分割する必要があるということです。

于 2012-09-07T15:49:07.593 に答える
0

パフォーマンスに関して言及すべきことの 1 つは、RAID として専用のスループットを使用しない限り、EBS ドライブを使用しないことです。一時的なものと比較して、それらは本当にひどいものです。SSD 上のエフェメラル ドライブを使用してデータベースに hi1.4xlarge を使用します。

于 2013-09-09T20:55:30.257 に答える