0

现在有一个系统可以在数据包捕获文件进入时将它们写入本地磁盘。出于容错的原因,将这些文件作为第一步删除到本地磁盘被认为是可取的。如果客户端死机并需要重新连接或在其他地方启动,我们享受从磁盘重播的能力。

数据管道的下一步是尝试将这些登陆到磁盘的数据发送到远程客户端。假设有足够的磁盘空间,我觉得使用本地磁盘(以及它上面的页面缓存)作为持久的无限先进先出非常方便。还希望使用文件系统来保持生产者和消费者之间的低耦合。

在我的研究中,我没有找到很多关于这种架构的指导。更具体地说,我还没有在流行的开源库/框架中看到用于在文件被写入流式传输时读取文件的成熟模式。

我的问题:

  1. 这个架构中是否存在我没​​有注意到或间接淡化的缺陷?

  2. 是否有建议在写入文件时使用它,并在文件中有更多可用数据时有效地阻止和/或异步通知?

  3. 目标是显式或隐式地让消费者从页面缓存温暖中受益。有没有关于如何优化这个的建议?

4

1 回答 1

0

基于文件的解决方案听起来很笨拙,但可以工作。类似于tail -f它是如何做到的:

  • read文件直到 EOF,但不关闭它
  • 设置一个 inode 监视(使用inotify),等待更多写入
  • 重复

困难通常在于文件轮换和清理,即您需要注意新文件和/或截断。

话虽如此,直接连接到数据包捕获接口或设置客户端可以订阅的队列可能更有效。

于 2020-03-14T16:55:51.017 回答