gpt4 book ai didi

c# - 同一节点上动态创建的服务的 Service Fabric 进程隔离

转载 作者:太空宇宙 更新时间:2023-11-03 23:04:21 26 4
gpt4 key购买 nike

我有一个 SF 应用程序类型,它包含两种服务类型——无状态 WebApi 网关服务类型和无状态 Worker 服务类型。我正在使用默认网关服务实例创建一个应用程序实例。 Gateway 服务实例使用如下代码按需动态创建 Worker 服务实例(client 变量是 System.Fabric.FabricClient 实例):

var serviceDescription = new StatefulServiceDescription()
{
ApplicationName = new Uri("fabric:/Gateway"),
ServiceName = new Uri("fabric:/Gateway/Worker-" + SomeUniqueWorkerId),
ServiceTypeName = "WorkerType",
HasPersistedState = true,
PartitionSchemeDescription = new UniformInt64RangePartitionSchemeDescription(),
MinReplicaSetSize = 1,
TargetReplicaSetSize = 1
};
await client.ServiceManager.CreateServiceAsync(serviceDescription);

当 SF 将 Worker 服务类型的两个或多个实例放置到一个节点上时,它们都共享同一个进程(即 Worker.exe)。这是有问题的,因为不同的 Worker 服务实例需要从不同的文件共享动态加载不同版本的程序集。因此,我的问题是:

是否可以强制SF在不同的进程中在一个节点上托管多个相同类型的服务实例?

(我认为 guest 可执行文件就是这样工作的。)

最佳答案

您现在可以在创建服务时指定 ServicePackageActivationMode

使用默认模式或将 ServicePackageActivationMode 设置为“SharedProcess”,所有这些服务对象将在相同的进程中运行。但是,通过指定 ExclusiveProcess,每个服务对象最终都将在其自己的进程中创建。假设您将这两个无状态服务部署在一个简单的 5 节点集群上。

使用 Shared|Default 模式,您将获得 5 个进程,每个节点一个,每个进程内部运行 2 个服务对象。使用独占模式,您将获得 10 个进程,每个节点 2 个,每个进程内部运行 1 个服务对象。


New-ServiceFabricService -Stateless -PartitionSchemeSingleton -ApplicationName "fabric:/App"-ServiceName "fabric:/App/svc"-ServiceTypeName "T1"-InstanceCount -1 -ServicePackageActivationMode ExclusiveProcess
New-ServiceFabricService -Stateless -PartitionSchemeSingleton -ApplicationName "fabric:/App"-ServiceName "fabric:/App/svc"-ServiceTypeName "T2"-InstanceCount -1 -ServicePackageActivationMode ExclusiveProcess

在你上面的例子中,你需要做的就是添加

ServicePackageActivationMode = ServicePackageActivationMode.ExclusiveProcess 添加到您的 ServiceDescription。

This是一篇很好的文档,其中详细介绍了每个模型以及如何选择适合给定情况的模型。最常见的是,我看到它用于避免共享无法从服务代码中分解出来并在主机进程层拥有的静态信息。

关于c# - 同一节点上动态创建的服务的 Service Fabric 进程隔离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41859980/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com