借助 Azure Service Fabric,我可以使用有状态服务构建微服务应用程序。为了构建微服务应用程序,Service Fabric 提供了两个用于构建服务的高级框架:Reliable Actors API 和 Reliable Services API。
我想使用有状态的可靠参与者作为服务。在 Actor 内部,我可以保持任何状态。我的问题是,actor 实例中保存的“状态数据”的最大大小是多少?状态保存在哪里?在内存中?当我停用一个 Actor 时,状态会发生什么?
例如我的 Actor 代表一个物联网设备。因此,参与者在列表中收集测量值。处理状态的最佳选择是什么?我应该多久将数据刷新到永久存储?在出现性能问题或其他问题之前,服务可以在多长时间内收集状态中的数据?
最佳答案
状态同时保存在 RAM 和本地磁盘中。 Service Fabric 代表您处理跨集群中多个节点的数据复制,以确保数据持久且高度可用。您不需要将数据刷新到外部存储以使其持久,但如果您想要卸载大量冷数据以进行离线分析,您可能会考虑这样做。
当一个actor被停用时,它会从事件actor列表中删除,它的状态从RAM中删除,但它会继续保存在磁盘上。当一个停用的actor在稍后重新激活时,它的状态会从磁盘在 RAM 中重新水合。
理论上没有最大状态大小,但有 configurable size limits在 Actor 使用的复制存储和传输中。 Actor 的一般概念倾向于大量的小事情,尽管您需要找到合适的平衡点来满足您的要求。
鉴于此,有状态参与者有两种模型:
StatefulActor
StatefulActor - 在此模型中,您的状态保存在键值数据结构中,您可以在其中显式保存状态。这更适合增长的状态,因为您不是每次都复制所有状态。
关于c# - 状态在有状态微服务中的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34644449/