【问题标题】:When does Service Fabric restart/clear stateService Fabric 何时重新启动/清除状态
【发布时间】:2016-05-25 06:13:14
【问题描述】:

我一直在阅读有关 Service Fabric 的内容,但我还没有弄清楚有状态服务的状态何时初始化?

如果我在本地开发,我假设每次运行应用程序时状态都是“重新启动”。 (即按 F5 进行调试)。如果我将服务部署到 Azure,我会想象这些服务将启动,并且在我下次部署时将其视为升级。这意味着服务在升级期间保持其状态。 我可能错了,如果服务或参与者对存储的状态发生更改,状态会发生什么变化?

或者我错了,需要将状态保存在某种外部存储中,以确保用户数据不会丢失。即使服务和参与者维护数据的热副本并在需要时将其持久化,以防整个系统重新启动或重新部署。

【问题讨论】:

    标签: azure-service-fabric


    【解决方案1】:

    默认情况下,状态在磁盘上是持久的(除了复制到 3 个节点),所以它应该在重启后仍然存在。

    在 Visual Studio 中按 F5 时,默认行为是删除旧应用程序并将当前版本部署为新应用程序。要维护开发集群上的状态,您可以勾选项目属性中的复选框以进行升级而不是干净部署。

    在部署到 Azure 时,您有相同的选择 - 部署新应用(并丢失状态)或部署升级以保持状态。您的状态类的新旧版本应该是兼容的,它们基于DataContract 使其更容易一些。

    当然,外部状态存储的场景也是可以的。

    【讨论】:

    • 注意:如果你在 Azure 中使用 VM 规模集,如果你拆除规模集,它的磁盘就会消失,其中存储的任何状态都会丢失。因此,您仍然应该围绕备份/恢复实施良好的程序。
    • 官方文档同意这一点;但在实践中,我认为情况并非如此。 -- 升级似乎保持状态通常 -- 但有时1或2个actor仍然会无缘无故地忘记一切;例如,重新启动我的机器会导致所有参与者的所有状态都丢失。 -- 这是一组非常令人失望的缺陷。
    • 你如何处理它想要新的版本号进行升级?我希望我的状态在部署中保持不变,但不想在每次运行时手动设置新版本号。
    猜你喜欢
    • 2019-11-19
    • 2017-09-30
    • 2019-10-16
    • 2019-02-02
    • 2021-02-01
    • 2019-03-09
    • 1970-01-01
    • 2016-03-22
    • 2016-08-12
    相关资源
    最近更新 更多