2012-10-26 58 views
1

我正在寻找在云中建立一个基于Akka的应用程序,用于我正在引导的车库启动;根据应用程序的性质,它是半状态的,尽可能地缓存在RAM中用于性能。 (它可以定期关闭和重新启动,但我们希望主要通过Actors中的缓存信息进行操作。)Cloudbees应用程序中的实例可以直接通信吗?

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

我从this page不解的是,有没有自动目录服务来管理这种群集内通信的,但我可以说大概住 - 损坏程度较重,我应该能够通过管理发现DB,当每个节点出现时就注册自己,并打开与其他人的多对多通信。

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

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

这里任何指导,将不胜感激。我很快要选择托管服务提供商,并继续返回CloudBees作为最有希望的选项...

+0

我应该注意到:这可能看起来像一个愚蠢的问题,但Heroku用流程隔离这个名字来达到这样的难度,我不得不将它作为一个平台来消除。我不希望任何给定的VM始终可靠地运行,但是我确实需要我的群集能够像群集一样运行...... –

+0

最好的办法是使用此问题来ping销售-at- cloudbees.com 。 –

回答

4

当前对实例彼此之间没有任何限制 - 诀窍在于发现成员资格。还有的是,不久将发布一个API,让您跟踪的成员 - 但现在,下面可能工作:

  • 要获得端口,看看$ PWD文件名/ .genapp/(例如System.getenv(“PWD”)+“.genapp/ports”) - 列出该目录中的文件 - 通常只有1个 - 文件名是端口)。还有其他方法 - 例如JVM应用程序上的“sun.java.command”系统属性。
  • 主机名可以通过惯用的手段来获得(例如,InetAddress.getLocalHost()的gethostname()):该主机 名称将是专用名称 - 即它会解析为私有IP - 好节点到节点通讯。
  • 公共IP /主机名:(从服务器)执行HTTP GET到以下网址: 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接口?

+0

我想我们会在这里通过电子邮件聊天,但是谢谢 - 这是令人鼓舞的。不确定HTTP流量的问题;我们可能不得不尝试一下,看看... –

相关问题