我需要设置一个 api 应用程序来收集要在推荐引擎中使用的事件数据。这是我的设置:
- 具有负载均衡器和自动缩放组的 Elastic Beanstalk 环境。
- 我有 2x t2.medium 实例在负载均衡器后面运行。
- EBS 配置为 64 位 Amazon Linux 2016.03 v2.1.1 运行 Tomcat 8 Java 8
- 此外,我有 8 个 t2.micro 实例用于高负载测试 api,每秒发送数千个请求以由 api 处理。
- 我使用 Locust ( http://locust.io/ ) 作为我的负载测试工具。
- Locust 运行的每个 t2.micro 实例最多可以发送约 500req/sec
当请求/秒低于 1000,可能是 1200 时,一切正常。一旦超过,我的负载均衡器报告它背后的一些实例报告 5xx 错误(附加)。我还尝试使用负载均衡器后面的 4 个实例,虽然开始时速度高达 3000req/sec,但不久之后,ebs 运行状况工具和 Locust 都报告 503 和 504,而所有实例都处于完美运行状态根据 ebs Health Overview 中的实际数字,显示 CPU 利用率仅为 10%-20%。
我在配置环境时缺少什么东西吗?似乎无论我在负载均衡器后面有多少台机器,环境每秒处理的请求都不超过 1000-2000 个。
编辑:现在我确定是 ELB 导致了问题,而不是实例。
我对 10 个模拟用户进行了负载测试。每个用户发送约 1 个请求/秒,负载增加 10 个用户/秒到 4000 个用户,这应该等于大约 4000 个请求/秒。它似乎仍然不喜欢任何超过 3.5k 请求/秒(附件1 )的请求率。
正如您从附件2 中看到的,负载均衡器后面的 4 个实例运行状况良好,但我仍然不断收到 503 错误。这只是负载平衡器本身造成的问题。看看 SurgeQueueLength 和 SpilloverCount 如何在某个时候迅速增加。(附件3)我试图找出原因。
此外,我完全移除了负载均衡器,仅使用一个实例进行了测试。它最多可以处理大约 3k req/sec。(attachment4和attachment5),所以它绝对是负载均衡器。
也许我错过了负载均衡器默认具有的一些关键限制,例如 1024 的队列大小?1 个负载均衡器的正常处理速率是多少?我应该添加更多负载均衡器吗?它可能与可用区有关吗?来自一个区域的 ELB 侦听器正在尝试路由到来自不同区域的实例?
更新:启用跨区域负载平衡