针对 50-100k 用户的 Httpd 服务器优化

针对 50-100k 用户的 Httpd 服务器优化

我目前有一个 AWS EC2 实例,m5.24xlarge它具有:

  • 96 个虚拟 CPU
  • 384 内存
  • 25 英镑网络

我们目前预计在线并发用户将超过 50,000 名,我在 cloudflare 上添加了一个层,但问题是我一直使用server reached MaxRequestWorkers setting, consider raising the MaxRequestWorkers settingapache error_log

为了处理这种流量,apache 的最佳设置是什么?

答案1

恐怕你做错了。你应该运行一个大型实例,而不是运行一个大型实例运行一组较小的实例负载均衡器后面。例如替换m5.24xlarge24 x m5.xlarge,理想情况下自动伸缩组竞价实例以节省成本。

部分原因如下:

  • 如果您的大实例发生故障或需要维护,您的整个网站都会瘫痪。如果其中一个小实例发生同样的情况,您只会损失 1/24 的容量。

  • 当流量发生变化时,您可以添加或删除容量,例如在周末或夜间需求较少时自动关闭某些实例。为您节省资金。

  • 您可以自动恢复失败的实例,可以使用现货实例来节省更多资金等等。

话虽如此,你可能需要稍微重新设计一下你的应用程序。例如,如果数据库当前正在同一实例上运行,您必须将其移动到AWS Aurora以便所有实例都可以使用它。

同样适用于文件系统- 如果你的应用在本地存储用户数据,你可能需要引入共享文件系统,例如AWS EFS - 弹性文件系统

虽然需要做一些工作,但水平扩展带来的巨大好处(添加更多较小的工人来完成工作)与垂直方向(使单个工人越来越大)。

希望有帮助:)

答案2

事实上,在非常大的 Web 服务器实例上进行扩展是可能的。

正如 httpd 的警告所暗示的,您需要调整 MPM。首先选择一个 MPM。event 很好而且性能很好,但根据您的模块,您可能需要 prefork。

MaxRequestWorkers以前称为 MaxClient。根据内存允许的程度尽可能增加此值。以简单的程序为例如何计算apache中的MaxClient值? 假设可以使用 350 GB 内存,其余用于操作系统和其他开销。除以 中的每个进程 RSS top。假设它是 50 MB,结果将超过 7000。这是您对 的第一个猜测MaxRequestWorkersServerLimit也需要大于此,请尝试 10000。

观察负载下的用户响应时间以了解其表现。 50,000 个并发用户可能不需要那么多工作人员来继续处理请求,但它根据应用程序的不同而有很大差异。

在密切关注事态的同时,规划下一次调整实验。也许增加ThreadsPerChild将允许更少的进程数,从而减少相应的内存使用量。

50k 超过了更多操作系统上的默认临时端口范围。如果您的所有流量都来自同一个负载均衡器 IP 和端口,请寻找绕过该问题的方法。

相关内容