问题标签 [stateful-actor-service]

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 回答
1259 浏览

azure-service-fabric - 为什么我最小的 StatefulActorService 会抛出 COMException?

我想摆脱服务结构有状态参与者服务的轮胎,所以我在 VS2015.1 中创建了一个合适的项目,并且对生成的代码没有任何更改。然后我运行/调试了解决方案。我收到以下错误:

考虑到我的应用程序中现有服务之间可能存在一些干扰,我还构建了一个全新的服务结构解决方案和有状态的 Actor 服务项目(采用所有默认值)。这个项目以完全相同的方式失败了。

  1. 其他人可以确认这种行为吗?(它可能在我的开发环境中)
  2. 关于可能发生的事情有什么建议吗?
  3. 获取有关失败的更多信息的最佳方法是什么?(似乎没有太多跨越 com 边界)
  4. 我应该在视觉工作室工具之外尝试这个吗?

更新1:

解除 COMException 后,我还得到:

更新 2:

由于我在 Visual Studio 2015.1 安装/升级方面遇到问题,我不确定这是否与此问题有关。此外,一位同事遵循相同的步骤并且没有问题。所以我刚刚直接重新安装了VS2015.1,SF SDK,以及所有的先决条件。不幸的是没有变化。:(

我还应该说,每次我遇到这个错误时,Service Fabric Local Cluster Manager 也会中断。如果我尝试打开管理器,我会收到通知:“无法打开本地集群管理器”

此外,我确实将 SF 应用程序项目作为解决方案中的启动项目。(再次,我有其他 SF 应用程序工作......只要我在新的或现有的 SF 应用程序中尝试有状态的 Actor 服务,它就会死掉)。

更新 3:

我应该早点提供这个,但这里是调用堆栈......与提醒有关吗?

更新 4

我使用了一种更有力(而且诊断更少)的方法。我重建了我的开发机器。基于我在 Update 1 安装中遇到的奇怪行为,我担心我的构建盒受到了损害。我重建了操作系统,重新安装了 vs2015.1 和 SF SDK,现在它可以正常工作了。您的里程可能会有所不同:|

0 投票
1 回答
175 浏览

c# - 可靠的有状态服务/参与者状态参考

在 Azure Service Fabric 中,我可以使用有状态服务和参与者。状态类型类似于普通的 .net 对象类型。所以我可以创建该状态的多个实例。

当我将实例化的状态对象从一个有状态服务/actor 推送到另一个有状态服务/actor 时,会复制还是引用状态对象实例?因为它不是引用,而是复制,所以我必须将状态数据存储两次。正确的?

0 投票
1 回答
847 浏览

azure-service-fabric - 服务结构参与者接口

是否有可能有一个只包含属性的演员?

我想创建一个用于设置和获取属性的演员。例如:我有一个类似的界面,

我正在尝试使用以下代码创建一个演员代理对象:

我收到一条错误消息:

Microsoft.ServiceFabric.Actors.dll 中发生了“System.ArgumentException”类型的未处理异常。附加信息:参与者接口“Item.IData1”的方法“get_Classification”不返回任务或任务<>。Actor 接口方法必须是异步的,并且必须返回 Task 或 Task<>。

0 投票
1 回答
655 浏览

c# - 如何对在其方法中获取对另一个参与者的引用的参与者进行单元测试?

我有一个看起来像这样的演员:

我想知道是否有办法测试这种类型的交互。我们使用ServiceFabric.Mocks库来设置在正在运行的服务之外创建演员所需的所有脚手架,但是当它到达ActorProxy.Create<ICustomerActor>(customerId.Value)线路时,它会引发异常,因为没有任何东西像真正的服务那样真正捆绑在一起。

0 投票
3 回答
681 浏览

azure - 在 Azure Fabric 可靠参与者之间共享 EventHub

我有一个应用程序,我将设备从物理世界映射到Azure Fabric中的Reliable Actors。每次收到来自设备的消息时,我都想将消息推送到事件中心。

我现在正在做的是为每条消息创建/使用/关闭 EventHubClient 对象。

这是非常低效的(大约需要 1500 毫秒),但它解决了我过去将 EventHubClient 保存在内存中的问题。当我有很多设备时,底层虚拟机会很快耗尽网络连接。

我正在考虑创建一个新的参与者,负责将数据推送到 EventHub(通过保持 EventHubClient 活动)。由于 Reliable Actors 的基于回合的并发模型,我不确定这是一个好主意。如果我有 10 000 个设备“同时”推送数据,它们的每个参与者都会阻止将消息推送到将消息推送到 EventHub 的新参与者。

这种情况下推荐的方法是什么?谢谢,

0 投票
1 回答
131 浏览

azure-service-fabric - Azure 服务结构中的参与者

如何使用不同语言(python 或 Go)的 Azure Service Fabric Actors 来构建有状态的微服务?还是仅限于 Java/C#?

0 投票
1 回答
356 浏览

c# - Service Fabric Actor 计时器对性能的影响

我们正在考虑可能将 Service Fabric Actor Timers 用于某种 TTL 管理服务。它有可能同时拥有 100 数十万个演员计时器。我们担心一次运行这么多 Actor 定时器的开销,但似乎没有任何关于 Actor 定时器的性能影响或底层机制的文档。任何指导将不胜感激。

0 投票
1 回答
157 浏览

azure-service-fabric - Reliable Actors - 在所有实例之间共享一个集合?

目前,我派出一群演员来完成一些长期运行的任务。我将它们放入一个列表中,然后调用 Task.WaitAll() 来收集结果。

但是,我想在每个 Actor 完成其任务时收集结果(而不是等待每个 Actor 完成并在最后聚合它)。

我在考虑使用可靠的集合,但是如何在所有参与者之间共享可靠的集合?

谢谢!

0 投票
1 回答
1272 浏览

memory-leaks - Service Fabric 有状态服务消耗大量非托管内存

我有一个有状态的服务,它消耗越来越多的内存,直到服务重新启动或进程被杀死,然后释放内存。

见下图;它看起来像是典型的锯齿型内存泄漏问题。

内存使用图

我们使用 DotMemory 对集群中单个节点的内存使用情况进行了一些分析,它报告所消耗的绝大多数内存都在非托管内存中。

DotMemory 个人资料图片

就在我们循环有状态服务之前,我们获取了一个内存转储文件,看看我们是否可以使用 WinDbg 进一步了解任何东西。

我不是 WinDbg 专家,但我关注了这篇文章,这似乎表明大部分内存都被堆堆栈消耗(http://hacksoflife.blogspot.co.uk/2009/06/heap-debugging-memoryresource-leak -with.html )

它建议我应该使用一些额外的命令来获取堆栈跟踪,但在获取 dmp 文件(gflags.exe /i yourApplication.exe +ust)之前我没有这样做。

有没有人可以帮助我使用我拥有的 dmp 文件诊断问题?

有人可以验证文章中提到的步骤是否值得遵循以尝试找到此问题?#

有没有人在有状态服务之前遇到过这种问题?

附加信息:

这是来自 DotMemory 的检查报告的图像,关于对象泄漏检查,我需要重新检查代码我不记得我们在代码中实例化了这些对象。

这是我从运行中得到的输出!address -summary

这是我得到的输出!heap -s

在此处输入图像描述

2017 年 7 月 12 日更新:

使用来自的输出!heap -flt s 228

我们发现了一个包含 0000 的堆,其条目类型如下:

0000027d680d8d60 0023 0023 [00] 0000027d680d8d70 00228 - (busy) ? FabricClient!GetFabricClientDefaultSettings+4ba320

这导致我们看一下我们的 BaseActor 类,在该类中,我们在结构中创建了一个 FabricClient 实例,Lazy<T>但从不处置它,因此我目前正在调查在 Actor 生命周期内对 FabricClient 实例的正确处理。

0 投票
0 回答
653 浏览

azure - Azure Service Fabric – Service Remoting vs HTTP vs 消息系统?

假设我将有数以百万计的 Actor 生成数据,这些数据最终将存储在数据库中。让演员与数据库交互是一个糟糕的主意,所以我在中间添加了另一个服务 B。该服务 B 将分批写入 DB。

我应该使用什么来进行 Actor 和 Service B 之间的通信?Service Remoting、HTTP、异步消息系统?

Service Remoting 是一个好的解决方案吗?尤其是当数据已经保存在 Actor 中时(StatePersistence.Persisted)

Service Remoting 可以处理数百万个 Actor 同时调用 Service B 吗?您能否提及使用服务远程处理方法的负面影响?

谢谢