mysql - 为 EC2 上的高流量调整 php-fpm、nginx、mysql

标签 mysql nginx amazon-ec2 redis php

我希望优化我在 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 内存)对于高流量站点,写入每个请求。生成的网络请求非常小(javascript 片段)。

基本上,它是一个 100% 的动态环境(插入或更新)。对于每个 Web 请求,我需要在 memcached 中进行快速查找,然后在每个页面请求中记录一些属性。我在世界各地有多个 EC2,每天帮助处理超过 6 亿个请求。这个想法是我记录数据并每小时转储一次,以供其他机器处理。每台机器每天处理大约 20M。我尝试了一些数据存储,一些注释如下:

MySQL

  • 使用小时表获取数据,因此专门针对 2012 年 9 月 5 日上午 11 点写入 log_2012_09_05_11。
  • 使用临时存储
  • MyISAM 已证明对我来说比 innodb 更快。我玩过缓冲池,我似乎总是用 myisam 获得更好的性能。在这里也接受有关调整的任何建议,但查询速度很快。 Myisam 锁定时间非常短。
  • 我使用 xdebug 分析了代码,在高负载下,98% 的时间都花在了连接 mysql 上。然后,通过使用 mysqli 的持久连接,我能够获得更好的性能。
  • 最大 ~2200 rps,之后网关超时和缓慢响应
  • 服务器负载最大 1 或 2(8 核机器)

Redis

  • 我真的认为这会很棒,但 php 似乎是瓶颈。
  • 最大 ~5-600 rps
  • 这是通过写入像“log_2012_09_05_11_12345”这样的 key ,12345 来自 INCR 计数器每小时。
  • 每 15 分钟保存到磁盘一次(如果我没记错的话,操作大约需要 2 分钟)

我实际期望从这台 EC2 机器和 100% 写入场景中每秒发出多少请求?我是否受 EC2 的磁盘性能或 php 或 mysql 的约束?我能否将它配置为使用更多 CPU 或更好地利用它正在使用的资源?

PHP-FPM http://pastebin.com/raw.php?i=9n2cpqrq

NGINX (nginx.conf) http://pastebin.com/raw.php?i=XuVBKr8m

最佳答案

我真的认为您需要考虑将架构组件拆分到不同的系统上。例如,您注意到您正在临时存储上运行 MySQL。这对 MySQL 来说似乎很奇怪,因为您的数据很容易丢失。您是否考虑过使用 Amazon RDS?

此外,您考虑将 ElasticCache 或 SimpleDB 作为您的键值存储,而不是 REDIS。

我想我的主要观点是,如果您要处理大量请求,您确实应该将服务堆栈分解为多个层,这些层可以相互独立扩展。

关于mysql - 为 EC2 上的高流量调整 php-fpm、nginx、mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12285797/

相关文章:

php - JQuery td 内联编辑 -> 输入后转到下一个编辑单元格?

mysql - 顺序数据的数据库

regex - 匹配 URL 的路径,减去文件扩展名

nginx - 使用 Nginx RTMP 模块的 HLS 不起作用

django - docker nginx无法与Web容器建立连接

python - 我无法在 Django 1.5.4 和 Ubuntu 13.04 EC2 中安装 django-tracking

php - 如何在magento扩展中创建Mysql表?

mysql - 德尔福ZEOSlib : read from a table and write it to another database

amazon-web-services - 没有持续警报的AWS EC2自动扩展?

amazon-web-services - 使用根 key 从 AWS cli S3 cp AccessDenied