C# 状态微服务中的状态位置

C# 状态微服务中的状态位置,c#,windows,azure,stateful,azure-service-fabric,C#,Windows,Azure,Stateful,Azure Service Fabric,通过Azure Service Fabric,我可以使用有状态服务构建微服务应用程序。为了构建微服务应用程序,ServiceFabric提供了两个构建服务的高级框架:Reliable Actors API和Reliable services API 我希望使用有状态的可靠参与者作为服务。在演员体内,我可以保持任何状态。我的问题是,actor实例中保存的“状态数据”的最大大小是多少?国家保存在哪里?在公羊?当我停用一个演员时,州会发生什么 例如,我的演员代表物联网设备。因此,参与者在列表中收集测量

通过Azure Service Fabric,我可以使用有状态服务构建微服务应用程序。为了构建微服务应用程序,ServiceFabric提供了两个构建服务的高级框架:Reliable Actors API和Reliable services API

我希望使用有状态的可靠参与者作为服务。在演员体内,我可以保持任何状态。我的问题是,actor实例中保存的“状态数据”的最大大小是多少?国家保存在哪里?在公羊?当我停用一个演员时,州会发生什么


例如,我的演员代表物联网设备。因此,参与者在列表中收集测量值。处理这个国家的最佳选择是什么?我应该多久刷新一次数据到一个持久的存储器?在出现性能问题或其他问题之前,服务可以在一个状态下收集数据多长时间

状态保存在RAM和本地磁盘上。Service Fabric代表您处理群集中多个节点之间的数据复制,以确保数据持久且高度可用。您不需要将数据冲向外部存储以使其持久,但如果您想卸载离线分析的大量冷数据,您可能会考虑这样做。 当停用某个参与者时,它将从活动参与者列表中删除,其状态将从RAM中删除,但它将继续保留到磁盘。当一个失活的参和者在以后被重新激活时,它的状态在磁盘的RAM中被重新水合

理论上没有最大状态大小,但在参与者使用的复制存储和传输中有。演员的一般概念倾向于大量的小事情,尽管这取决于你找到合适的平衡来满足你的需求

有鉴于此,有状态行为者有两种模式:

StatefulActor-在此模型中,您有一个任意类型的单一状态对象。这最适合用于大小不会随时间增长的状态,因为整个状态对象是在actor方法末尾复制和存储的。如果您不断地添加到状态中(例如,像一个不断增长的列表),那么您最终会遇到与相同的性能问题

StatefulActor-在此模型中,您的状态保存在一个键值数据结构中,您可以在其中显式保存状态。这更适合于增长的状态,因为您不会每次都复制所有状态