我有一个应用程序处理目录中的文件并将它们与处理后的输出一起移动到另一个目录。没什么特别的。引入了一个有趣的需求:经典文件系统问题 - 目录上的并行远程处理
通过允许多个远程实例在同一文件存储上工作来实现容错和处理吞吐量。
其他注意事项是我们不能假设文件系统,因为我们同时支持Windows和NFS。
当然,问题是,我如何确保不同的实例不尝试和处理相同的工作,可能会破坏工作或降低吞吐量?文件锁定可能会产生问题,特别是跨网络共享。我们可以使用更复杂的方法,如简单的数据库或消息传递框架(la JMS或类似的方法),但是整个集群需要具有容错能力。由于它引入了单点故障,我们不能拥有一个数据库或消息传递提供程序。
我们已经实现了一个解决方案,该解决方案使用多播消息来自我发现处理实例并选择分配工作的主管。如果主管倒闭并进行另一次选举,则有超时。然而,我们的网络库并不是非常成熟,而且我们的消息实现很笨拙。
但是,我的直觉告诉我,有一种更简单的方法。
的思考?
有趣的想法,但我最初想知道如果你关于假定重命名的声明是原子的是真的。为什么假设这是安全的?我们试图覆盖的情况是通过NFS运行的;它的缓存在过去引起了我们的问题。 如果我们同时重命名a-> b和a-> c操作,那么什么机制可以保护我们免受这两个b&c的影响? – 2009-07-13 18:49:14