PHP 容器化引发线上 502 错误状态码的修复
最后更新时间 2023-01-24.背景笔者所在公司技术栈为 Golang + PHP，目前部分项目已经逐步转 Go 语言重构，部分 PHP 业务短时间无法用 Go 重写。相比 Go 语言，互联网公司常见的 Nginx + PHP-FPM 模式，经常会出现性能问题——特别是我们的活动业务，尽管底层用了鸟哥的 Yaf 框架，但由于业务逻辑繁重，即使框架层面上完全零损耗，常常支撑不了流量高峰。一旦某个时间段开启活动，虚拟机的扩容真的非常痛苦。SRE、开发、QA 三方经常需要因为某个运营活动的进行，提前压测预估容量。目前活动业务已经逐步用 Go 语言改造，此处不具体展开，防止跑题哈哈。正因为 PHP 虚拟机模式，每次扩容需要流量剔除、克隆、操作负载均衡、验证流量等等，推进 PHP 容器化就显得格外重要。公司在去年年中，已经开始进行 PHP 容器化，不过由于项目优先级以及人力原因，进度较为迟缓。事情经过某项目进行 PHP 容器化改造，切换少许流量到容器中逐步加大灰度流量某一天开发上线新功能，发现滚动部署过程中存在 502 错误分析原因nginx 发生了 502，很多时候是后端，也就是 php-fpm 不在工作。我们的 PHP 业务的 Pod，由以下 5 个容器组成：[...]