创建应用程序实例(在服务结构集群资源管理器中)忽略本地计算机上的实例数
Posted
技术标签:
【中文标题】创建应用程序实例(在服务结构集群资源管理器中)忽略本地计算机上的实例数【英文标题】:Create app instance (in service fabric cluster explorer) ignores number of instances on local machine 【发布时间】:2017-07-23 23:37:39 【问题描述】:-
使用 5.1.163 版本的 Service Fabric 运行时。
使用一个无状态 Web api(即使用 owin 通信侦听器)创建了一个服务结构应用程序。
修改了生成的代码,使监听端点包含分区 id/instance id/new_guid(就像有状态服务的情况一样)。这应该允许我创建另一个应用程序实例,以便我可以在应用程序级别进行多租户。
默认情况下,Local.xml 文件为此服务设置为 1 个实例。
按 F5 将其部署到本地计算机。已验证它仅部署到一个实例。
已验证服务工作正常。
导航到本地服务结构资源管理器并单击 Cluster/Application/AppType 节点。点击“创建应用实例”。
它成功创建了第二个应用实例。
但是在这个新实例中,服务被部署到所有 5 个节点。
我期待它只部署一个节点的服务实例。这是一个错误吗?但仅在此版本的服务结构中?
【问题讨论】:
【参考方案1】:当您使用 Visual Studio(或从 PowerShell)部署 Service Fabric 应用程序时,您使用为您的应用程序生成的 Deploy-FabricApplication.ps1
并在您的 SF 项目下的 /scripts
中找到。这个脚本做了两件事(主要):
-
创建/更新应用程序类型
新建/升级应用类型的现有实例
第二部分与您在 SF Explorer 中执行的操作类似,除了这一部分还考虑了您提供的发布者配置文件。 PS 脚本实际上会读取您的发布者配置文件 xml 文件并将其中的任何参数提取到哈希集(字典)中,并将其作为参数传递到第 2 步。
您可以使用 PS cmdlet 创建 SF 应用程序类型的实例(或者您可以使用 FabricClient)。以下命令执行此操作:New-ServiceFabricApplication。在这里,您有机会提供自己的应用程序参数,包括 instance count
用于新应用程序实例中的服务(如果您的应用程序清单中有动态参数)。
因此,当您使用 SF 资源管理器创建新的应用程序实例时,您无法控制该实例的创建方式,它始终使用直接在 ApplicationManifest.xml 中指定的默认参数值,而不是您在发布者中指定的值配置文件(local1、local5、云等)。
要控制创建,请运行New-ServiceFabricApplication
,并将你的参数作为哈希集。
【讨论】:
简单地说,通常我们建议人们在生产场景中远离默认服务,因为它们有点难以正确处理(如本例所示)。这是一个示例,显示了动态创建和销毁服务所需的命令。脚本在这里:github.com/Azure-Samples/service-fabric-dotnet-data-aggregation/… 感谢@masnider 的分享。当您说您建议在生产场景中远离默认服务时,您的意思是:远离使用 Deploy-FabricApplication.ps1(直接或间接)以外的任何事情,或者如:不要使用默认服务 n生产场景? 后者,虽然今天这也意味着默认的 Deploy-FabricApplication 不能完全工作 - 您最终会得到一个没有任何内容的应用程序实例。就我个人而言,我发现完全明确地定义事物更容易、更清晰。还有很多情况下,能够动态创建和删除服务和应用程序可以更轻松地解决特定问题(例如:为刚注册的客户提供新服务)——这是我们见过的一个很好的模式各种各样的东西。 另外,我们正在努力为应用程序和服务实例定义一个真正的声明格式,这将解决您遇到的一堆问题,因为实例信息卡在应用程序类型中就像今天一样,无需强迫您将所有内容都转向脚本(有些人不喜欢它,因为它势在必行,您必须自己处理所有失败案例)。 还有github.com/Microsoft/vsts-tasks/tree/master/Tasks/… 用于当您想要动态创建事物作为 CI/CD 管道的一部分时。以上是关于创建应用程序实例(在服务结构集群资源管理器中)忽略本地计算机上的实例数的主要内容,如果未能解决你的问题,请参考以下文章
将服务结构应用程序部署到公共服务结构集群后出现“分区低于目标副本或实例计数”错误