【问题标题】:Tuning php-fpm, nginx, mysql for high traffic on EC2为 EC2 上的高流量调整 php-fpm、nginx、mysql
【发布时间】:2012-08-30 10:19:33
【问题描述】:

我希望优化我在 EC2 上的设置。 CentOS 6, nginx 1.0.15, php 5.4.4 with php-fpm, xcache 2.0.0, mysql 5.5.24-55-log, redis 2.4.10, EC2 High Cpu XLarge (c1.xlarge 8 cores, 7G ram)对于高流量站点,写入每个请求。生成的网络请求非常小(javascript sn-p)。

基本上,它是一个 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”这样的键,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 nginx amazon-ec2 redis php


    【解决方案1】:

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

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

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

    【讨论】:

    • 该应用程序已经发展,所以现在有更多的传统架构 DB/Web 服务器等。仍然使用 Redis,但现在使用 node.js 效果更好。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-10-14
      • 2021-01-23
      • 2018-09-04
      • 1970-01-01
      • 1970-01-01
      • 2014-01-22
      • 1970-01-01
      • 2015-05-19
      • 2017-02-02
      相关资源
      最近更新 更多