服务结构:插件与应用程序类型

时间:2017-10-17 18:28:11

标签: azure-service-fabric

我正在开发一个基于Service Fabric的交易平台,它将托管数百种不同的长期运行交易算法,所有这些算法都符合通用接口并共享大量公共代码,但内部可能存在很大差异细节。我可以将每个不同的算法建模为一个应用程序类型(我会动态加载),但是考虑到大量不同的算法,我不得不怀疑是否更有意义创建一个Plugin Runner应用程序类型然后将algos实现为插件。

在一个相关的问题中,我了解如何实现插件体系结构,但是我不太确定将实际插件放在何处以便可以被Service Fabric上运行的实例发现。

无论如何,谢谢你的帮助......

2 个答案:

答案 0 :(得分:3)

  1. 我认为这两种方法都可行。使用大量应用程序类型会增加运行大量进程的(重要)开销,但允许您使用和升级同时运行的同一算法的多个版本。 使用插件方法需要您自己处理版本控制。

    使用Application方法可能需要某种请求路由器,而 插件服务可以做出自己的决定(如果它是无国籍的)。

  2. 您可以创建充当插件存储库的状态服务,或者安装文件共享或使用数据库,此处不受平台的限制。您可以使用命名约定来找到正确的插件。

答案 1 :(得分:0)

如果在更改给定应用程序实例所需的插件集时可以接受应用程序升级,则以下方法可以工作。

请记住,Service Fabric应用程序必须在部署或升级之前打包。使用msbuild任务或Powershell,您可以将插件dll复制到插件运行程序服务的代码包中,作为应用程序升级之前的后打包步骤。然后,您的插件dll将在启动时使用Assembly.Load和服务包的Context.CodePackageActivationContext.GetCodePackageObject("Your-Code-Package-Name").Path属性中可用的代码包路径提供给服务。该代码包的名称在ServiceManifest.xml中定义,默认情况下命名为Code