问题标签 [service-fabric-actor]

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

azure-service-fabric - Service Fabric:将枚举类移动到不同的项目

最近为了解决循环依赖,我们需要将枚举类移动到不同命名空间下的不同项目。有一些参与者和有状态服务将这个枚举值的实例保持在其可靠状态。

枚举类是这样的:

我们想将其移动到另一个项目,其命名空间为com.libB. 这些枚举值存储在参与者和有状态服务中的可靠状态中,并按如下方式获取:

存储价值的演员服务之一Foo是非常长寿的演员。理论上,它可以在快乐的路径中存活到无穷大,并且永远不会从外部调用删除。我们尝试了简单的重构 > 移动并尝试了我们的非生产环境。这开始SerializationException在我们的非产品环境中引起。错误消息说: Expecting element 'Foo' from namespace 'http://schemas.datacontract.org/2004/07/com.libB'.. Encountered 'Element' with name 'Foo', namespace 'http://schemas.datacontract.org/2004/07/com.libA'.

这些异常发生在获取Foo旧演员的价值之前。

我的问题是:

  1. 我们如何移动Foo到命名空间com.libB?两阶段升级在这里会有帮助吗?
  2. 甚至可以在没有数据丢失/损坏的情况下这样做吗?
0 投票
1 回答
378 浏览

azure-service-fabric - 我们如何在 Service Fabric Actor Reliable 服务中添加 Application Insight

我们有 5 个可靠的参与者服务,这些服务是从无状态的 aspnet 核心 web api 调用的。现在,Service Fabric 应用程序正在生产中运行,但作为迁移到 Azure 的一部分,我们希望所有自定义事件和跟踪到应用程序洞察力。

我们如何将其添加到 SF 中?请注意,我正在寻找可靠的演员服务。在可靠的服务中添加它有点简单,但我在 Actor 服务方面面临挑战。

我参考了这个https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-tutorial-monitoring-aspnet教程以获得可靠的服务,但在编写可靠的参与者服务的情况下同样不起作用在 .NET 框架中。

0 投票
0 回答
24 浏览

c# - Json 序列化仅在单个 Service Fabric Actor 中失败,无法创建类型的实例

我有一个 Service Fabric Actor 服务,当收到请求时,它会从 CosmosDb 检索和反序列化文档,处理更新文档的请求,然后将其保存回 CosmosDb。

昨天其中一个演员开始抛出以下异常:异常:Newtonsoft.Json.JsonSerializationException 失败方法:Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateNewObject 消息:无法创建类型的实例。类型是接口或抽象类,不能实例化。路径,第 1 行,位置 1211。

只有一个 Actor 会抛出此异常。还有数百个可以很好地处理序列化。在过去的 12 个月中,该系统可能已经处理了 100,000 份此类文件。

我从 CosmosDb 获取了一份文档副本,并测试了它可以正确反序列化。我还针对检索和反序列化文档的代码运行了单元测试。

我找不到文档本身或代码的任何问题。

有谁知道是什么导致这个单一的演员抛出这个异常?

0 投票
1 回答
70 浏览

azure-service-fabric - 长时间运行的服务结构参与者提醒回调

我有一个 SF actor 服务,其工作原理大致如下:

  1. RunAsync服务中启动时,会创建一组预定义的参与者,并通过调用一个空StartAsync方法(在IActor- 派生的自定义接口上定义)来激活所有参与者。
  2. 每个参与者都会覆盖OnActivateAsync它注册提醒的地方,dueTime并且period都设置为 10 秒。
  3. 参与者在IRemindable.ReceiveReminderAsync实现中完成所有工作。这项工作通常很快(约 100 毫秒),但有时可能会持续几分钟(我知道这是糟糕的设计,请不要对此发表评论:-))。

我的问题是:当提醒到期时会发生什么,但演员仍然执行之前的回调代码?

根据文档,回调是排队的,但我也想知道队列是否以某种方式受到限制以及达到限制时会发生什么?

感谢您的反馈意见!

帕洛

0 投票
1 回答
64 浏览

azure-service-fabric - Service Fabric 对无状态服务的远程调用未返回、卡住

在我们的应用程序中,我们有一个有状态的参与者,它调用另一个无状态服务。无状态服务进行一些处理并将响应返回给参与者。该服务有时可能需要 1-2 小时才能完成处理。

间歇性地,我们看到服务已成功完成处理但未将响应返回给参与者的场景。我的意思是控制不会返回给actor,并且整个actor处理会卡住并且不会继续进行。我们在服务端或参与者端找不到任何异常。

寻找进一步调查该问题的指针。任何帮助将非常感激。

0 投票
0 回答
45 浏览

azure-service-fabric - Service Fabric Actor 自定义 Actor 服务 SaveReminderAsync 使用

我有一个自定义演员服务,我希望能够从这里向我的演员添加提醒,而不必为此直接调用演员。如果演员很忙,我不想等待排队,而是让它在需要时发出提醒。

我正在尝试使用 StateProvider.SaveReminderAsync 并且从函数摘要中说它应该完全按照我想要的方式工作.. 但它没有,而且我在网上找不到关于这个函数的单个示例。我一直在寻找 2 天,并尝试了很多事情来让它工作但没有运气。

谢谢你的帮助

0 投票
1 回答
187 浏览

azure-service-fabric - Service Fabric 中的 actorevent 有哪些限制?

我目前正在测试我的应用程序的扩展性,但遇到了一些我没想到的事情。

该应用程序在 5 节点集群上运行,它具有多个服务/参与者类型,并且使用共享进程模型。对于某些组件,它使用 actor 事件作为尽力而为的 pubsub 系统(存在回退,因此如果删除通知,则没有问题)。当参与者的数量增加(也称为订阅主题)时,就会出现问题。actorservice 目前被划分为 100 个分区。那时的主题数量约为 160.000,其中每个主题被订阅 1-5 次(需要它的节点),平均订阅 2.5 个(大约 400k 订阅)。

此时集群中的通信开始中断,没有创建新订阅,取消订阅超时。但它也会影响其他服务,对诊断服务的内部调用超时(询问 5 个副本中的每一个),这可能是由于分区/副本端点的解析,因为对网页的外部调用很好(这些端点使用相同的技术/代码栈)。

事件查看器充满了警告和错误,例如:

我尝试过扩展应用程序,但没有激活此订阅模型,我很容易达到两倍大的工作负载而没有任何问题。

所以有几个问题

  • 演员事件是否有已知/建议的限制?
  • 增加分区数或/和节点数会有所帮助吗?
  • 通信干扰是否合乎逻辑?为什么其他服务端点也有问题?
0 投票
1 回答
48 浏览

azure-service-fabric - Service Fabric 是否会无限期保留参与者信息?

出于 GDPR 的原因,我需要确保不存储不再需要的客户数据。在查看 Service Fabric Actors 时,我不确定“垃圾收集”的真正含义。

在测试环境中枚举参与者实例时,在我看来,参与者信息至少保留了 2 个月,即使参与者没有任何存储状态。

我发现多篇文章提到如果演员有剩余状态,我将需要手动删除他们,但在我的情况下,唯一的“状态”将是 actorId“存在”的事实。如果我将用户电子邮件地址之类的敏感信息用作 actorId,Service Fabric 是否会自行删除有关 actorId 的信息?

0 投票
0 回答
55 浏览

service-fabric-stateful - Service Fabric - Actor 内存峰值

请原谅我的术语,因为我是 Service Fabric 的新手。我们有一个使用本地 Service Fabric 的 3 节点集群(例如,不在 Azure 中托管)。

我有一个无状态服务,它从 Rabbit MQ 中提取消息并将它们传递给我们的业务逻辑处理的参与者。

当我们使用power shell创建我们的应用程序和服务时,我们首先强制删除应用程序:

然后我们使用我们的名称/类型和图像版本创建一个新的服务结构应用程序。

最后我们创建我们的服务。

所以我们在每个节点上创建了 5 个参与者的实例/副本,当我在我们的虚拟机上时,没有任何负载,每个参与者的内存使用量小于 50mb。

当我运行以下 power shell 脚本来停止和启动服务(基本上是重新创建它),但没有重新创建应用程序时,我注意到相同的参与者将启动并且内存立即飙升至 140+ MB .

我的演员实现没有持久状态。

我们正在使用以下 NuGet 包

Autofac 5.2.0 Autofac.ServiceFabric 3.0.0 Microsoft.ServiceFabric.Actors 4.1.456

我们的集群正在运行代码版本:7.2.457.9590

我试图获得内存转储,但我根本没有足够的知识来制造那些使用 winDBG 的人的头脑或故事。我尝试过使用 ANTS 内存分析器 11 进行分析,但我还是不知道我在看什么。

在我们的actor启动时,我们从应用程序中的另一个微服务中检索我们的配置(数据库连接字符串和其他设置,所有这些都存储在autofac容器构建器中。然后为了让我们的actor一直运行,我们执行下列的:

最终,我想帮助理解为什么在第一次创建应用程序时,内存使用情况似乎很好,但是在不修改应用程序的情况下删除/创建服务之后,内存似乎增加了 3 倍或更多,而应用程序的负载却没有增加。

0 投票
0 回答
106 浏览

security - Service Fabric 远程安全传输证书

我使用 Service Remoting 来调用 Service Fabric 中的参与者。这些对参与者的调用来自 Service Fabric 集群中的无状态服务,也来自 Service Fabric 集群中的其他参与者。我想确保这些服务远程调用在网络上的传输是加密的,这样消息就不会在网络上被截获和读取。传输安全性不应与调用的身份验证和授权(使用哪些客户端证书?)相混淆。

我对使用哪些证书或证书以及如何配置它们感到困惑。此处的 Microsoft 文档似乎建议将两个单独的证书用于客户端和侦听器,您可以在其中配置本地证书以查找并为客户端或侦听器配置证书远程指纹或证书远程公用名,其中客户端将侦听器指定为远程,侦听器将客户端指定为远程。

当客户端和侦听器都是同一个 SF 集群中的服务时,为什么需要使用两个单独的证书,尤其是当参与者调用其他参与者以使参与者既是客户端又是侦听器时?我们可以为客户端和侦听器使用一个证书吗?

我们必须指定远程指纹或远程通用名称还是可选的?

我们应该使用哪个证书:用于传输安全的专用证书,或者我们在 Service Fabric 中用于加密机密的相同证书,或者可能是用于身份验证的客户端、服务器或群集证书?

2021-10-18 更新我发现可以配置一个 ClusterProtectionLevel 设置如下

但是,当您不指定此设置时,不清楚默认值是什么,也不清楚此设置是否也适用于服务远程处理调用。任何人都可以澄清这一点吗?

此外,我们将服务作为本地用户帐户运行,这些本地用户帐户(由 Service Fabric 创建和管理)需要服务器证书的权限才能进行服务远程处理调用。我知道在应用程序清单中指定机密证书时,您可以通过 SecurityAccessPolicy 声明需要机密证书权限的本地用户,Service Fabric 将自动在证书存储中的机密证书上为本地用户帐户设置权限节点。但目前尚不清楚如何为需要进行服务远程调用的本地用户帐户的服务器证书权限自动完成相同的操作。应用程序清单还允许声明端点证书,但不清楚这是否仅适用于 http 端点,或者服务远程处理端点。任何人都可以澄清这一点吗?