【问题标题】:Running Multiple Application Instances and Configurations Side by Side on an Azure Service Fabric Cluster在 Azure Service Fabric 群集上并行运行多个应用程序实例和配置
【发布时间】:2017-09-03 09:51:15
【问题描述】:

我有一个 Service Fabric 应用程序,其中包含多个服务,可以在 Azure 上为“Dev”、“Test”、“Stage”和“Production”配置。

我的目标是为我的“测试”和“阶段”环境创建 1 个集群,为“生产”环境创建另一个集群。显而易见的原因是为了节省成本!

我正在使用 Visual Studio Online Build/Release。这是我遇到问题的地方:

我可以更新“阶段”的配置设置并部署到我的集群 - 但是,由于应用程序名称将与现有的“测试”应用程序相同,因此它会使用新的配置更新覆盖该集群上的该应用程序“舞台”。

显然,我可以从 Service Fabric Explorer 中“创建应用程序实例” - 但我无法以这种方式注入新配置 - 只能为该实例设置一个新名称,该名称将运行另一个配置为相同的实例基地。

所以我想 - 好吧,我只需上传具有不同配置的新版本并从 Explorer 部署实例 - 但这不仅看起来很乱,它还试图升级我正在运行的现有应用程序。

我还需要使用每个应用程序实例重新配置每个服务的端口,以便它们都可以存在于同一个集群中并位于同一个负载均衡器后面,但似乎没有办法覆盖 ServiceManifest 中的节点。 ...

所以我的问题是: 管理和隔离具有单独配置和服务端口的多个应用程序实例的最佳做法是什么,以便您可以将一个配置为“测试”,另一个配置为“阶段” “并且都住在同一个集群中?

【问题讨论】:

  • 出于同样的原因,我做的和你一样。有什么智慧之言或文章对您有所帮助吗?

标签: .net azure azure-devops azure-service-fabric azure-deployment


【解决方案1】:

你在正确的轨道上。我总是推荐一个用于开发/测试/登台的集群和一个用于生产的单独集群。

诀窍实际上是为每个部署创建新的应用程序实例,并通过应用程序参数提供新的配置值。 Service Fabric Explorer 尚未公开这一点,但您可以使用 SF 管理 API 来实现:

为每个环境创建新的应用程序类型或版本很麻烦,而且并不是真正的预期用例。

【讨论】:

  • 谢谢瓦茨拉夫。是否有关于何时在 SF Explorer 中公开的路线图?我假设这种情况需要为每个配置需要它们的任何服务设置不同的端口 ID?有没有关于如何最好地实现这一目标的文档?
【解决方案2】:

我已经设法使用 ApplicationParameter xml 文件来做到这一点,并在 VSTS 中部署期间选择了正确的文件。 例如,这是我用于部署到我的测试环境的 Cloud.xml。诀窍是第二行的 Name 参数。我已经使用此文档指定了端口:https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-how-to-specify-port-number-using-parameters

<?xml version="1.0" encoding="utf-8"?>
<Application xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="fabric:/DotNetCoreTest" xmlns="http://schemas.microsoft.com/2011/01/fabric">
  <Parameters>
    <Parameter Name="Web1_InstanceCount" Value="2" />
    <Parameter Name="ServiceEndpoint_PortNumber" Value="8909" />
  </Parameters>
</Application>

这是 Staging 的 xml 文件:Staging.xml

<?xml version="1.0" encoding="utf-8"?>
<Application xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="fabric:/DotNetCoreStaging" xmlns="http://schemas.microsoft.com/2011/01/fabric">
  <Parameters>
    <Parameter Name="Web1_InstanceCount" Value="2" />
    <Parameter Name="ServiceEndpoint_PortNumber" Value="8910" />
  </Parameters>
</Application>

【讨论】:

    【解决方案3】:

    目前我一直在通过拥有 2 个解决方案副本来做到这一点,我将在其中更改以下参数

    1. ApplicationPackageRoot 文件夹内 ApplicationManifest.xml 中的 ApplicationTypeName
    2. ApplicationParameters 文件夹内 Cloud.xml 文件中的名称。
    3. WebAPI 项目 PackageRoot 文件夹内 ServiceManifest.xml 文件中的端口。

    如果有更好的方法,请告诉我,因为我必须将 .NET 应用程序部署到 Linux Service Fabric Cluster 中。我用 Visual Studio 做不到。

    【讨论】:

      猜你喜欢
      • 2016-09-28
      • 2017-10-01
      • 2018-02-24
      • 2023-03-10
      • 2017-06-04
      • 2017-12-09
      • 2015-08-08
      • 2016-12-06
      • 1970-01-01
      相关资源
      最近更新 更多