我们在 AWS 上设置了包含 2 个 Web 服务器、一个 RDS MySQL 集群和一个负载均衡器的服务器。Web 服务器运行 PHP 和 Nginx,每个服务器包含多个服务。
我们有一个管理实体的服务,我们称之为服务 A,然后有一个管理身份验证的服务,服务 B
如果我们将负载放在服务 A 上,未经身份验证,它每秒会管理 400 个请求,然后 nginx 会因为负载过高而开始丢弃连接。(这就是我们想要的)。
但是,我们需要服务 A 才能与服务 B 进行身份验证。
如果我们添加此调用并尝试再次对服务 A 施加负载,我们现在可以每秒获得约 20 个请求,然后服务会停止响应。
该点之后的所有请求都积压了,我们可以在日志中看到,服务 B 对于每个请求在 900 秒后超时,然后服务 A 也会超时。
(在某些情况下,PHP-FPM 崩溃并且服务立即以 502 错误网关响应)。
我们已经将问题归结为服务 A 和服务 B 之间的通信问题。我们使用 Guzzle(基于 Curl 的通信框架)来发送请求,并确保两个服务都在本地主机上,并且 curl 请求是向本地主机发出的。
我们可以看出,DB 服务器使用了大约 1.5% 的 CPU(所有内容都在查询缓存中),而 Loadbalancer 使用了大约 1% 的 CPU。
唯一承受压力的服务器是网络服务器。
我们对此很迷茫,所以任何指点......