c# - 状态在有状态微服务中的位置

原文 标签 c# windows azure stateful azure-service-fabric

借助 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 - 在这个模型中,你有一个任何类型 T 的状态对象。这最适合用于大小不会随时间增长的状态,因为整个状态对象被复制并存储在 actor 方法的末尾。如果你不断地添加状态(比如一个不断增长的列表),那么你最终会遇到与 Shlemiel the painter 相同的性能问题。 .

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

关于c# - 状态在有状态微服务中的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34644449/

相关文章:

对于相同的网络路径,Python os.path.exists 在 Windows 10 上返回 false,在 Windows 7 上返回 true

c# - 在运行时在Azure Service Fabric中更改配置

c# - 使用 DataSet 处理分页和 "lazy-loading"?

c# - 如何在WPF中右对齐RadioButton

c# - 使用 Objective Sharpie 将 Spotify iOS SDK 绑定(bind)到 C#

c# - 无法在 Visual Studio 之外启动 UWP 可执行文件

c++ - 搜索.exe的路径

json - 如何使用 Azure 函数 Node.js 读取 Json 文件

powershell - 如何列出Azure存储容器和Blob

c# - 发送电子邮件system.web.httpexceptions时发生错误:无法将邮件发送到smtp服务器