部署在 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 - 提高性能的主要内容,如果未能解决你的问题,请参考以下文章
eks使用efs dynamic provisioning 创建非root容器提示 Operation not permitted