问题标签 [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 投票
2 回答
1505 浏览

c# - 微软奥尔良颗粒通信性能

我正在开发一个以 Mircosoft Orleans 为基础的工作流引擎,因为它提供了许多有用的功能,例如自动分配工作和处理故障转移。

我有三种谷物:

  • 工作流 - 保存工作流中的信息以及应该以什么顺序执行工作块
  • 工作块 - 实际完成工作的部分
  • 执行 - 工作流的单次执行

我的问题是,当运行大量当前执行时,即> 1000,性能确实受到影响。我做了一些分析并将其缩小到谷物之间发生的通信。无论如何我可以再改进一下吗?

这是我的代码大纲以及颗粒如何相互作用

执行颗粒位于一个循环中,从工作流中获取下一个工作块,然后在工作块上调用执行。正是颗粒之间的这种不断调用导致我的一个测试工作流程的执行时间从运行单个执行时的 10 秒到运行超过 1000 时的大约 5 分钟。这可以改进还是我应该重新设计解决方案删除粮食通信?

0 投票
1 回答
765 浏览

c# - 奥尔良入门:实施、托管和部署

我正在制作一个应用程序作为一种学习体验,我遇到了两个主要问题:

1)我有一个对奥尔良来说可能不是一个好主意的实现......我只是不知道。

2)我正在寻找有关托管和部署的建议,基本上:在哪里以及如何?这只是一种学习体验,所以小而便宜/免费很重要。

所以,开始......关于我正在制作的应用程序的一些信息:

  • 这是一个基于 MongoDB 存储的移动 gps 应用程序。
  • 现实世界被划分为不同且持久的区域、gps 位置块。
  • 当用户在给定区域中处于活动状态时,该区域中的所有其他用户都可以看到他,并且他开始接收有关该区域的属性和该区域中其他活动用户的位置的更新。
  • 用户可以操作区域的属性。
  • 用户需要能够明确地加入和离开区域,但也需要在超时后离开。

我有两个谷物:UserGrainRegionGrain

对于问题 1)将 Region 作为谷物实施是不是一个好主意?一些不同的示例支持此实现。但是,最佳实践手册表明这不是一个好主意,因为它是一项长期运行的工作(区域无限期持续存在),并且这种类型的颗粒可能是一个瓶颈。但是......我需要它像“Presence”样本中的“GameGrain”一样,玩家加入和离开(明确或超时)。

对于问题 2)

  • 我有一个作为控制台应用程序实现的筒仓。我使用 amazon elastic beanstalk 部署了一个 .net web 应用程序,但我不知道从哪里开始使用控制台应用程序。亚马逊是一个不错的选择吗?我只是从最近的使用中默认它。
  • 如果 RegionGrain 是一个坏主意……一个好主意会是什么样子?
  • 如果 RegionGrain 是个好主意……有没有办法告诉奥尔良永远不要停用它?如果是这样,我应该使用 Timers 来满足超时要求,以及更新的存在和心跳......对吗?如果不是,我是否应该在某个维护和运行 RegionGrain(s) 的地方托管另一个控制台应用程序?
0 投票
1 回答
1315 浏览

c# - 在多个谷物之间分配繁重的工作(Microsoft Orleans)

我想计算一个简单的可并行计算(例如 Mandelbrot),Orleans 在不同的颗粒上并行计算,并在颗粒完成后将结果合并在一起。但是,我不确定如何执行此操作,或者 Orleans 是否是解决此类问题的正确框架。另外让我提一下,这不会是任何将投入生产的项目,我只是在玩弄奥尔良。

到目前为止,这是我的想法:我有一个graintype(我们称之为“maingrain”),它是客户端的入口点(也可能是grain)。然后这个grain估计需要的处理能力,并将任务分成更小的部分,这些小部分从另一个graintype分配给其他grain(我将这些称为“subgrains”)。让这些 subgrains 完成工作并等待可以返回给客户端的结果没什么大不了的,但是我不确定如何处理 subgrains。

可以说,有一个电话我想使用 10 个子粒。我通过一个新的 GUID 获得每个并让它们工作。他们完成了,客户得到了结果。现在有一个电话我想使用 X 子粒:

  • 我是否应该简单地使用 X 个新 GUID 激活 X 个新子粒并让垃圾收集器进行清理?
  • 我是否应该以某种方式重用以前激活的子颗粒(某种池),我怎么知道一个子颗粒已经可以重用(=不忙)?
  • 如果我想使用多个主干,会发生什么。每个人都处理自己的子粒吗?

你会怎么做?谢谢你。

0 投票
1 回答
208 浏览

distributed-computing - 使用流的奥尔良筒仓间通信

我有两个筒仓 A 和筒仓 B,每个筒仓都有自己独特的纹理和界面。我需要让它们都通过流进行通信。这怎么可能?我现在在本地运行并使用 SMS InMemory 存储。在同一个筒仓流工作中,如何跨筒仓实现

0 投票
1 回答
252 浏览

dapper - 在 Orleans 项目的粒度中处理关系数据库中的遗留数据的最佳实践是什么?

我正在研究奥尔良项目。我已经浏览了 github 中的示例主机,没有这种示例。我想知道将 dapper 或 EF 注入到grain实现并执行 CRUD 的最佳实践是什么。

先感谢您。

0 投票
1 回答
243 浏览

.net - Orleans.GrainClient.GetStreamProviders() 不起作用

在调用 Orleans.GrainClient.GetStreamProviders() 和 Orleans.GrainClientGetStream() 后,我得到 System.NullReferenceException。我尝试在文件配置和代码中添加 StreamPorvider。其他方法如 GetGrain() 效果很好。

我的配置文件:

和错误堆栈跟踪

[HttpException (0x80004005): 对象引用未设置为对象的实例。]

0 投票
1 回答
1033 浏览

orleans - 奥尔良grain客户端和grain之间的双向通信

我想在grain方法中实现对grain客户端的回调,例如。在 Grain.Method1 评估期间,需要调用客户端方法来获取一些数据。

我尝试使用流来执行此操作,但是当我在客户端订阅流时,该方法不会触发。

粮食:

客户:

0 投票
0 回答
205 浏览

orleans - 使用 AzureTableStorage 提供程序时,OrleansHost.exe 无法启动 Silo

我是奥尔良的新手,正在努力学习奥尔良主站点上的优秀教程。

我正在使用声明性持久性示例并且无法使其正常工作。我怀疑我缺少配置设置,希望得到一些指导(如果需要,我可以附上我的解决方案)。

我已经使用 Orleans Tools for VS (v1.2.0) 中的模板按照员工/经理示例设置了解决方案。该解决方案有一个Grains 项目(保存grain、状态对象和orleans 主机配置文件)、一个interfaces 项目(grain 接口和通用对象)和一个Silo 项目(设置grain 并与它们交互)。Grains 项目启动 OrleansHost.exe,Silo 项目在主机启动后提示启动。OrleansConfiguration.xml 文件(在 Grains 项目中)有一个 StorageProviders 部分(在 Globals 下),我有 2 种提供程序类型:Orleans.Storage.MemoryStorage (MemoryStore) 和 Orleans.Storage.AzureTableStorage (AzureStore)。如果我删除表存储提供程序,OrleansHost.exe 运行良好(最后记录的消息是筒仓正在运行)。

我遇到的问题是当表存储提供程序包含在配置文件中时,OrleansHost.exe 在记录建议它正在使用 Azure 表存储提供程序的行后立即停止记录(“AzureTableStorage 提供程序正在使用 DataConnectionString:UseDevelopmentStorage=真的”)。存储表“OrleansGrainState”已创建但从未填充。如果我尝试初始化 GrainFactory(通过继续 Silo 执行),我会得到异常:Orleans.Runtime.SiloUnavailableException,这与 OrleansHost.exe 未完成启动一致。不过,主机确实会继续每分钟记录一次收集消息。

我相信我已经正确地遵循了分步说明,并查看了该站点上的其他帖子,虽然这确实使我能够修复我的配置文件,但我仍然无法让主机启动筒仓,因此我可以测试状态持久化机制。我还浏览了奥尔良社区和贡献网站,但无济于事。

我在 VS 2015 中运行它,Orleans 库是 v1.2.0,我安装了 Orleans Tools for VS (v1.2.0),并安装了 Azure SDK v2.9.1。

我会感谢任何帮助,因为我想继续了解奥尔良。

谢谢

0 投票
1 回答
573 浏览

azure-eventhub - 奥尔良 EventHub 流提供程序

我在基于奥尔良的项目中使用 EventHubStream 提供程序。系统运行几分钟后,Orleans 开始抛出 QueueCacheMissException,同时尝试将事件从生产者推送到 OnNext。

我试图增加缓存的大小,但这只是暂时的。

由于缓存的大小,这是正常行为吗?在这种情况下,我应该取消订阅并重新订阅吗?我试图恢复流,但没有奏效,流处于故障状态......有什么想法吗?

0 投票
1 回答
553 浏览

c# - Microsoft Orleans 中的粒度故障转移自动重试

因此,我们正在测试 Grain Fail-over 的工作原理,以防某些孤岛由于某种原因(服务器关闭等)无响应。目前,我们有两个筒仓在两台不同的机器上运行,每台机器上都激活了谷物。然后我们继续杀死其中一个筒仓(出乎意料)。我们尝试在 DEAD silo 上调用一个grain,在超时后(我相信总共是 3 分钟左右)抛出一个异常,说明 Silo 拒绝连接。现在,我们相信在一个筒仓被宣布为 DEAD 后,如果我们重试激活,一个谷粒只会在另一个筒仓上被激活。这对我们来说很好。但是,我们想知道是否有某种方法可以自动重试而不是自己执行逻辑。