Java分布式系统

问题描述:

我开始了我的最后一年计算机科学项目,我试图找出我的第一步。欲了解更多详情,你可以去项目pageJava分布式系统

背景: 因为我在分布式系统方面的经验很少,所以基本上我应该怎么面对这样的挑战。我想到的是该系统应该如下工作:

客户端发出一个文件或一组包含要处理的代码的文件。该代码将实现由我编写的分布式算法接口,一个特定的类。服务器将从类中创建一个对象。该对象将负责要运行的算法。服务器将把结果返回给客户端。 (我后来实际上阅读了RMI,发现它非常相似)。

发送文件是基本的 - 通用网络I/O。 真正的问题是创建对象并将其用作运行时的预定义接口。

问题:

  1. ,我已经提出了类似的声音反映的挑战所面临的挑战,这是正确的吗?
  2. 你有关于如何实现它的任何第一提示?

寻找一些分布式系统java技术我遇到过RMI,TRMI,LINDA,CORBA,JINI等等。 RMI听起来最吸引人,因为它与我所收集的解决方案非常相似,但它也很古老。

  1. 你认为什么样的库可以帮我完成这个任务?请记住我是一名计算机科学专业的学生,​​所以完整的开箱即用解决方案不会与我的教授密切相关。
  2. RMI是旧的,有更好的解决方案吗?
  3. 关于TRMI的任何综合教程?

如果你发现我的逻辑有问题,请纠正它。

如果您有关于此主题的更多提示,您认为应该讨论,请随时与我联系。

+2

RMI是Java中进程间通信的默认值。这是“古老的”,因为它从Java开始就已经可用和完善 - 我宁愿将它称为成熟的。根据您的要求/教授,您也可以尝试将解决方案基于[Hadoop](http://hadoop.apache)。org /)或者至少从那里得到一些启发。 –

+0

如果它比成熟的成熟。我发现它只有非常古老的文档,所以从我的角度来看,我认为它没有多大发展。你有链接描述图书馆随着时间的发展? – qballer

+0

RMI(*远程方法调用*)不是库。这是某种技术,也是JRE/JDK的一部分。 –

你可以使用this example和发送类文件执行(你可以在类文件存储在磁盘上,然后使用URLClassLoader的加载它们。如果你不想在磁盘上写, McDowell有a suggestion)。

至于通信,有很多可供选择。你可以考虑的一件事是,让消息传递同步还是异步。同步消息(像RMI)没有什么问题,但是你可能想要寻找异步解决方案,以及最近它们应该是“热门”的。或者你可以在HTTP之上或者类似的地方使用自己的协议。

一个有趣的练习是在节点之间分配数据并针对这些分布式数据执行算法,然后合并结果。在这种情况下,用户将指定两种算法。一个生成数据,一个汇总结果。

+0

要使用URLClassLoader封装器加载我的代码,我写了这么一个选择,因此我选择了您的答案。 – qballer

没有足够的信息来推荐图书馆或技术。所以我想专注于你的问题的“更多的技巧”的一部分;)

  • 服务器发送一个文件 - 通常这是一个客户发送到服务器和请求服务器将创建一个响应。你应该遵循这个约定。我们不能执行文件。一个文件可能包含一些可以由解释器或计算机执行的脚本或二进制代码。挑剔的原因:你必须对文件内容做一些事情(解析,编译,解释,链接,...)
  • 文件将执行一个[...]接口 - 请参阅上文,文件不执行任何操作。
  • 客户端将运行接口 - 接口无法执行或运行。
  • 算法的结果返回给服务器 - 上面提到的一样:通常它是一个客户将文件(“请求”)发送到服务器。然后服务器将获取该文件,根据文件内容进行一些计算并将结果(“响应”)返回给客户端。

远程方法调用

有了RMI,我们通常有以下几种情形:客户想呼叫远程方法。客户端知道接口和服务器地址。服务器具有用于该接口的实施方式。现在,客户端联系服务器并调用该服务器上的方法。

对于您的项目,它看起来有点不同:我认为客户端有一个算法(java源文件或编译的类文件)的实现,并且想要将其发送到一个或多个服务器。服务器将处理该文件,执行某些输入的算法()并返回结果。

RMI 可能是文件传输的候选,但不适用于(算法)方法调用。远程方法可能看上去像(假设我们发送一个java源文件):

public Result process(String javaSource, Data data); 
+0

感谢您的详细解答。关于您提供的术语更正,我同意他们。为了澄清我的意思,由客户发送并由用户编写的代码将实现由我编写的界面。我想在该实现中创建一个对象(在服务器上)并使用该接口来运行该算法。你能提供更多关于如何做到这一点的细节吗?我认为是反思。 – qballer

请也期待在基于SOAP的Web服务.. MTOM提供了一种更高效的传输二进制内容。

谢谢..

+1

***简单***对象访问协议,的确如此。 – bdares

+2

SOAP不再是从1.2开始的缩写...谢谢... –