【问题标题】:Location of state within stateful microservices状态在有状态微服务中的位置
【发布时间】:2016-04-11 05:04:58
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# windows azure stateful azure-service-fabric


    【解决方案1】:

    状态保存在 RAM 和本地磁盘上。 Service Fabric 代表你处理群集中多个节点之间的数据复制,以确保数据持久且高度可用。您无需将数据刷新到外部存储以使其具有持久性,但如果您有大量冷数据要卸载以进行离线分析,则可以考虑这样做。

    当一个actor被停用时,它会从活动actor列表中移除,并且它的状态也会从RAM中移除,但它会继续被持久化到磁盘上。当一个停用的actor稍后被重新激活时,它的状态会从磁盘重新存储在RAM中。

    理论上没有最大状态大小,但参与者使用的复制存储和传输中有configurable size limits。演员的一般概念倾向于大量的小事情,尽管您可以找到合适的平衡来满足您的要求。

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-08
      • 2017-05-23
      • 2014-07-04
      • 2011-02-05
      • 1970-01-01
      相关资源
      最近更新 更多