我正在尝试让我的示例WCF服务在内部部署的HPC 2012 SP1群集上运行。它是2012 HPC WCF应用程序。我的测试服务部署到
中的所有Compute节点群集和配置文件也部署在头节点上。在我的客户端应用程序中,我在我的服务代理客户端上使用BrokerClient包装器。使用HPC群集
经理我可以看到我的服务被调用并运行,但速度非常慢,他需要大约5分钟才能完成执行(这是一个简单的测试服务,没有强化
操作)。而且在我的客户端应用程序中,我在任务在集群上执行完毕后会出现以下错误:
"由于失去心跳,经纪人无法使用。 确保您可以连接到代理节点,HpcBroker服务正在代理节点上运行,并且会话仍在运行。"
这是我的客户代码:
SessionStartInfo info = new SessionStartInfo(this.textBox1.Text, this.textBox2.Text);
info.SessionResourceUnitType = SessionUnitType.Core;
info.Secure = false;
info.MinimumUnits = 1;
info.MaximumUnits = 1;
using (Session s = Session.CreateSession(info))
{
NetTcpBinding binding = new NetTcpBinding(SecurityMode.None, false);
using (BrokerClient<IHpcTestService> client = new BrokerClient<IHpcTestService>(s, binding))
{
ApplyCalculationsRequest request = new ApplyCalculationsRequest("test");
client.SendRequest<ApplyCalculationsRequest>(request);
client.EndRequests();
foreach (var resp in client.GetResponses<ApplyCalculationsResponse>())
{
this.label3.Text = resp.Result.ApplyCalculationsResult;
break;
}
}
}
P.S。当我尝试使用普通代理客户端时,没有BrokerClient包装器,一切正常。
关于上述的任何想法?
答案 0 :(得分:0)
重新缓慢,你需要提供更多关于你正在谈论什么样的减速的细节。您可以看到各个区域的缓慢,每个区域都是由不同的区域引起的。
如果作业创建缓慢,则会在头节点上发生这种情况 如果将任务提交到作业和执行EndRequests的速度很慢,则会在Broker节点上发生这种情况,因为请求将被写入代理作业的代理节点上的MSMQ文件夹。 如果作业运行时缓慢,则这是工作节点的问题;这可能是由于数据库连接速度缓慢或应用程序普遍缓慢造成的,或者如果您使用服务的中央共享位置而不是本地副本,这也可能导致速度缓慢。
至于你得到的错误:
“由于心跳丢失,代理不可用。请确保您可以连接到代理节点,HpcBroker服务正在代理节点上运行,并且会话仍在运行。”
当出于任何原因使用BrokerClient包装器时,HPC发送2个最终回调消息而不是仅发送一个。对于任何给定的作业,列表中的最终任务(但不一定是列表中最后执行的任务)都有一个bool,将其指定为最后一个任务。当您收到所有回调并重新连接到作业并关闭它时,它会发送一条最终消息,由于服务通道已关闭,您无法打开该消息。当你有一个BrokerClient包装器时,我不知道为什么会这样做;我还没搞清楚。基本上如果我不是每个作业多次看到该消息,我会忽略它。
出于好奇,您可以发布与使用代理客户端相关的代码吗?