【问题标题】:Synchronizing file processing threads across servers in linux在linux中跨服务器同步文件处理线程
【发布时间】:2015-09-09 14:49:10
【问题描述】:

我需要构建一个处理文件的 linux 服务/守护进程。这个守护进程很可能是多线程的,并且很可能在多个节点上运行。同步所有守护程序的线程以使没有两个线程处理同一个文件的最佳方法是什么?

我想到了几个想法,但想知道是否有更好的方法,因为我是 linux 新手。

  1. 创建一个目录结构,以便只有一个守护进程处理一个目录。守护进程本身应该能够轻松地同步其中的线程,这样就不会有两个线程在处理同一个文件。

  2. 使用 open() 和文件属性确定一些机制,这样一旦进程可以在文件处于某种状态时以独占方式成功打开文件,可能某些文件属性尚未设置,状态就会改变,通过更改某些文件属性,并且该守护程序可以处理该文件,而知道没有其他守护程序将处理它。

  3. 想出一个命名约定,使名称在某种程度上均匀分布在某个数字名称中。然后可以将每个守护进程配置为处理一些模数。

示例:文件名 = 987654321

我们有一个守护进程在两个节点上运行。每个守护程序的配置将指示守护程序的数量以及守护程序应处理的模数。因此,一个守护进程将处理模值 0,而另一个将处理模值 1。

987654321 % 2 = 1,因此它将由处理模 1 的守护进程处理。

  1. 我想我们可以有一个单独的守护进程,它将工作分配给处理守护进程。处理守护进程可以通过某种 IPC 机制与这个我称之为“工作管理器”的单一守护进程进行通信。

谢谢, 尼克

【问题讨论】:

    标签: linux file daemon


    【解决方案1】:

    如果你要在 Python 中实现逻辑,你可以使用 python 的queue 类。 它设计用于在多个线程之间交换数据。

    您可以将文件和/或目录放入队列中,然后每个线程将访问队列并获取该文件。这样,线程将永远不会持有相同的对象。

    【讨论】:

    • 你需要一些好的 RPC 库。您可以检查 ZMQ 例如:zeromq.org
    • 我们不打算使用 python,但即使我们这样做了,我也不确定您的建议在多节点场景中如何工作。
    • 看起来,您要编写一种文件系统基准测试工具。您可以查看 Oracle 的 vdbench 的源代码。他们正在实施您正在谈论的想法,即处理来自多个主机的多个文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-20
    • 1970-01-01
    • 2018-11-19
    • 2015-09-21
    相关资源
    最近更新 更多