问题标签 [akka.net-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.
cluster-computing - 开发集群应用
我不确定这个问题的确切位置(或什至如何问),所以我希望这里有人能指出我正确的方向。
我有一个正在构建的服务。该服务在内存中有不同的对象——每个对象都有自己的状态。每当创建一个对象时,它都会从数据库中加载状态并保存它。当对对象进行更改时,它们也将持久保存在数据库中。
我想扩展这项服务。我查看了诸如 akka.net(演员模型)之类的解决方案,他们有一个集群解决方案。根据我的阅读,它将状态与他们称为“八卦”的东西同步,其中每个节点将状态发送到另一个节点。我不确定此时是否真的可以将我的工作应用程序转换为 akka.net。
我想知道集群如何在不同节点之间保持状态同步(我得到了八卦概念),如果我的机器 A 接收到一条消息,同时机器 B 也接收到一条消息,会发生什么 - 两者都改变了相同的状态对象的 - 这将使状态之间的数据完整性出现问题。我对此的唯一想法是锁定共享资源,但这违背了集群的目的。
在数据库中保持状态也不是一种选择,因为数据库成为瓶颈和单点故障。
我似乎无法在网上找到任何相关的阅读材料——但我也缺乏我需要关注的技术短语。
如果它是相关的,我正在使用 .NET Core 和 c# 进行开发。
谁能解释集群的概念,它是如何工作的并确保节点同步?还是可以指出正确的方向?
c# - ReceiveTimeout 是否应用于隐藏的消息
假设我有两个状态的抽象演员
Ready
和Busy
。
在忙碌状态下,我只想接收特定类型的消息,例如PauseJob
,CancelJob
所有其他消息,例如StartNewJob
被隐藏。
问题:如果我设置SetReceiveTimeout()
为 Busy 状态,它是否仅适用于我在此状态 ( PauseJob
, CancelJob
) 下实际处理的消息,还是也考虑隐藏的消息?
提前致谢
akka.net - Akka.net 集群分片:无法注册协调器
我正在尝试通过创建一个简单的项目来设置 akka.net 集群分片。
项目布局:
Actors - 定义一个actor和消息的类库。被其他项目引用
Inbound - 启动 ShardedRegion 并且是唯一参与集群分片的节点。并且也应该是主持协调员的人。
MessageProducer - 将仅托管 shardedregion 代理以将消息发送到 ProcessorActor。
灯塔- 种子节点
上传的图像显示协调器单例未初始化,通过共享区域代理发送的消息未传递。
根据 petabridge 的博客文章petabridge.com/blog/cluster-sharding-technical-overview-akkadotnet/,我通过设置 akka.cluster.sharding.role 将灯塔排除在参与集群分片之外,因此协调员不参与在其上创建。
不知道我错过了什么才能让它工作。
f# - 如何使用 Akka.FSharp API 在 Akka.NET 集群中实现故障转移?
如何使用 Akka.FSharp API 在 Akka.NET 集群中实现故障转移?
我有以下集群节点用作种子:
然后我有一个可能会死的任意节点:
在集群中实施故障转移的推荐做法是什么?
具体来说,是否有一个代码示例说明当其中一个节点不再可用时集群的行为方式?
- 我的集群节点应该启动替换还是有不同的行为?
- 是否有一个配置可以自动处理这个我可以设置而无需编写代码?
- 我必须在哪里实现什么代码?
f# - 如何让在一个进程上运行的参与者向在单独进程上运行的另一个参与者发送消息?
我想让在不同进程(或节点)上运行的参与者向运行在不同进程(或节点)上的其他参与者发送消息,同时保持容错和负载平衡。我目前正在尝试使用 Akka.Cluster 的 Sharding 功能来完成此操作。
但是,我不确定如何做到这一点......
我有以下代码反映了我的种子节点:
输出看起来像这样:
在节点 'localhost:2552' 上活动的分片:
然后我有一个单独的进程来执行以下代码:
我的集群系统(在单独的进程上运行)识别正在加入的新节点:
结论:
总之,我希望让在不同进程(或节点)上运行的参与者向运行在不同进程(或节点)上的其他参与者发送消息,同时保持容错和负载平衡。我目前正在尝试使用 Akka.Cluster 的 Sharding 功能来完成此操作。
附录:
akka.net - 使用 Akka.Persistence 配置时出现 System.Format 异常
我正在努力解决解析我的Akka.Net配置文件导致的System.Format异常。
我知道异常源于配置的持久性块:
反映异常的输出如下:
我的整个配置如下:
以下行导致我描述的异常:
总之,我是 Akka.Net 的新手,并且正在努力解决为什么会发生此异常。
f# - 是否有使用“Akkling.Cluster.Sharding”在演员之间发送消息的示例?
这可能是重复的。
因此,我取得了一些进展。但是,我发现将参考文档从 C# API解释为所需的Akka.FSharp API 具有挑战性。
是否有使用“Akkling.Cluster.Sharding”在演员之间发送消息的示例?
到目前为止,我只能从我的客户端程序发送消息,而不是演员。
上面的代码有效。但是,它仅适用于作为消息的字符串。我仍在努力让演员使用各种类型的消息相互发送消息。
笔记:
我得到了 Akka.Persistence.SqlServer 插件工作。
但是,我不清楚如何在 Akkling.Cluster.Sharding中改造以下设置:
具体来说,我的印象是分片集群系统中需要一个分片区域,以便在参与者之间来回发送消息。
作为对这种范式不熟悉的人,我正在努力使用分片功能在两个参与者之间创建一个简单的“hello world”类型的消息传递程序。
有什么建议么?
f# - 我的 SimpleClusterListener 的 F# 实现出现错误
我在 SimpleClusterListener 的 F# 实现中观察到以下错误:
[错误][2017 年 3 月 20 日上午 11:32:53][线程 0008][[akka://ClusterSystem/system/endpoint tManager/reliableEndpointWriter-akka.tcp%3A%2F%2FClusterSystem%400.0.0.0%3A2552 - 5/endpointWriter#1522364225]] 为非本地收件人 [[akka.tcp://ClusterSystem@localhost:2552/]] 丢弃消息 [Akka.Actor.ActorSelectionMessage] 到达 [akka.tcp://ClusterSystem@localhost :2552] 入站地址 [akka.tcp://Clust erSystem@0.0.0.0:2552]
我运行了 C# 实现(在下面的附录中引用),没有任何问题。此外,我使用的端口与 C# 实现使用的端口相同。
笔记:
我是 Akka.Net 的新手,因此,我正在努力解决我尝试移植的示例出错的地方。
我的实现如下:
主文件
SimpleClusterListener.fs
上面的 OnReceive 方法永远不会被调用。但是,PreStart 方法可以。
附录:
如前所述,我在下面移植了 C# 实现。我成功运行了这段代码。因此,当我尝试移植它时,我很困惑我哪里出错了。
f# - 如何使用 F# 实现 Props.Create
我试图将工作 C# 示例移植到F# 的 OOP 版本。
远程参与者(在一个单独的进程上)没有收到消息。
我收到以下错误:
这是工作的 C# 版本:
这是使用 OOP 到 F# 的端口:
问题:
我想在调用Props.Create方法时将SomeActor向上转换为对象类型吗?
上面的代码是我知道的唯一区别。
唯一的其他区别是 tcp 路径。
C#的TCP:
F# 的 TCP:
f# - 我该如何解决:Akka.Remote.EndpointDisassociatedException?
我有一些代码涉及将参与者远程部署到单独的进程中。
我得到:Akka.Remote.EndpointDisassociatedException
[警告][2017 年 3 月 24 日下午 1:54:32][线程 0008][[akka://system1/system/endpointManager/reliableEndpointWriter-akka.tcp%3A%2F%2Fsystem2%40localhost%3A8080-1 #1408457 663]] 与远程系统 akka.tcp://system2@localhost:8080 关联失败;地址现在门控 5000 ms。原因是:[Akka.Remote.EndpointDisassociat edException:在 Akka.Actor.ReceiveActor.ExecutePartialMessageHandler(Object message, Parti alAction 1 partialAction) 在Akka.Remote.EndpointWriter.PublishAndThrow(Exception reason, LogLevel level l, Boolean needToThrow) Disassociated .Actor.ActorCell.<>c__DisplayClass114_0.b__0(Object m) at Akka.Actor.ActorBase.AroundReceive(接收接收,对象消息)
1 partialAction) at Akka.Actor.ActorCell.<>c__DisplayClass114_0.<Akka.Actor.IUntypedActorConte xt.Become>b__0(Object m) at Akka.Actor.ActorBase.AroundReceive(Receive receive, Object message)
at Akka.Actor.ActorCell.ReceiveMessage(Object message) at Akka.Actor.ActorCell.AutoReceiveMessage(Envelope envelope) at Akka.Actor.ActorCell.Invoke(Envelope envelope)] [ERROR][3/24/2017 1:54:32 PM][Thread 0008][akka://system1/system/endpointManager /reliableEndpointWriter-akka.tcp%3A%2F%2Fsystem2%40localhost%3A8080-1/endpointWr iter] Disassociated Cause: Akka.Remote.EndpointDisassociatedException: Disassociated at Akka.Remote.EndpointWriter.PublishAndThrow(Exception reason, LogLevel leve l, Boolean needToThrow) at Akka.Actor.ReceiveActor.ExecutePartialMessageHandler(Object message, Parti alAction
在 Akka.Actor.ActorCell.ReceiveMessage(对象消息) 在 Akka.Actor.ActorCell.AutoReceiveMessage(信封信封) 在 Akka.Actor.ActorCell.Invoke(信封信封)
这是我在触发该错误的单独进程中执行的代码:
这是我的远程部署代码所依赖的配置:
这是我的 F# 实现所基于的实际工作的 C# 代码:
谁能提供有关我为什么会遇到此异常以及如何解决它的指导?
因此,F# 实现密切反映了工作中的 C# 实现。F# 代码可以在 GitHub 上找到。