在远程 API 回复后关闭和重新打开 mysql 连接



我正在处理一个需要一些远程API请求的后端应用程序,根据远程服务的负载需要1~3秒的响应时间。

这个后端将得到大量的请求/秒,我试图达到最好的性能,我可以从我的服务器。

我应该在调用API之前关闭mysql连接,并在收到回复后重新打开它以释放一些资源吗?

如果我这样做了,可能会发生什么错误?

如果无法再次连接,我该怎么办?

我必须在收到请求后存储和更新数据库。

我使用纯PHP MySQL (MySQLi)

如果你的应用程序必须执行一些与数据库无关的耗时任务,那么你应该关闭连接,这样你的PHP进程就不会阻塞MySQL服务器上的资源。

您可以在API调用结束后打开一个新连接。这样做的明显缺点是您将失去执行事务的能力。一个事务不能在两个独立的MySQL会话中保持打开状态。

一个更好的选择是将长时间运行的进程从主进程中分离出来。有许多方法可以实现这一目标。如果你可以在后台运行进程,那么这将是最好的选择。缓存长时间运行的进程也是一个可行的选择。如果用户必须等待整个作业完成,那么您可以采用2或3步流程。
  1. 用户向服务器发送请求。PHP代码执行一些DB操作并将用户重定向到第二步
  2. 另一个PHP进程调用API,只执行与API相关的逻辑。没有建立数据库连接。一旦完成,应用程序将用户重定向到最后一步。
  3. PHP应用程序执行另一组DB活动并向用户返回最终响应。

当然,使用如此复杂的操作,应用程序更有可能失去事务正确性,因此您必须评估所有优点和缺点。

最后一点。如果您的服务器设置正确,那么可用的PHP进程应该有相应数量的MySQL进程。这是为了确保如果您的PHP进程被100%利用,并且每个进程都需要执行一些数据库操作,那么您的MySQL服务器不应该成为瓶颈。在这种情况下,为什么不简单一点,在执行长时间运行的API调用时保持数据库连接打开呢?

最新更新