【问题标题】:Service fabric actors state服务结构参与者状态
【发布时间】:2017-12-08 02:15:49
【问题描述】:
我们计划将 Service Fabric Actor 模型用于我们的一项用户服务。我们有成千上万的用户,他们有自己的个人资料数据。通过阅读材料,Service Fabric Actor 模型通过其 Service Fabric 集群维护其状态。我无法清楚地了解灾难恢复/计划关闭场景/离线数据访问。在这种情况下,是否需要将数据持久化到这些参与者服务之外?
如果我们决定在某一天关闭所有 Service Fabric 集群,并希望在几天后重新激活,那么数据会发生什么情况?
【问题讨论】:
标签:
azure
azure-service-fabric
service-fabric-actor
【解决方案1】:
在 Azure 的 SF 群集中,数据存储在临时驱动器上。没有guarantee 关闭的节点保留临时驱动器。所以同时关闭所有节点会导致数据丢失。
为避免这种情况,您应该定期创建(参与者)服务的备份。例如使用this Nuget 包。将生成的文件存储在集群之外。
集群技术将有助于在节点发生故障时保护您的数据安全,例如在一个 5 节点集群中,剩余的 4 个健康节点可以接管故障节点的工作。数据以冗余方式存储,因此您的服务保持正常运行。相同的功能还允许滚动升级服务/参与者。
Here's 一篇关于 DR 的文章。
【解决方案2】:
我在 Service Fabric 中实现了一个大型企业应用程序,使用 Actor 模型来管理订单。
在选择数据备份和恢复策略时可能有一些帮助
- 由于包https://github.com/loekd/ServiceFabric.BackupRestore 尚未完全成熟,您需要处理一些场景。
例如:在部署期间,您的参与者分区移动到其他节点,如果您尝试进行增量备份,它将因 FabricMissingFullBackupException 而失败,因为在成为主要节点后,您没有进行完整备份,并且需要手动修复该问题。
我们如何添加重试模式来解决该问题不在此问题的范围内。
- 增量备份并不总是在恢复过程中恢复。
- 即使您正确设置了 logTruncationIntervalInMinutes,有时增量备份创建也会失败。
- 某些开发者误删除了服务或应用程序,您将丢失所有数据。
- 如果您的系统严重依赖 Reminder(在我们的例子中)。
在恢复期间,所有提醒都会重置。
好的解决方案:如果您想使用 Power BI 进行某些分析,请使用您自己的实现覆盖默认的 KvsActorStateProvider,该实现将数据存储在 DocumentDB、MongoDB、Cassandra 或 Azure SQL 中。