0

为什么微服务升级后可靠集合为空,不调用事件 OnDataLossAsync 从外部备份恢复状态?

我们有基于有状态服务的大规模系统

<StatefulServiceType ServiceTypeName="UserServiceType" HasPersistedState="true" />

HasPersistedState 设置为 true,并且数据跨副本复制,以防 VM 故障数据仍然有效并使用 OnDataLossAsync 进行恢复,但升级后集合为空。

我已经尝试了所有升级选项(删除、保留、自动升级)应用程序,结果相同 - 集合为空。

目前我们决定将数据复制到 blob 存储并在服务更新后恢复它,这不是完美的解决方案,数据恢复需要几分钟,并且在此期间会导致某些服务不可用/不一致。

因此,我们正在寻找允许在升级后保存数据的解决方案。

4

1 回答 1

3

升级有状态服务不会删除Reliable Collection 中的数据。整个 Service Fabric 平台都是围绕通过有状态服务的就地滚动升级来解决这个问题而构建的。

我的猜测是您要么实际上没有执行滚动升级,而是删除并重新创建服务。这就是 Visual Studio 应用程序调试模式中默认的“删除应用程序”设置的作用——它会在您停止调试时删除应用程序(从而删除状态)。“自动升级”选项不会删除应用程序,并会在您下次按 F5 时自动为您执行滚动升级。如果在这种情况下您的状态消失了,那么我敢打赌您的服务代码中存在错误。尝试使用全新的有状态服务项目。

于 2017-02-22T22:57:22.253 回答