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 的一般概念倾向于大量的小事情,尽管这取决于您找到适当的平衡来满足您的要求。

鉴于此,有状态参与者有两种模型:

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

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

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

相关文章:

azure - 在 Azure 中验证应用服务证书时出现问题

c# - 使用 Azure 聊天机器人时如何仅存储用户响应

c# - 如何在 C# 中的 datagridview 中找到最接近的值?

c# - 用户是通过 UI 更改了该值,还是通过依赖属性更改了该值?

C#:当只有项目名称的一部分已知时,如何找到项目的索引

c - 如何插值 HSV 颜色?

c# - 如何在不更改数据库中的真实数据的情况下知道我的查询是否有错误?

python - 无法安装 Numpy

windows - 在 Windows 10 上安装 spaCy 不起作用

c# - Azure Blob 存储 blob 到索引