【问题标题】:Java distributed systemJava分布式系统
【发布时间】:2011-11-05 20:41:18
【问题描述】:

我正在开始我的最后一年的计算机科学项目,我正在努力弄清楚我的第一步。更多详情可以前往项目page

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

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

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

问题:

  1. 我提出的挑战听起来像是一个反思挑战,这是正确的吗?
  2. 您对如何实施它有任何初步提示吗?

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

  1. 您认为哪组库可以帮助我完成这项任务?请记住,我是一名计算机科学专业的学生,​​所以开箱即用的完整解决方案不会被我的教授所接受。
  2. RMI 已经过时了,还有更好的解决方案吗?
  3. 有任何关于 TRMI 的综合教程吗?

如果你觉得我的逻辑有些错误,请纠正它。

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

【问题讨论】:

  • RMI 是 Java 中进程间通信的默认设置。它是“旧的”,因为它从 Java 开始就已经可用和改进了——我宁愿称它为成熟的。根据您的要求/教授,您还可以尝试将您的解决方案建立在 Hadoop 之类的基础上,或者至少从那里获得一些灵感。
  • 如果它成熟了就好了。我只找到了关于它的非常旧的文档,所以从我的角度来看,我认为它并没有太大的发展。您是否有描述该库随时间发展的链接?
  • RMI(远程方法调用)不是库。它是某种技术,是 JRE/JDK 的一部分。
  • @qballer RMI 没有官方历史,因为它确实是 JRE/JDK 的一部分,就像 Andreas 指出的那样——RMI release notes 详细介绍了 Java 1.2.2 之前的主要添加/更改。

标签: java distributed-computing


【解决方案1】:

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

至于沟通,有很多选择。您可以考虑的一件事是使消息传递同步还是异步。同步消息传递(如 RMI)并没有错,但您可能希望寻找异步解决方案,因为它们最近应该是“热门”的。或者你可以在 HTTP 或类似的东西上使用你自己的协议。

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

【讨论】:

  • 使用我写的 URLClassLoader Wrapper 加载我的代码,所以我选择你的答案。
【解决方案2】:

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

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

远程方法调用

使用 RMI,我们通常有以下场景:客户端想要调用一个远程方法。客户端知道接口和服务器地址。服务器具有该接口的实现。现在客户端联系服务器并调用该服务器上的方法。

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

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

public Result process(String javaSource, Data data);

【讨论】:

  • 感谢您的详细回答。关于您提供的术语更正,我同意他们的看法。只是为了澄清我的意思是,由客户端发送并由用户编写的代码将实现我编写的接口。我想创建一个该实现的对象(在服务器上)并使用接口来运行算法。你能提供更多关于如何做到这一点的细节吗?我称之为反射。
【解决方案3】:

还请查看基于 SOAP 的 Web 服务。MTOM 提供了一种更有效地传输二进制内容的方法。

谢谢..

【讨论】:

  • 简单对象访问协议,确实如此。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-02
  • 1970-01-01
  • 2023-01-05
  • 2020-08-05
  • 2011-02-26
  • 1970-01-01
相关资源
最近更新 更多