问题标签 [akka-cluster]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
akka - GridEngine 或 Akka
我正在构建一个依赖于第三方产品 (TPP) 执行的某些处理的应用程序。此 TPP 的分销商建议将其部署在 GridEngine 上(用于并行化等...)
这个 TPP 的接口将是一个基于 Scala 和 Akka 的 REST API。
假设处理类似于将处理移交给数据库或类似的 TPP,我是否能够完全使用 Akka 及其负载平衡、路由、集群和远程 Actor 功能而不是 GridEngine 来实现这种并行化?
我对 GridEngine 的理解是它提供了集群管理工具。它管理从站之间的负载,你交给它一个工作来完成,它分配给一个可用的从站。仅使用 Akka 就可以实现这一切吗?是否有任何特定的理由选择 GridEngine?
谢谢
scala - 如何将类作为参数传递给Scala中的实例化
我正在尝试使用 akka 集群( http://doc.akka.io/docs/akka/2.3.9/scala/cluster-usage.html )将 Akka 应用程序从单层重构为多层结构。在应用程序中有一些具有参数化默认构造函数的参与者,例如
我现在正在尝试创建一个通用路由器参与者,它将路由到具有特定节点的节点。集群配置基于 akka 站点上的示例工作,我可以创建一个具有 1 个角色的路由器,该路由器路由到另一个角色的参与者:
此方法根据需要起作用。但是,我需要去创建一些具有相同功能的代理类,这很痛苦。我正在努力让它更好地工作,有限的 scala 经验使它变得困难。这是我想做的事情:
通过阅读一些 scala 文档和通过 stackoverflow 提出了这一点,但似乎无法做到这一点 - 这种方法不允许我为演员创建道具。我已经看到如何在 Scala 中实例化由类型参数表示的类型实例,我认为类型信息正在丢失(类型擦除)。
我将如何将演员类传递给路由器代理以允许路由器初始化?
这是我在编译期间遇到的错误,同时初始化路由器:
编辑
使用通用代理路由器的背景
这种方法的原因是为单层和多层架构重构应用程序。运行多层时,我想跳过初始化任何“重”演员。鉴于我在前端节点上有以下配置:
并且后端节点的角色为[backend]
,那么当我启动前端节点时,MyActor 将不会被初始化。MyActor 是许多作为主管/经理的参与者之一的示例。它们中的每一个都可能轮流初始化一些其他参与者(有时使用路由器)。我正在尝试做的是重构应用程序,以便我可以在不同层中运行轻量级前端节点,以在需要时运行资源繁重的后端节点,但仍然能够在单个节点上运行所有节点。通过这种方法,我可以将重型管理器的初始化添加到我的应用程序引导程序中并添加一个角色,它成为一个多功能应用程序而无需重新编码。
编辑 2 如果类构造函数不接受任何参数,我可以让应用程序按预期工作。
然后在我的抽象类中:
Props[MyActor]
对于无参数的演员来说效果很好,但Props(classOf[T])
会丢失类型。
scala - 具有远程节点的 akka 集群的路由配置
我有几个远程节点,它们位于不同的计算机上并连接在集群中。因此,它是具有“日志记录”角色的节点之一上的日志系统,它在数据库中写入日志。我选择使用路由将消息从其他节点传递到记录器。我有一个带有主要演员和三个子演员的节点。他们每个人都必须将日志发送到记录器节点。我对路由器的配置:
我用这段代码在每个参与者中创建路由器
并且寄出
之后,记录器仅接收来自一个子角色的消息。我不知道如何调试它,但我猜我为此应用了错误的模式。
这项任务的最佳实践是什么?谢谢。
来自记录器节点的演员:
akka - akka 集群配置中的 akka 集群节点的 virtual-nodes-factor
为普通参与者配置一致性哈希路由器
akka.actor.deployment {
}
集群情况下配置一致性哈希
akka.actor.deployment {
}
在上面的集群配置中我们可以添加这个virtual-nodes-factor = 10
吗?
akka - 使用 Akka 集群的 Amazon Dynamo Like 数据库
我正在尝试使用 Akka 构建类似 Dynamo 的数据库
此处的 Akka 集群规范中给出了提示http://doc.akka.io/docs/akka/2.0/cluster/cluster.html
如何实现读写副本?
我已经实现了单系统数据代理,并且 repo 在这里https://github.com/pamu/AkkaDynoDB
cassandra - Cassandra 集群密钥使用
我正在努力解决这个问题,但坦率地说,我的大脑无法理解——至少看起来是这样。
我有一个专栏家族,为相当多的演员工作。它是一个中央作业管理和调度表,必须在整个集群中分布和可用,甚至可能在不久的将来的某一天穿越数据中心的障碍。
每个作业执行器参与者系统,即实际执行作业的系统,都安装在一个 Cassandra 节点旁边 - 即在同一个节点上。实际上,当然有 s 主演员拉动工作并将它们分配给演员代理,但这与我的问题无关。
还有一些参与者系统可以在中央作业表中创建作业以供其他参与者甚至参与者系统执行,但通常这些作业是批量加载或通过 Web 界面手动加载的。
要执行作业的参与者总是只查询它的本地 cassandra 节点。如果完成,它将更新作业表以指示它已完成。在正常情况下,此写入也应该只更新具有他的本地 Cassandra 节点具有权威性的作业的记录。
现在,有时可能会发生给定主机上的参与者系统无关的情况。在这种情况下,它确实也应该从其他节点获得作业,但当然它仍然只会与它的本地 Cassandra 节点对话。我知道这行得通,它并没有打扰我。
让我彻夜难眠的是:
我将如何创建一个复合键来实现 Cassandra 节点的本地权威,以获取其本地参与者系统的作业条目,从而实现它的作业执行参与者,而无需将作业表拆分为多个列族等?
换句话说:我如何创建一个复合键,以确保 a)作业在我的集群中均匀分布,b)作业表上的本地查询仅返回此 Cassandra 节点对其具有权威性的作业,以及 c)我的分布式代理系统仍然有可能从其他节点获取作业,以防它没有自己的作业可以执行???
关于上面 c) 的最后一句话。在没有本地工作的情况下,我不想做 2 次查询,但仍然只有 on!
对此有任何提示吗?
到目前为止,这是作业表的一般结构:
仍在设置所有内容的过程中,因此到目前为止没有定义查询。但是演员会从中拉出工作并设置状态等
scala - 使用播放框架将数据流式传输到 Web 浏览器
我想要有关如何将数据从消息代理服务器流式传输到任何想要访问该流式传输的用户的指导或任何线索。
此流式传输基于 json 数据。我正在使用 scala 的播放框架。
我应该考虑使用什么?阿卡?发布订阅模式?我应该使用网络套接字吗?
尽管我仍然熟悉游戏社区的文档,但我正在努力寻找解决方案。任何帮助或线索都非常受欢迎。
我之前曾在https://stackoverflow.com/questions/29076584/streaming-jsons-objects-from-apache-spark-streaming-to-play-framework询问过这种情况, 但到目前为止我还没有得到任何答案。
akka - Akka Remoting 接触点节点需要运行吗?
我是 akka 和 akka 远程处理和 akka 集群的新手。我已经使用以下配置构建了一个系统
应用程序.conf
worker.conf
不明白的是,akka 系统将在我的本地启动,并使用种子节点来形成集群。这是否意味着种子节点应该已经在运行。这意味着该进程是否应该已经在这些 ip:port 上启动?
原因是:如果没有这个过程已经在运行,我会得到关联失败,因为它是封闭的。
*******UPADTE *****
上述问题是因为使用浮动 ips。我的节点在 Openstack Vm 上运行,它们确实有一个静态 IP。使用静态 IP 解决了问题。
另一个有趣的发现。当节点启动时,remote.netty.tcp 中的主机名应该是机器 inet,正如 Ryan 提到的,其中一个种子节点需要启动集群才能启动,因此让本地机器成为种子节点会更好。如果您有分布式种子节点,则更喜欢使用 localhost inet IP 而不是 127.0.0.1。
sockets - Akka Remoting Connection
I have 2 applications say app1 and app2. On machine 1, both app1 and app2 runs but on machine 2 only app2 runs, as most of the work is done by app2. The apps use Akka.
Using akka remoting, I want to be able to pass message from app1 on machine 1 to app2 on machine 2. app1 and 2 are able to interact with each other when they are on same machines.
However when app 1 on machine 1 tries to connect with app2 on machine 2 it gets below error...
EndpointWriter - AssociationError [akka.tcp://deal-rest@127.0.0.1:4242] -> [akka.tcp://deal@:4241]: Error [Invalid address: akka.tcp://deal@:4241] [ akka.remote.InvalidAssociation: Invalid address: akka.tcp://deal@:4241 Caused by: akka.remote.transport.Transport$InvalidAssociationException: Connection refused: /:4241
When I run netstat -a | egrep 'Proto|LISTEN' on machine 2, I got below response tcp6 0 0 localhost:4241 [::]:* LISTEN
This indicates that the app2 is running and able to listen on 4241.
Also, the port 4241 is open on machine1 and 2.
Any suggestion will be helpful. Thanks.
scala - AkkaCluster:已终止与 MemberRemoved 消息
我正在使用 akka 集群,并且无法确定何时使用 Terminated 消息来确定成员已离开集群与使用 UnreachableMember/MemberRemoved 消息。2 条消息和一些示例用例有什么区别?