我应该在代码或清单文件中的哪个位置添加ServicePlacementPreferPrimaryDomainPolicyDescription?

时间:2017-12-29 19:04:44

标签: azure-service-fabric

我有一个群集跨区域,我想指定首选域。问题是查看https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-cluster-resource-manager-advanced-placement-rules-placement-policies中的示例代码,我不知道serviceDescription来自哪里。任何人都知道我的服务结构服务代码库中应该有哪些代码?

此外,是否有类似的方法在服务结构清单文件中指定它而不是代码更改(就像人们如何指定前端/后端放置一样)?

谢谢,

2 个答案:

答案 0 :(得分:1)

使用此代码更改服务说明:

FabricClient fabricClient = new FabricClient();
StatefulServiceDescription serviceDescription = new StatefulServiceDescription();
serviceDescription.PlacementConstraints = "(HasSSD == true && SomeProperty >= 4)";
await fabricClient.ServiceManager.CreateServiceAsync(serviceDescription);

(来源here

根据XSD,您可以将它们定义为xml,类似于放置约束。

C:\ Program Files \ Microsoft SDKs \ Service Fabric \ schemas \ ServiceFabricServiceModel.xsd

答案 1 :(得分:0)

根据MS Docs,您当然可以按代码配置它,如下所示:

FabricClient fabricClient = new FabricClient();
StatefulServiceDescription serviceDescription = new StatefulServiceDescription();
serviceDescription.PlacementConstraints = "(HasSSD == true && SomeProperty >= 4)";
// add other required servicedescription fields
//...
await fabricClient.ServiceManager.CreateServiceAsync(serviceDescription);

关于您从何处执行此操作的问题-根据您的需要,有几种选择:

  • 编写一个单独的应用程序,使其作为CI / CD部署管道的一部分运行(或通过powershell New-ServiceFabricService来运行) 这种方法的问题在于,对于开发人员来说,在每次部署后都必须运行此操作有点烦人-因此我更喜欢:
  • 写一个默认情况下实例化的无状态服务(即,在<DefaultServices>中的ApplicationManifest.xml内放置一个条目)。然后,您可以在此服务中使用FabricClient,策略,指标来实例化/修改展示位置约束,并通过应用程序参数/配置来驱动这些约束
  • 通过您的API网关延迟实例化服务。对于分区/有状态服务(例如,如果按tenantid分区)或要维护工作池(例如partition_id = random_number % pool size)的地方,此方法特别有用。

您还可以通过应用程序参数配置放置约束declaratively。不幸的是,这似乎不适用于展示位置政策的atm(而且可能也不适用于metrics)。

如果您的需求很简单,那么声明方法可能是最简单的!按照上面的链接,在您的应用清单文件中添加一个[Stateless1_InstanceCount]参数,并将其放在默认服务下:

<DefaultServices>
  <Service Name="Stateless1">
    <StatelessService ServiceTypeName="Stateless1Type" InstanceCount="[Stateless1_InstanceCount]">
      <SingletonPartition />
      <PlacementConstraints>[Stateless1_PlacementConstraints]</PlacementConstraints>
    </StatelessService>
  </Service>
</DefaultServices>