应用中的Cloudbees实例可以直接通信吗?

时间:2012-10-26 21:18:29

标签: cloudbees

我希望在云中构建一个基于Akka的应用程序,对于我正在引导的车库初创公司;根据应用程序的性质,它是半状态的,尽可能高速缓存在RAM中以提高性能。 (它会容忍被定期关闭和重新启动,但我们希望主要通过Actors中的缓存信息进行操作。)

该体系结构是为服务器集群设计的,必要时在它们之间进行通信,以便节点A上的用户会话可以在适当时查询节点B上的中间件Actor。所以我的问题是,CloudBees有多难?

我从this page的理解是,目前还没有自动目录服务来管理这种群集内通信,但我可能会接受这种情况 - 更糟糕的是,我应该能够管理通过数据库发现,每个节点在出现时都会注册,并与其他节点进行多对多的通信。

但我想检查的是,这种沟通很简单。每个节点是否都有一个可靠的本地IP,它可以通告其他人与之联系,这在应用程序运行期间至少是稳定的?或者是否有另一种/更好的方法让节点将其地址通告给运行此应用程序的其余节点?

(我假设应用程序的节点都共享同一个数据库实例。)

非常感谢任何指导。我想尽快选择一个托管服务提供商,并继续回到CloudBees作为最有希望看的选项......

1 个答案:

答案 0 :(得分:4)

目前对彼此沟通的实例没有任何限制 - 诀窍在于发现会员资格。有一个api将很快发布,允许您跟踪成员资格 - 但目前,以下可能有效:

  • 要获取端口,请查看$ PWD / .genapp / ports中的文件名(因为应用程序可以有多个端口) - (例如System.getenv(“PWD”)+“。genapp / ports” - 列出该目录中的文件 - 通常只有1 - 文件名是端口)。还有其他方法 - 例如JVM应用程序上的“sun.java.command”系统属性。
  • 主机名可以通过常用方式获得(例如InetAddress.getLocalHost()。getHostName()):这个主机 name将是私有名称 - 即它将解析为私有IP - 适合节点到节点的通信。
  • 公共IP /主机名:执行HTTP get(从服务器)到以下URL: http://instance-data/latest/meta-data/public-hostname(只会 当然,返回服务器端的公共IP。)

(见http://developer-blog.cloudbees.com/2012/11/finding-port-or-address-of-your.html

然后,正如您所说,在启动时,您可以使用DB注册相应的端口/私有主机名,然后在每个节点上读取它以“播种”群集(akka不必了解所有成员 - 只是足够的种子)我认为2阶段启动:1:注册主机/端口,2,寻找其他成员,将它们作为种子成员添加到本地Akka配置(可能需要定期执行相同的一段时间,作为其他节点启动 - 确保它足够播种)

从我在这里阅读Akka设置:http://doc.akka.io/docs/akka/snapshot/scala/remoting.html

看起来您可以指定端口 - 如果可能,我会将其设置为app_port环境变量 - 这意味着每个节点都可以通过私有主机名与该端口进行通信。然而,http流量也将被路由到它 - akka也可以处理它 - 或者它是否需要为akka和另一个用于任何http接口的离散端口?