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

Azure service fabric 服务结构:插件与应用程序类型,azure-service-fabric,Azure Service Fabric,我正在开发一个基于服务结构的交易平台,该平台将承载数百种不同的长期运行的交易算法,所有这些算法都符合一个通用接口,共享大量通用代码,但它们的内部细节可能大不相同。我可以将每个不同的算法建模为一个应用程序类型(我会动态加载),但是考虑到大量不同的算法,我不得不想,创建一个插件运行程序应用程序类型然后将算法实现为插件是否更有意义 在一个相关的问题中,我一般理解如何实现插件体系结构,但我不太确定将实际插件放置在何处,以便运行在服务结构上的实例能够发现 无论如何,谢谢你的帮助 我认为这两种方法都能奏效。

我正在开发一个基于服务结构的交易平台,该平台将承载数百种不同的长期运行的交易算法,所有这些算法都符合一个通用接口,共享大量通用代码,但它们的内部细节可能大不相同。我可以将每个不同的算法建模为一个应用程序类型(我会动态加载),但是考虑到大量不同的算法,我不得不想,创建一个插件运行程序应用程序类型然后将算法实现为插件是否更有意义

在一个相关的问题中,我一般理解如何实现插件体系结构,但我不太确定将实际插件放置在何处,以便运行在服务结构上的实例能够发现

无论如何,谢谢你的帮助

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

    使用应用程序方法可能需要某种请求路由器,而 插件服务可以自行决定(如果是无状态的)

  • 您可以创建一个作为插件存储库的有状态服务,或者挂载一个文件共享,或者使用一个数据库,这里没有平台的限制。您可以使用命名约定来定位正确的插件


  • 如果在更改给定应用程序实例所需的插件集时,您可以接受应用程序升级,那么以下方法可能会起作用


    回想一下,Service Fabric应用程序必须在部署或升级之前打包。使用msbuild任务或Powershell,您可以在应用程序升级之前将插件DLL复制到插件运行程序服务的代码包中,作为后期打包步骤。然后,您的插件DLL将在服务启动时使用
    Assembly.Load
    和代码包的路径(可在您的服务实现的
    Context.CodePackageActivationContext.GetCodePackageObject(“您的代码包名称”).path
    属性中找到)对服务可用。代码包的名称在
    ServiceManifest.xml
    中定义,默认情况下命名为
    code

    感谢您快速而有用的回答。你知道在哪里/如何放置插件,以便Azure Service Fabric在运行时找到它们吗?我在想这件事的细节…可能是这样的:当请求algo“AV1”时,寻找一个名为“A”和版本“1”的程序集。从存储库下载程序集(如上面的2所示),将其放入您的工作目录中,并使用assembly.load加载它(“a,Version=1.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”);使用反射查找并实例化它。您还可以在代码旁边部署“文件”。所有服务都有2个随应用程序部署的数据包,“代码”和“配置”。这些包的版本是独立的,可以独立部署。此外,您可以将自己的包以相同的样式添加到一个服务中,在该服务中您可以拥有自己的插件。然后,您可以独立于代码来部署和版本这个包。请查看此处以了解更多信息: