http请求后快速写入日志文件

2024-04-25 07:55:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前已经完成了一个Web服务器的构建,其主要职责是简单地获取每个httppost请求中的主体数据的内容并将其写入日志文件。post数据的内容在接收时被混淆。因此,我取消了post数据的混淆,并将其写入服务器上的日志文件。模糊处理后的内容是在每个请求之间不同的一系列随机键值对。它不是固定数据。在

服务器运行的是Linux 2.6+内核。服务器配置为处理大流量(打开的文件限制为32k,等等)。应用程序是用Python编写的,使用网页.py框架。http服务器是Nginx背后的Gunicorn。在

在使用apachebenchmark进行一些负载测试之后,我注意到它可以每秒处理大约600-700个请求,而不会出现任何日志写入问题。Linux本机在缓冲方面做得很好。在同一时刻尝试写入的问题多于在同一时刻写入的请求数。数据将无法写入,信息将丢失。我知道“直接写入文件”的设计从一开始就不是正确的解决方案。在

所以我想知道是否有人能提出一个解决方案,我可以在不改变太多基础设施和代码的情况下快速实现,从而克服这个问题?在

我读过像Redis这样的内存存储,但我意识到,如果服务器发生故障时数据存储在内存中,那么数据就会丢失。我在文档中读到redis可以被配置为一个持久存储,只要服务器上有足够的内存就可以了。这个解决方案意味着我必须编写一个脚本,以一定的时间间隔将数据从Redis(内存)转储到日志文件中。在

我想知道有没有更快的解决办法?任何帮助将不胜感激!在


Tags: 文件数据内存服务器redisweb内容linux
1条回答
网友
1楼 · 发布于 2024-04-25 07:55:57

我能想到的一个可能的选择是一个单独的日志记录过程。所以你的网页.py可以屏蔽性能问题。这是处理日志模块的经典方法。您可以使用IPC或任何其他总线通信基础设施。你可以解决两个问题-

  1. 对于高容量的呼叫流,日志记录不会成为一个巨大的瓶颈。在
  2. 单独的模块可确保/提供开关设备。在
  3. 因此,不会有任何巨大/显著的进程内存使用。在

但是,你应该记住以下几点-

  1. 您需要确保日志记录仅限于日志记录。它不能是用于业务处理的数据存储。否则,您的业务逻辑中可能存在许多同步问题。在
  2. 日志记录过程(这里我指的是实际的Unix进程)将变得非常关键而且稍微复杂(即您可能需要处理某种形式的IPC)。在

啊!在

相关问题 更多 >