Azure service fabric 将元数据发布到服务结构

Azure service fabric 将元数据发布到服务结构,azure-service-fabric,Azure Service Fabric,所以,我有一个我正在研究的想法,即一些节点上的服务需要在运行时根据它们可能发布的元数据动态地发现其他服务。我正试图找出解决这个问题的最佳方法 其中一些元数据将在运行时从本地计算机中发现,但随后必须将其发布到结构中,以便其他服务可以对其做出决策 我在ServiceManifests中看到了扩展内容。这是一个良好的开端。但您似乎无法在运行时更改或添加扩展。那太好了 想象一下我的用例。我在一个结构上有很多机器,其中部署了很多服务。我宣传的是特定机器可能支持的音频编解码器。某些节点具有DirectSho

所以,我有一个我正在研究的想法,即一些节点上的服务需要在运行时根据它们可能发布的元数据动态地发现其他服务。我正试图找出解决这个问题的最佳方法

其中一些元数据将在运行时从本地计算机中发现,但随后必须将其发布到结构中,以便其他服务可以对其做出决策

我在ServiceManifests中看到了扩展内容。这是一个良好的开端。但您似乎无法在运行时更改或添加扩展。那太好了

想象一下我的用例。我在一个结构上有很多机器,其中部署了很多服务。我宣传的是特定机器可能支持的音频编解码器。某些节点具有DirectShow。因此,他们将发布可用的本地编解码器。一些机器正在运行32位服务,并发布他们拥有的32位DirectShow编解码器。这实际上是我所需要的,因为我有一些只运行32位的专有ACM编解码器。有些机器是Linux机器,希望提供他们的GStreamer编解码器

每个服务都需要发布相关的元数据,说明它们可以做什么,以便其他服务可以从该元数据中串出一个关于如何处理给定媒体文件的图表

然后,每个服务器都会很好地报告其运行状况和负载信息,这样结构就可以确定如何进行扩展


这些服务中的每一个都支持相同的iSeries接口,但每一个都只能由根据发布的元数据决定使用它们的客户端使用。

在Service Fabric中,考虑此类问题的方式是从服务的角度,而不是从机器的角度。换句话说,集群中的每个服务支持什么,而不是每台机器支持什么。通过这种方式,您可以使用许多ServiceFabric内置的服务发现和查询功能,因为平台提供的抽象实际上是关于服务的,而不是关于机器的

一种方法是使用放置约束和服务实例来表示集群作为一个整体支持的每个编解码器。这意味着您将拥有一个服务实例,该实例表示仅在支持该编解码器的计算机上运行的编解码器。下面是一个简化的示例:

假设我有一种叫做AudioProcessor的服务类型,它使用任何可用的编解码器进行一些音频处理

让我们在集群中有5个节点,其中每个节点支持编解码器A、B、C、D和E中的一个。我将用一个节点属性标记每个节点,该属性对应于它支持的编解码器。一个节点属性可以是我想要的任何字符串。注意:这假设集群的所有者我知道每台机器支持的编解码器

现在我可以创建5个AudioProcessor服务类型的实例,每个编解码器一个。因为每个实例都获得一个URI格式的唯一服务名称,所以我可以创建一个包含编解码器名称的层次结构,以便通过service Fabric的内置命名服务和查询工具进行发现,例如。,fabric:/AudioApp/Processor/A用于编解码器A。然后,我对每个实例使用与我在每个节点上设置的节点属性相对应的放置约束,以确保由服务实例表示的编解码器在节点上可用

以下是部署所有内容时的情况:

节点1-编解码器:实例:fabric/AudioApp/Processor/A

节点2-编解码器:B实例:结构/AudioApp/Processor/B

节点3-编解码器:C实例:fabric/AudioApp/Processor/C

节点4-编解码器:D实例:结构/AudioApp/Processor/D

节点5-编解码器:E实例:fabric/AudioApp/Processor/E

所以现在我可以做如下事情:

通过查询AudioProcessor服务实例列表并检查它们的名称(类似于获取HTTP API中的URI列表),查找群集支持的所有编解码器。 通过解析结构:/AudioApp/AudioProcessor/B向支持编解码器B的服务发送处理请求 通过添加更多支持编解码器C的机器来扩展编解码器C的处理能力-服务结构将自动在新节点上放置新的C音频处理器实例。 添加支持多个编解码器的计算机。通过在其上使用多个节点属性,服务结构将自动在其上放置正确的服务实例。
消费者现在对这个应用程序的看法是,有支持编解码器E的服务吗?或者我需要与服务A、C和D沟通以处理此文件,因为他们有我需要的编解码器。

所以,我喜欢这个想法。但是,它确实留下了关于动态发现的未解之谜。在发现本地编解码器后,有没有一种好方法可以动态地将服务引入集群?@vaclav turecek如何实现这一点?在实例上指定元数据的正确方法是什么?我在哪里可以找到文档 如何操纵服务/应用程序来实现这一点?谢谢