【问题标题】:Service fabric reliable collections data loss after service upgrade服务升级后服务结构可靠集合数据丢失
【发布时间】:2017-07-12 17:31:07
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

    标签: .net azure microservices azure-service-fabric service-fabric-stateful


    【解决方案1】:

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

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

    【讨论】:

    • 我尝试了新项目,发现这是我们的错误,服务结构有两个配置,一个用于“应用程序调试模式” - 这是“自动升级”,另一个是在服务发布之前 - 这不是设置为 MonitoredAuto,将其更改为 MonitoredAuto 并正确更新 ApplicationTypeVersion 服务中的版本。
    猜你喜欢
    • 2018-09-01
    • 1970-01-01
    • 2016-12-04
    • 2017-06-07
    • 2018-12-09
    • 2021-07-31
    • 2017-12-01
    • 2010-12-02
    • 1970-01-01
    相关资源
    最近更新 更多