【问题标题】:Can't report load for the metrics in Actors Service无法报告 Actors 服务中指标的负载
【发布时间】:2017-02-24 15:59:40
【问题描述】:

Service Fabric 中有一个很好的功能,它允许每个服务对象在运行时更新自己的负载。动态负载报告允许副本或实例在其生命周期内调整其分配/报告的指标负载。 以下是我可以在服务中执行此操作的方法:

this.Partition.ReportLoad(new List<LoadMetric> { new LoadMetric("MemoryInMb", 1234)});

问题在于,Partition 是在 StatefulServiceBase 中声明的受保护属性,因此它在 ActorService 中可用,但在 Actor 中不可用。我的意思是,我不能做 Actor.ActorService.Partition.ReportLoad(...)。我确实看到了一种解决方法,我可以创建我的自定义 Actor 服务类并将此属性公开,但我想知道这是否有意义,是否有任何特殊原因无法报告 Actors 中的负载?

【问题讨论】:

    标签: azure-service-fabric


    【解决方案1】:

    ActorService 确实派生自 StatefulServiceBase。你应该很高兴。

    看到这个:https://docs.microsoft.com/en-us/dotnet/api/microsoft.servicefabric.actors.runtime.actorservice?redirectedfrom=MSDN#microsoft_servicefabric_actors_runtime_actorservice


    编辑: 特定于一个 Actor 实例的负载指标是什么?

    演员的寿命通常是有限的。负载报告是一个周期性的过程。这两者结合得并不好。是的,您可以使用ActorReminders,但是当您拥有可以不受限制地做同样事情的ActorService 时,为什么还要使用它们呢?

    【讨论】:

    • 对不起,我已经编辑了这个问题。所以是的,我可以报告来自 ActorService 的负载,但不能报告来自 Actor 本身的负载,仅仅因为 Actor '使用' ActorService 但不是从它派生的。
    • 我需要定期在集群中运行一些任务。这就是我对演员和提醒如此感兴趣的原因。至于指标,我想利用它们让 Fabric 知道 Actor 可能会启动一些繁重的进程,因此即使它们本身是轻量级的,它们产生的工作也不会那么多。所以在我看来,让 Actor 报告指标可以让 Fabric 更好地平衡它们。
    • 您可以创建一个委托或接口来封装ActorService 的 ReportLoad 方法并将其传递给您的 Actor 的 ctor。
    • 是的,委托和接口都是访问分区属性的好方法。问题是,有人知道这对 Fabric 有什么影响吗?我的意思是,我能改变 Fabric 以这种方式分配演员的方式吗?或者它完全没有价值,我应该忘记它?
    • 您报告分区级别的负载,Actor 实例通过其 ActorId 绑定到分区。所以不,你不能以这种方式影响 Actor 的分布。
    猜你喜欢
    • 2018-09-25
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    相关资源
    最近更新 更多