在EC2上调整php-fpm,nginx,mysql以获得高流量

时间:2012-09-05 16:24:00

标签: mysql nginx amazon-ec2 redis php

我希望在EC2上优化我的设置。 CentOS 6,nginx 1.0.15,php 5.4.4,php-fpm,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帮助每天提供600M +请求。我的想法是我记录数据并按小时转储以供其他一些机器处理。每台机器每天处理约20M。我尝试了一些数据存储,一些注意事项如下:

的MySQL

  • 使用每小时表来获取数据,所以在上午11点的时候专门为2012年9月5日写入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”这样的密钥,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

2 个答案:

答案 0 :(得分:0)

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

此外,您还没有考虑使用REDIS来为您的Key-Value商店考虑使用ElasticCache或SimpleDB。

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

答案 1 :(得分:0)

有关性能的一点要提及,请不要使用EBS驱动器,除非作为RAID并具有专用吞吐量。与短暂相比,他们真的很糟糕。我使用hi1.4xlarge作为数据库及其在SSD上的短暂驱动器。