如何优化多个进程试图写入同一日志文件的进程


How to optimize the process of multiple process trying to write to the same log file

一个使用PHP的网站拥有非常巨大的流量,比如每秒5000个请求。每个请求都试图将数据记录到一个文件中。由于在任何时间点,只有一个请求可以写入文件,所以其他请求会排队,这会影响整个响应时间。数据需要记录,这很重要。我该如何优化此场景。

我看到了两个选项。

  1. 因为您的要求是写入一个大型日志文件,而不是写入其他位置。您可以使用PHP脚本首先将这些条目记录到队列中。您可以使用许多消息队列平台,如RabbitMQ或ActiveMQ。假设这些日志条目不是大的有效负载,则可以引导导致日志条目的用户请求将消息插入队列。您将有另一个后端进程(可能是php脚本?),它将简单地侦听队列并不断写入日志文件。以下是关于客户端如何使用队列消息的详细解释(https://www.rabbitmq.com/tutorials/tutorial-one-php.html)

  2. 您还可以使用类似ApacheLog4php的东西,这是一个使用文件附加机制的日志框架。只需调用一个方法,就可以轻松地推送对您重要的信息。

    $logger->info("这是要记录的消息。");

它们应该处理多个请求登录到同一文件的复杂性。你甚至可以让他们按天分解文件等。

希望这能有所帮助!