一个使用 PHP 的网站有非常大的流量,比如每秒 5000 个请求。这些请求中的每一个都尝试记录数据,但记录到一个文件中。由于在任何时间点只有一个请求可以写入文件,因此另一个请求排队,这会影响整体响应时间。数据需要记录,这很重要。我该如何优化这个场景。
最佳答案
我看到两个选项。
因为您的要求是写入一个大日志文件,而不是其他地方。您可以让 PHP 脚本首先将这些条目记录到队列中。您可以使用许多消息队列平台,例如 RabbitMQ 或 ActiveMQ。假设这些日志条目不是大负载,您的用户请求导致进入日志可以被定向到将消息插入队列。您将有另一个后端进程(可能是一个 php 脚本?),它将简单地监听队列并不断地写入日志文件。这里详细解释了客户端如何使用队列消息(https://www.rabbitmq.com/tutorials/tutorial-one-php.html)
您还可以使用类似 Apache Log4php 的工具这是一个使用文件追加机制的日志记录框架。只需调用一个方法,您就可以轻松推送对您重要的信息。
$logger->info("这是要记录的信息。");
他们应该处理登录到同一文件的多个请求的复杂性。您甚至可以让他们按天分解文件等。
希望这对您有所帮助!
关于php - 如何优化多个进程试图写入同一个日志文件的过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38707001/