【问题标题】:Where should I add ServicePlacementPreferPrimaryDomainPolicyDescription in code or manifest file?我应该在代码或清单文件中的哪里添加 ServicePlacementPreferPrimaryDomainPolicyDescription?
【发布时间】:2018-10-17 13:27:20
【问题描述】:

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

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

谢谢,

【问题讨论】:

    标签: azure-service-fabric


    【解决方案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

    【讨论】:

    • 酷,xsd 就是我要找的东西!如果我使用代码,是否应该编写为控制台应用程序并在服务部署后运行它?
    • 您可以使用小型控制台应用程序或 PowerShell,并将其作为 SetupEntryPoint 运行。 docs.microsoft.com/en-us/azure/service-fabric/…
    【解决方案2】:

    根据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 网关延迟实例化服务。这对于分区/有状态服务(例如,如果您按租户 ID 分区)或您想要维护工作人员池(例如 partition_id = random_number % pool size)等特别有效。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多