Azure Service Fabric - 外部状态管理器

Posted

技术标签:

【中文标题】Azure Service Fabric - 外部状态管理器【英文标题】:Azure Service Fabric - External State Manager 【发布时间】:2018-07-22 12:52:49 【问题描述】:

作为概念验证的一部分,我们尝试将 ASF 可靠服务或 Actor 状态存储在持久数据存储(如 MongoDB 或 DocumentDB)中。

这个想法是提供一个自定义状态管理器,它将数据存储在数据库中,而不是内存(或磁盘,或任何 ASF 所做的)中。

到目前为止,我们无法找到说明如何在创建 Reliable Service 或 Actor 时向 ASF 提供自定义状态管理器的指南文档。

非常感谢任何帮助。

【问题讨论】:

【参考方案1】:

当您注册您的 Actor 类型时,您可以为其指定自己的自定义 ActorService。在这个 ActorService 中,你可以注入你自己的IActorStateManagerIActorStateProvider。修改Program.cs:

            ActorRuntime.RegisterActorAsync<CustomActor>((context, actorType) => 
                new CustomActorService(context, actorType,
                    /* Inject a factory that creates StateManagers here */
                    stateManagerFactory: (actorBase, provider) => new CustomActorStateManager(actorBase, provider),
                    /* Inject a custom state provider here */
                    stateProvider: new CustomStateProvider()
               )
                ).GetAwaiter().GetResult();

有状态服务非常相似。

【讨论】:

感谢@HiredMind 的回答。事实上,我们已经发现我们可以注入自定义状态提供程序。问题是由于接口的复杂性,我们不知道如何正确实现它们。我们正在寻找教程或指南,但似乎没有。也许是因为 ASF 在某种程度上是新的。【参考方案2】:

内置状态管理器是高度专业化的(磁盘、内存、仲裁),我建议在不同存储中存储数据时使用“常规”方式 (api)。

因此,对于 DocumentDb,您只需使用 client,就像在任何其他程序中一样。

【讨论】:

感谢您的回答。但是,我不是在谈论将业务信息存储在外部数据库上,而是存储服务状态。

以上是关于Azure Service Fabric - 外部状态管理器的主要内容,如果未能解决你的问题,请参考以下文章

Azure Service Fabric 中的有状态服务和外部持久性之间的转换

了解何时使用有状态服务以及何时依赖 Azure Service Fabric 中的外部持久性

如何为现有的本地集群配置和启用 Azure Service Fabric 反向代理?

Azure Service Fabric 与 Azure Service Fabric Mesh

aZURE Service Fabric

Azure Service Fabric:无法运行本地 Service Fabric 群集