我希望在云中构建一个基于Akka的应用程序,对于我正在引导的车库初创公司;根据应用程序的性质,它是半状态的,尽可能高速缓存在RAM中以提高性能。 (它会容忍被定期关闭和重新启动,但我们希望主要通过Actors中的缓存信息进行操作。)
该体系结构是为服务器集群设计的,必要时在它们之间进行通信,以便节点A上的用户会话可以在适当时查询节点B上的中间件Actor。所以我的问题是,CloudBees有多难?
我从this page的理解是,目前还没有自动目录服务来管理这种群集内通信,但我可能会接受这种情况 - 更糟糕的是,我应该能够管理通过数据库发现,每个节点在出现时都会注册,并与其他节点进行多对多的通信。
但我想检查的是,这种沟通很简单。每个节点是否都有一个可靠的本地IP,它可以通告其他人与之联系,这在应用程序运行期间至少是稳定的?或者是否有另一种/更好的方法让节点将其地址通告给运行此应用程序的其余节点?
(我假设应用程序的节点都共享同一个数据库实例。)
非常感谢任何指导。我想尽快选择一个托管服务提供商,并继续回到CloudBees作为最有希望看的选项......
答案 0 :(得分:4)
目前对彼此沟通的实例没有任何限制 - 诀窍在于发现会员资格。有一个api将很快发布,允许您跟踪成员资格 - 但目前,以下可能有效:
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接口的离散端口?