状态位置在有状态的微服务中

时间:2016-01-06 22:56:43

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

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

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

例如我的演员代表一个iot设备。因此,演员在列表中收集测量值。处理国家的最佳选择是什么?我应该多久将数据刷新到一个persitent存储?在遇到性能问题或其他问题之前,服务会在一个州收集数据多长时间?

1 个答案:

答案 0 :(得分:2)

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

当一个actor被停用时,它会从活动actor列表中删除,并且它的状态将从RAM中删除,但它会继续保存到磁盘。当稍后重新激活已停用的actor时,其状态将在磁盘的RAM中重新充水。

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

鉴于此,有状态演员有两种模式:

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

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