2016-08-15 103 views
2

我有一个“微”足够的无状态服务,我想在我的Fabric群集中为每个节点运行其中的几个。这是尤其如此,因为看起来一个节点相当于服务结构世界中的一个虚拟机(本地开发群集除外)。默认情况下,服务结构似乎预计在给定节点上运行每个服务的最大数量之一。如果我将InstanceCount设置为大于可用节点的数量,则会收到警告,表明没有足够的节点可用来满足所请求的实例数量。如何为每个节点部署相同服务类型的多个实例?

我可以通过创建给定服务类型的多个命名服务并单独为每个命名服务设置InstanceCount来解决此问题。这是完成这项工作的正确方法,还是我错过了某些明显的东西?

+1

通过在一个节点上运行多个实例可获得什么?它不会给你更好的性能,因为服务的资源使用不受限制/限制。可用性不会显着增加。 – LoekD

+0

为了更好地利用VM的资源。而且我必须想象,有许多进程做同样的事情会导致性能的提高,而不是只有一个。每个进程都使用NuGet软件包读取和处理来自服务总线的消息,我相信:) – ktam33

+1

cool :)如果您的服务是I/O绑定的并且无法使用一个实例的所有可用带宽,添加服务类型的多个实例 - 就像您所说的那样 - 将会起作用。 – LoekD

回答

4

听起来像你只是需要更多的服务分区?您是否尝试过使用其他分区模式,而不是服务的默认单分区。

它会为每个分区运行一个.exe文件。请记住,如果他们使用任何通信并在端口上侦听,则需要使用可以共享端口或使用每个分区的多个端口的端口。

+2

我最终选择了这种方法。多个命名服务也可以工作,但使用分区看起来更直接。 – ktam33

4

是的,你需要为无状态服务类型创建多个实例(又名命名服务)。

对于无状态服务,“实例”一词被重载。对于任何类型的服务(有状态或无状态),您可以创建一个或多个服务类型的“实例”(又名“命名服务”)。有状态服务的一个实例获取一组副本,并且无状态服务的一个实例获得一组“实例”(有一个术语超载!)。换句话说,在这两种情况下,你都会得到一组属于服务实例(命名为service)的东西,并且将在整个节点上分布,从不分组在单个节点上。如果创建服务类型的另一个实例(命名服务),该服务类型具有自己的一组事物,它们可以与另一个实例(命名服务)组合在同一个节点上,事实上,同一服务的实例(命名服务)类型甚至会在同一个节点上运行时共享相同的主机进程(.EXE)。

+0

你能指点我们这个命名服务的例子吗?谢谢! – alltej

+0

“命名服务”仅仅是我用来描述服务实例以帮助解释Service Fabric术语的一个不同术语。创建服务实例并为其命名时,例如“fabric:/ MyApp/MyService” - 这是一个“命名服务”。 –

+0

感谢您的澄清。 – alltej

相关问题