分布式系统,最佳框架是什么?

5
我正在开发一个软件程序,遵循以下场景:
我有许多计算机,并将它们添加到一个集群中。集群中的每台计算机都可以向分布式表(字典、哈希映射表,应该足够快)中添加文件。
现在,我有了一个地方,每个人都可以看到群组/集群包含哪些文件。现在,来自群组/集群的计算机请求文件。它可以从分布式表中访问有关文件的所有信息(可以在哪台计算机上找到文件等等...)。
通过某种机制,它应该将文件从B点(拥有文件的计算机)传输到A点(请求文件的计算机)。
基本上,它应该进行数据复制。(但是对于非常大的文件)
所以你可能会想,这个人在问什么,这就是:数据复制应尽可能快。最好的方法是什么?我想到了类似于flux网络的东西。
按照这个场景,使用什么框架最好?
我正在寻找一个Java框架 :). (我需要跨平台运行)
谢谢!

如果您已经找到了解决方案,请不要忘记点赞并将问题标记为已回答! - Martin K.
尝试使用Atomix或Apache Helix。Atomix易于使用且非常API友好。Helix学习难度较大,但提供了更精细的节点生命周期控制。 - linehrr
4个回答

4

我相信你已经发现了有很多Java库可以让你实现这种分布式映射。

  • Hazelcast - 新生代,非常简单易用,并提供了标准Java接口的实现,如ConcurrentMap
  • JGroups - 真正只是组消息的库,但包括一个DisturbutedHashMap实现
  • jBoss Cache - 在JGroups基础上构建,提供了一个更完整的分布式缓存系统,可选择性地支持持久化和事务
  • Terracotta - 大型且非常流行,商业支持
  • Oracle Coherence - 最重要的,价格也相应昂贵

还有更多(相当多),我目前个人偏好Hazelcast,因为它非常容易入门。我列出的所有缓存框架(我认为)都依赖于能够(至少暂时)将整个条目加载到内存中,如果您尝试将大型文件的内容放入其中,则可能会有问题。

在您的情况下,我可能会使用分布式映射来存储位置数据,即一些数据告诉任何其他节点某个文件的位置,然后使用一些超出限制的方法(例如HTTP)直接访问该节点。


1

JXTA是Sun的Java点对点框架,很可能在这里有用。

或者查看Jini及其服务租赁、动态发现和协议无关的客户端/服务器通信能力。使用Jini,您可以发布具有特定属性的每个服务(在这种情况下是您的文件名?),或者也许将其与Javaspaces一起使用(我不确定空间的适用性如何)


是的,它是点对点的,但我不想实现分布式数据结构。 - Bob Esposito
请注意,您的数据结构报告机器B有一个文件,但是当机器B宕机时会发生什么? - Brian Agnew
我找到了一个框架,它叫做JGroups。你听说过吗? - Bob Esposito
是的。它是一种可靠的多播机制。如果我没记错的话,就只有这些了。 - Brian Agnew
是的,这是一个问题。我正在尝试寻找解决这种问题的方法。:( 不幸的是,相关文献非常广泛且不规范。 - Bob Esposito
为了复制该文件,我需要一个多播系统吗? - Bob Esposito

0

我会更仔细地看一下。这是我的选择之一。 - Bob Esposito
由于Hazelcast具有“store()”等持久性功能,因此它也是一个选项:http://code.google.com/docreader/#p=hazelcast&s=hazelcast&t=hazelcast非常容易使用! - Martin K.

0

针对分布式哈希表,上面已经有一些不错的回答了。

如果可能的话,我更愿意使用某种共享存储解决方案,而不是复制文件。如果您必须为每台计算机使用单独的磁盘,则可以使用一些简单的东西,例如在每台计算机上设置FTP服务器。这不一定要基于Java,但如果您想要一个纯Java的解决方案,那么像Apache MINA这样的东西可能会有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接