【问题标题】:ELB, RDS mysql, EC2, NGINX where to look next for concurrency performance issuesELB、RDS mysql、EC2、NGINX 下一步在哪里寻找并发性能问题
【发布时间】:2012-07-02 09:37:05
【问题描述】:

设置:EC2 服务器在 ELB 后面自动扩展,连接到 RDS mysql 数据库,所有静态文件都从云端提供。

我在 EC2 服务器上运行 nginx 作为 Web 服务器,keepalive 设置为 20,工作进程 4,. Codeigniter 是后端并使用 codeigniter 会话。

我一直在运行许多基准测试来尝试测试性能、围攻、apache 基准测试、blitz.io。

我正在测试两个特定页面,第一个性能非常好,它使用 codeigniter 会话,因此会访问数据库以读取和更新 ci_sessions 数据库。第二页是我遇到问题的页面,它运行一个包含多个连接的查询,单个用户在大约 0.4 秒内完成。此查询已优化,我正在使用 InnoDB 表。在使用 c10 和 n1000 的 apache 基准测试下,100% 的请求会在 634 毫秒内返回。

当我运行并发用户数 > 200 时,我开始遇到问题。添加更多 EC2 服务器无济于事,CPU 的利用率约为 50%。 RDS 数据库监控也显示 CPU 和内存使用率低于 70%,平均 DB 连接数

通过迁移到大型 RDS 实例和大型 EC2 实例提高了性能,这让我想知道 I/O 是否在这里发挥作用。

如果我在负载测试期间启动 ELB 外部的服务器并点击此页面,它会在不到一秒的时间内返回,但如果我在 ELB 内启动另一台服务器,它最多会保持 4 或 5 秒。这表明我没有超载 RDS。

我尝试用 5 分钟的爆发来缓慢提升 ELB,但这似乎没有帮助。

我想知道下一步该去哪里寻找这个问题,无论是某种 I/O 问题还是其他问题,因为 RDS 和 EC2 服务器似乎没有发挥它们的能力。任何建议或想法下一步将不胜感激

【问题讨论】:

    标签: nginx amazon-ec2 amazon-rds amazon-elb


    【解决方案1】:

    好的。如您所知,这是一个非常广泛的主题。但我会尽力提供帮助。

    1. ELB 通常不擅长突发扩展。在与亚马逊工程师讨论过这个问题后,我发现他们实际上不会在爆发时扩展 ELB,因为这是不可能的。您需要随着时间的推移保持一致的负载才能扩大 ELB。因此,我切换到了 haproxy。除了 ELB 不会在突发负载上扩展之外,它还使用 CNAME 进行 DNS 查找,这也会影响您的性能。因此,如果您打算经常进行突发负载,或要求进行 DNS 查找,最好不要使用 ELB。

    2. RDS 是一个黑盒子。好吧,这并不完全正确,但总的来说,我会避免使用 RDS,除非我知道后端是一个易于扩展的简单设置。话虽如此,RDS 确实有助于扩展,但我会简化后端并确保您的查询快速运行。在常规 MySQL 实例上运行它,看看它是否是亚秒级的。根据我的经验,当您说查询是“优化的”时,这并不意味着如果您发现我的想法没有其他方法可以使其更加“优化”。

    【讨论】:

    • 谢谢,当它获得足够的代表时我会投票。真的很有趣,因为我刚刚查看了 haproxy 以及查询的优化,我确实设法进一步优化它并且它有很大帮助。我认为我们很快就会转向 scalr 并摆脱 RDS,但有用的是,目前 RDS 允许我在 dba 的方式上做的事情不多。
    猜你喜欢
    • 2012-03-02
    • 2012-07-28
    • 2010-12-07
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多