4

我正在用 Akka 编写一个分布式研究应用程序,使用一个简单的主节点和多个工作节点拓扑,目的是部署到内部节点集群或企业云中。(当 Akka 2.1 可用时,我会考虑使用集群支持)

我的问题: 将我的代码(以包含 Akka 微内核的文件夹的形式)部署到每个节点上,启动它,让它做它的事情,然后拆除并根据需要重复的最简单/最好的方法是什么?

  • 每个工作节点的微内核目录和可执行文件都是相同的,并且只有几 MB。Config 包含他们将连接到的 master 的 IP。
  • 我打算手动启动master。
  • 弹性不是问题,因为这不是关键业务应用程序,而是私人研究问题。
  • 没有重要的数据存储在本地给工人。
  • 应用程序完成后,我可能想重新部署一个不同的应用程序而不拆除节点(例如,改进了代码库)。

更新:发现 Condor 节点支持在整机模式下运行的作业。这应该支持将微内核作为作业运行,并且只需要确保工作人员在完成后正确退出。

更新 2:有人提到 Zookeeper 可能很适合这个。希望有经验的人提供意见。

4

1 回答 1

2

这里有一些想法。我没有使用 Akka 的经验,但我知道网格计算和部署。

  1. 使用现有的网格工具,例如http://www.gridgain.com(具有 GPL 版本)。我也听说有人用http://www.hazelcast.com/建立一个网格

  2. 使用云盒,如 Airframe,http: //www.pistoncloud.com/press-releases/piston-cloud-launches-free-openstack-distribution/ 。我敢肯定肯定还有其他人。

  3. 我相信 Airframe 带有 Cloud Foundry,但您可以直接使用它:https ://micro.cloudfoundry.com/但不确定该版本如何扩展。

  4. 滚动您自己的系统,安装到一个 VM 映像中,然后将其克隆到您的其他节点上。

当涉及到自己滚动时,您可以按如下方式进行,这与我已经开发并且运行良好的东西非常相似。

  • 使用 Maven 构建您的应用程序,使用您喜欢的任何库。

  • 将构建的二进制文件推送到 Sonatype Nexus。

  • 构建一个自定义启动器,它给定一个模块的 maven 坐标可以运行它。我的 laucher 首先检查本地 maven 存储库中的 jar,如果它们不存在,那么它会从 nexus 下载它们。然后它构造传递依赖树中所有 jar 的类路径。然后它使用新的类路径创建一个新的类加载器,并通过类加载器启动主类。

  • 使用 java-service-wrappe 或类似方法编写一个服务,在启动时通过读取一些 maven 坐标和 config.xml 中的主类的名称来检查要运行的代码版本。Config 可以是网络驱动器上的文件、预配置的 URL,甚至是 zookeeper。然后它将它传递给下载并运行代码的启动器。

  • 手动或通过克隆 vm 将此服务安装到多台机器上。

  • 利润!

我没有特别提到 Akka,因为您的大部分问题似乎是如何让代码在多个节点上运行。

自定义路由对我来说效果很好,但是我只有几台服务器使用它,我所有的适当网格计算都是在数据突触中完成的。但我确实想知道我是否要重新开始这些开源 PaaS 中的一个是否适合。

于 2012-08-30T08:26:17.317 回答