部署在 EFS 上的 Nginx 和 PHP-FPM - 提高性能

Posted

技术标签:

【中文标题】部署在 EFS 上的 Nginx 和 PHP-FPM - 提高性能【英文标题】:Nginx and PHP-FPM deployed on EFS - Improve performance 【发布时间】:2022-01-14 08:13:03 【问题描述】:

我在 EKS 集群中运行一个应用程序,我有 nginx pod 和应用程序 pod(php5.6-fpm,laravel 框架)。 应用程序文件位于 EFS 上,EFS 挂载到 EKS 集群和 Pod。我使用了不同的 EFS 配置,甚至预置了 50mb IOPS,但有时我看到性能下降。加载页面有时需要 5 秒,有时需要 1 秒。

如果有人有经验,有几个问题。您认为将文件保存在 EFS 上是个好主意吗?有什么方法可以提高我当前设置的整体性能?

您能否推荐 EFS 以外的任何其他解决方案?我需要运行多个 nginx 和应用程序 pod,并在理想情况下共享代码库,而不是在每个 pod 中复制相同的文件。

【问题讨论】:

...sometimes I see performance degradation - 您能否详细说明您如何衡量与页面加载时间相关的 EFS 性能? @gohm'c 我正在运行 2 组我的应用程序,dev1 使用 efs,dev2 代码库存储在 pod 文件系统中,因此代码库不共享。我正在执行性能脚本,并且在 dev2 中的响应时间几乎每次都是一样的。但是 dev1 的响应时间更长,而且响应时间在跳跃。 您可以使用 cloudwatch 查找可疑延迟。在下面查看我的答案。 @gohm'c 是的,我们正在运行测试,发现 EFS 正在将性能降级到大约 300%。我们有一个大约 1.5 GB 的大项目,如果这个项目存储在 EBS 上,测试繁重页面的平均负载需要 1.3 秒。但如果它在 EFS 上,大约需要 4 - 4.5 秒。我们在多页上运行此测试,我什至提供了 100MB/s 的吞吐量,但 EBS 速度仍然快得多。看了很多文章,发现 EFS 不是存储大项目的好选择 【参考方案1】:

与您的 PHP 性能脚本一起运行,您可以测量 EFS throughput 以查看在 相对 加载时间方面是否有任何意外波动;并在适用的情况下调整为不同的performance modes。一个好的提示是在主机上调整为read_ahead_kb size。

【讨论】:

【参考方案2】:

在部署配置中添加一个前端 (Nginx) 缓存层对于缓慢的应用程序来说是一个很好的缓解措施。

性能瓶颈很可能是由特定的 PHP 应用程序引起的,而不是部署配置本身。尝试确定页面加载时发生的情况,涉及 CPU 处理、数据库/网络调用等。创建一个自定义 PHP 页面以对独立于应用程序的性能进行基准测试。

【讨论】:

以上是关于部署在 EFS 上的 Nginx 和 PHP-FPM - 提高性能的主要内容,如果未能解决你的问题,请参考以下文章

Amazon EKS 中 EFS 持久性存储

eks使用efs dynamic provisioning 创建非root容器提示 Operation not permitted

Jenkins ECS 和 EFS 出错

ECS Fargate 上的 EFS 挂载 - 非 root 用户的读/写权限被拒绝

ECS CLI - 启动容器实例时挂载 EFS

安装EKS EFS CSI在Pod出现之前已超时