运行 Azure Service Fabric 群集上并排的多个应用程序实例和配置
Running Multiple Application Instances and Configurations Side by Side on an Azure Service Fabric Cluster
我有一个包含多个服务的 Service Fabric 应用程序,可以在 Azure 上为 "Dev"、"Test"、"Stage" 和 "Production" 配置这些服务。
我的目标是为我的 "Test" 和 "Stage" 环境建立 1 个集群,为 "Production" 建立另一个集群。显而易见的原因是为了节省成本!
我正在使用 Visual Studio 在线 Build/Release。这是我 运行 遇到问题的地方:
我可以更新 "Stage" 的配置设置并部署到我的集群 - 但是由于应用程序名称将与现有 "Test" 应用程序相同,它会覆盖该集群上的该应用程序"Stage".
的新配置更新
显然我可以 "Create App Instance" 从 Service Fabric Explorer 中 - 但我无法以这种方式注入新配置 - 只能为该实例设置一个新名称,这将 运行另一个配置与基础相同的实例。
所以我想 - 好吧,我将上传具有不同配置的新版本并从 Explorer 部署实例 - 但这不仅看起来很乱,它仍然试图升级我现有的应用程序 运行宁.
我还需要使用每个应用程序实例为每个服务重新配置我的端口,以便它们都可以存在于同一个集群中并位于同一个负载均衡器后面,但似乎没有办法覆盖服务清单....
所以我的问题是:有什么最佳实践可以管理和隔离具有单独配置和服务端口的多个应用程序实例,以便您可以为 [=32 配置一个=] 和另一个 "Stage" 并且都住在同一个集群中?
你走在正确的轨道上。我总是为 dev/test/staging 推荐一个集群,为生产推荐一个单独的集群。
诀窍实际上是为每个部署创建新的应用程序实例,并通过应用程序参数提供新的配置值。 Service Fabric Explorer 尚未公开此内容,但您可以使用 SF 管理 API 进行公开:
- HTTP:create application command
- PowerShell:New-ServiceFabricApplication
- C#: FabricClient.ApplicationManager.CreateApplicationAsync
为每个环境创建新的应用程序类型或版本很麻烦,并不是真正的预期用例。
我已经设法使用 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>
这是用于暂存的 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>
目前,我一直在使用 2 份解决方案,我将在其中更改以下参数
- ApplicationTypeName in ApplicationManifest.xml inside ApplicationPackageRoot folder
- ApplicationParameters 文件夹内 Cloud.xml 文件中的名称。
- WebAPI 项目的 PackageRoot 文件夹内 ServiceManifest.xml 文件中的端口。
如果有更好的方法,请告诉我,因为我必须将 .NET 应用程序部署到 Linux Service Fabric 集群中。我无法使用 Visual Studio.
我有一个包含多个服务的 Service Fabric 应用程序,可以在 Azure 上为 "Dev"、"Test"、"Stage" 和 "Production" 配置这些服务。
我的目标是为我的 "Test" 和 "Stage" 环境建立 1 个集群,为 "Production" 建立另一个集群。显而易见的原因是为了节省成本!
我正在使用 Visual Studio 在线 Build/Release。这是我 运行 遇到问题的地方:
我可以更新 "Stage" 的配置设置并部署到我的集群 - 但是由于应用程序名称将与现有 "Test" 应用程序相同,它会覆盖该集群上的该应用程序"Stage".
的新配置更新显然我可以 "Create App Instance" 从 Service Fabric Explorer 中 - 但我无法以这种方式注入新配置 - 只能为该实例设置一个新名称,这将 运行另一个配置与基础相同的实例。
所以我想 - 好吧,我将上传具有不同配置的新版本并从 Explorer 部署实例 - 但这不仅看起来很乱,它仍然试图升级我现有的应用程序 运行宁.
我还需要使用每个应用程序实例为每个服务重新配置我的端口,以便它们都可以存在于同一个集群中并位于同一个负载均衡器后面,但似乎没有办法覆盖服务清单....
所以我的问题是:有什么最佳实践可以管理和隔离具有单独配置和服务端口的多个应用程序实例,以便您可以为 [=32 配置一个=] 和另一个 "Stage" 并且都住在同一个集群中?
你走在正确的轨道上。我总是为 dev/test/staging 推荐一个集群,为生产推荐一个单独的集群。
诀窍实际上是为每个部署创建新的应用程序实例,并通过应用程序参数提供新的配置值。 Service Fabric Explorer 尚未公开此内容,但您可以使用 SF 管理 API 进行公开:
- HTTP:create application command
- PowerShell:New-ServiceFabricApplication
- C#: FabricClient.ApplicationManager.CreateApplicationAsync
为每个环境创建新的应用程序类型或版本很麻烦,并不是真正的预期用例。
我已经设法使用 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>
这是用于暂存的 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>
目前,我一直在使用 2 份解决方案,我将在其中更改以下参数
- ApplicationTypeName in ApplicationManifest.xml inside ApplicationPackageRoot folder
- ApplicationParameters 文件夹内 Cloud.xml 文件中的名称。
- WebAPI 项目的 PackageRoot 文件夹内 ServiceManifest.xml 文件中的端口。
如果有更好的方法,请告诉我,因为我必须将 .NET 应用程序部署到 Linux Service Fabric 集群中。我无法使用 Visual Studio.