0

我有 8 个由 NGINX 和 PHP 提供支持的负载平衡 Web 服务器。这些 Web 服务器中的每一个都将数据发布到中央 MySQL 数据库服务器。他们 [web 服务器] 还将相同的数据(尽管稍微格式化)发布到单独的日志服务器(逐行)中的文本文件中,即一个数据库插入 = 日志文件中的一行。

执行日志记录的 PHP 文件的活动代码如下所示:

file_put_contents(file_path_to_log_file, single_line_of_text_to_log, FILE_APPEND | LOCK_EX);

我遇到的问题是将其扩展到每秒 5,000 条左右的日志。该操作需要几秒钟才能完成,并且会大大降低日志服务器的速度。

我正在寻找一种方法来显着加快速度。我查看了以下文章:Performance of Non-Blocking Writes via PHP

但是,从测试来看,作者似乎可以在写入之前访问所有日志数据。就我而言,每次写入都是由 Web 服务器随机启动的。

有没有办法可以大大加快 PHP 的写入速度?!或者我应该只登录到数据库表,然后以定时的时间间隔将数据转储到文本文件?!

仅供参考:我没有在传统的“日志记录”意义上使用上述文本文件……文本文件是一个 CSV 文件,我稍后将提供给 Google BigQuery。

4

1 回答 1

1

由于您将所有日志写入单个服务器,您是否考虑过将日志服务实现为简单的套接字服务器?这样,您只需在服务启动时打开日志文件一次,并在日志条目进入时将其写入。您还将获得 Web 服务器客户端无需等待此操作的额外好处完成...他们可以简单地连接、发布数据和断开连接。

于 2013-06-11T22:25:15.053 回答