Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java分布式系统_Java_Distributed Computing - Fatal编程技术网

Java分布式系统

Java分布式系统,java,distributed-computing,Java,Distributed Computing,我正在开始我最后一年的计算机科学项目,我正试图找出我的第一步。有关更多详细信息,请转到项目 背景: 因为我在分布式系统方面的经验很少,我基本上在想我应该如何面对这样的挑战。我想到的是,系统应按如下方式工作: 客户端发送一个文件或一组文件,其中包含要处理的代码。该代码将实现一个由我编写的分布式算法接口,一个特定的类。服务器将从类中创建一个对象。该对象将负责运行算法。服务器将结果返回给客户端。(事实上,我后来读到了有关RMI的文章,发现它非常相似) 发送文件是基本的-通用网络I/O。 真正的问题是创

我正在开始我最后一年的计算机科学项目,我正试图找出我的第一步。有关更多详细信息,请转到项目

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

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

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

问题:

  • 我提出的挑战听起来像是一个反思挑战,对吗
  • 你有没有关于如何实施它的初步建议 在寻找一些分布式系统java技术时,我遇到了RMI、TRMI、LINDA、CORBA、JINI和许多其他技术。RMI听起来最吸引人,因为它与我收集的解决方案非常相似,但它也很旧

  • 你认为哪套库可以帮助我完成这项任务?请记住,我是一名计算机科学专业的学生,所以完全的开箱即用的解决方案不适合我的教授
  • RMI很老了,有更好的解决方案吗
  • 有关于TRMI的全面教程吗
  • 如果你发现我的逻辑有问题,请改正


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

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

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

    远程方法调用

    对于RMI,我们通常有以下场景:客户机希望调用远程方法。客户机知道接口和服务器地址。服务器具有该接口的实现。现在,客户机联系服务器并调用该服务器上的方法

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

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


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

    谢谢..

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

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


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

    RMI是Java中进程间通信的默认值。它之所以“古老”,是因为它自Java诞生以来就一直可用并经过改进——我更愿意称之为成熟。根据你的要求/教授,你也可以尝试将你的解决方案建立在类似的基础上,或者至少从中获得一些灵感。我只找到了关于它的非常旧的文档,所以从我的角度来看,我认为它没有太多的发展。您是否有一个描述库随时间发展的链接?RMI(远程方法调用)不是库。这是某种技术,是JRE/JDK的一部分。@qballer RMI没有正式的历史记录,因为它确实是JRE/JDK的一部分,正如Andreas所指出的——详细的主要添加/更改可以追溯到Java 1.2.2.Simple Object Access Protocol,确实如此。感谢您的详细回答。关于您提供的术语更正,我同意他们的意见。我的意思是,由客户机发送并由用户编写的代码将实现由我编写的接口。我想创建该实现的一个对象(在服务器上),并使用该接口运行该算法。你能详细介绍一下怎么做吗?什么
    public Result process(String javaSource, Data data);