问题标签 [orleans]

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.

0 投票
1 回答
634 浏览

c# - 奥尔良的工作分配

在 Microsoft Orleans,我正在尝试使用以下代码来实现类似可用工作列表的内容:

但是,如果我使用类似这样的代码开始一些任务,这会起作用,但事情不会正常运行。

但是,如果另一个节点加入集群,则该工作似乎永远不会移动到新节点。在该新节点上只会处理新安排的工作。

似乎如果奥尔良队列中有大量这种额外的工作,那么新节点就会卡在加入集群中。

0 投票
1 回答
524 浏览

orleans - 奥尔良建筑设计 - 筒仓项目合并还是分开?

有一个物联网数据收集项目和一个物联网数据处理项目。它们是单独开发和维护的。然而,在奥尔良筒仓(或筒仓集群)中共享它们之间的共同谷物将是有益的。架构在自托管场景中的外观如何 - 一个单一的筒仓,其中引用两个项目以在筒仓内进行通信或两个独立的筒仓与外部通信?如果在单个筒仓中,筒仓能否动态发现grain .dll?

0 投票
1 回答
269 浏览

orleans - 不可变属性或不可变包装对象 - 哪一个?

给那些可能知道的人的快速问题!

在奥尔良,似乎有两种方法可以将消息标记为不可变。

new Immutable(...) 或在消息类上具有属性 [Immutable]

哪个是首选,更重要的是为什么 - 还是只是个人品味的问题?

0 投票
2 回答
1502 浏览

dependency-injection - Orleans 的依赖注入

我不确定如何或在何处将依赖项注入 Grain。最好的地方在哪里?

如果不可能,我是否应该在 WorkerRole.Run 方法中设置一个容器并在需要时获取实例?

0 投票
1 回答
295 浏览

asp.net - 将 Asp.Net vNext 站点连接到 Orleans silo

我有一个想要连接到 Silo 的 Asp.Net vNext 站点。vNext 站点已经完成并投入生产,但筒仓部分尚未启动。我只是在计划阶段,所以现在是时候放弃整个想法,如果它看起来很疯狂。这甚至可行吗?

我知道您可以创建一个虚拟网络来将您的 Web 应用程序连接到您的 Worker 角色,这看起来很简单。但是,我不确定我的服务器和客户端配置应该是什么样子,尤其是在使用/发现 DeploymentIds 时。

当我尝试在 vNext 站点中使用 Orlean 提供的 AzureClient 时,它会引发异常——关于未标记为可序列化的 Azure 相关类型。在 vNext 站点中,我可以通过手动提供 DeploymentId 来让正常的 SiloClient 工作。在我的开发环境中,每次调试时 DeploymentId 都会更改,因此这显然行不通。

有没有人有任何建议可以在这里为我指明正确的方向?如果您需要更多信息,请告诉我,我很乐意为您提供。

0 投票
1 回答
203 浏览

akka - 使用 Actor 模型保存驻留在 POCO/DTO 中的状态

我一直在寻找一些用例或代码示例,以说明如何使用实现业务逻辑的 Actor 模型来保存简单 DTO/POCO 模型类中的状态。

谢谢

0 投票
1 回答
332 浏览

orleans - 是否可以在没有客户的情况下让奥尔良主机?

OnActivate我有一个在方法中设置提醒的谷物。然后,提醒会定期执行一些操作,并且不需要来自筒仓外部的进一步通信。

是否可以在主机启动期间获取 GrainProvider 并在主机本身内激活grain?

还是我需要客户来启动第一次激活?

0 投票
2 回答
1944 浏览

c# - 我怎样才能确保奥尔良谷物的一致性?

在 erlang 中,您可以在生成 actor 时将初始状态传递给它。这样你就不需要处理让actor再次进入初始状态的初始化消息,或者需要初始化消息的消息之前到达。在奥尔良,假设谷物始终存在,您不能使用构造函数。有没有办法将初始状态传递给grains,从而避免任何破坏一致性的init方法需要在任何其他方法之前调用它?

当我说“将actor带到它的初始状态”时,我的意思是,在奥尔良上下文中,调用特定grain激活的init方法两次。这就像覆盖状态。可能你需要这个重置状态的消息之王,但如果你不需要它,它就是一个陷阱,一个潜在的错误来源。

我正在寻找某种类型的构造函数,例如spawn(module, function, [initial state])来自 erlang 的构造函数。我的第一次尝试是使用以下签名查找 GetGrain 的任何重载:GrainFactory.GetGrain<IGrain>(id, initialState);

0 投票
2 回答
963 浏览

actor - Azure Service Fabric 与 Project Orleans 中的参与者粒度

举个简单的例子:我有一个拥有 1,000,000 个用户的服务,每个用户都有一些个人资料信息。我想使用演员管理此配置文件信息的 CRUD 操作。

Project Orleans中,我的理解是每个用户有一个谷子,因此 1,000,000 个相同演员类型的虚拟谷子(只有在使用时才会创建),每个谷子将管理存储在其中的单个用户的个人资料信息状态。随着我的用户增长,谷物的数量也在增长。

Service Fabric中,如果我对文档的解释正确,它的工作方式会略有不同。我将有一个有状态的参与者类型来管理所有用户的 CRUD 操作,并且为了可扩展性,我将对参与者进行分区,让每个分区负责用户数据的子集。鉴于partition options,我看不到一个明显的方法来实现它与 Project Orleans 相同的细粒度方式。

我真的很喜欢 Project Orleans 中的方法。演员只是为单个用户处理数据,可扩展性是显而易见的(更多的用户等于更多的颗粒)。内存模型也很简单:单个参与者通过少量状态按需获取水分。

似乎 Service Fabric 实现会稍微复杂一些。每个参与者都在与一组用户打交道,为了可扩展性,我必须提前决定应该创建多少个分区,因为以后无法修改。至于内存模型,每个参与者管理的数据量随着用户数量的增长而增长。

所以我的问题是:我的理解是否正确,Service Fabric 中的参与者只是比 Project Orleans 更粗粒度?

更新

感谢您的回答。我的错误是认为分区包含单个参与者实例,该实例将包含和管理分区内所有参与者 ID 的状态。这是完全错误的。Michiel 指出,一个分区包含许多参与者实例,每个参与者 ID 一个。因此,演员可以以与奥尔良项目相同的方式实施。这现在更有意义了,谢谢。

0 投票
1 回答
373 浏览

azure-service-fabric - 执行参与者之间的有序通信

我有一个问题,要求我的演员按发送顺序处理消息。在 Akka 中,actor A 和actor B 之间的消息总是保证按照发送的顺序到达。在 Service Fabric 中的 Reliable Actors 中似乎并非如此。在我的测试用例中,消息是以不确定的顺序接收的。

我可以通过在处理第一条消息之前不发送下一条消息来强制排序,但这会破坏整个观点。我真的很想发送并忘记消息,但知道它们将由接收参与者按顺序处理。

有没有人看到这样做的模式?我认为 Orleans Actors 具有相同的乱序消息可能性。也许奥尔良的解决方案也可以在这里工作。