【问题标题】:Retaining and Migrating Actor / Service State保留和迁移参与者/服务状态
【发布时间】:2017-10-19 00:03:02
【问题描述】:

我一直在考虑将服务结构用作我们正在构建的新解决方案的平台,并且我对数据/阶段管理很感兴趣。我真的很喜欢可靠服务和参与者模型的概念,而且我们已经开始对一些东西进行原型设计,它似乎运作良好。

有人说我对状态管理以及如何在“真实”项目中使用它感到困惑。我也有点担心数据感觉就像一个黑匣子,如果需要,我无法直接询问或操作。我考虑过的几个场景是:

  1. 如何在项目的两个开发人员之间共享状态?我有一个演员,只要我在调试演员,我的状态就会被维护、复制等。但是当我关闭它时,状态就会全部丢失。更重要的是,我团队中的其他人需要设置与我相同的数据,这对于交易数据来说很好 - 但某些“主”数据应该是不变的。

  2. 同样,我很好奇如何在环境之间迁移数据更改。今天,我们会定期从 SQL Azure 实例中提取生产数据以保持测试环境的新鲜度,我们还会根据发布的要求不时推送更改。

我看过备份和恢复的过程,但是感觉很麻烦,尤其是在开发场景中。要求某人(或编写脚本)恢复每个有状态服务的每个分区似乎是一项相当多的工作。

我认为这两个问题的答案是我可以使用有状态服务,但我需要依赖外部数据存储来存储我想要保留的任何内容。该服务将在激活时检查状态,并将有状态服务几乎用作直写缓存。我并不是说这需要是一个统一的设计选择,更多的是基于服务的服务 - 取决于服务需求。

听起来对吗,我是不是想多了,遗漏了什么等等?

谢谢

【问题讨论】:

    标签: azure-service-fabric


    【解决方案1】:
    1. 如果您想在开发人员之间共享 Actor 状态,您可以使用共享集群。 (在 Azure 或本地)。确保您始终执行upgrade-style 部署,这样状态才能生存。如果您 configure Actor 这样做,则状态将保持不变。

    2. 您可以通过对服务的所有副本执行backup 并将它们还原到不同的集群来迁移数据。 (让服务运行并触发数据丢失)。这很麻烦是的,但目前这是唯一的方法。 (或在外部存储状态)

    请注意,集群中的状态是安全的,它存储在磁盘上并进行复制。只要您定期进行状态备份并将它们保存在集群之外,就不需要外部存储。有状态服务不仅仅是缓存。

    【讨论】:

    • 感谢您的回答,我认为我的选择是这样的。升级风格的部署是一个有趣的选择,我将不得不研究它。现在我已经为某些将状态推送到文档数据库的参与者创建了一个状态提供程序。
    猜你喜欢
    • 2017-12-08
    • 2018-03-06
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    • 2017-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多