【问题标题】:WCF, dealing with simultaneous requests from multiple serversWCF,处理来自多个服务器的同时请求
【发布时间】:2013-05-09 16:41:19
【问题描述】:

我有一个工作块,我分成更小的块。我想将每个块分配给 NumberCruncher 的一个实例(每个实例将托管在一个唯一的 EndPoint 上,并将在服务器上的特定线程上运行)。然后,指定 EndPoint 处的 NumberCruncher 实例将处理客户端代理传递给它的那些数字,然后以 txt 文件格式返回结果。

从客户端,我假设我需要保留 2 个线程安全列表,其中 1 个包含链接到等待返回结果的 NumberCruncher 实例的端点。等待分配更多工作的 NumberCruncher 实例排名第二?

关于向这些列表中添加项目,如何处理来自服务器的多个请求?一次只能添加一个,所以我假设客户端需要向服务发送一条消息说“是的,您已成功添加到列表中,现在停止请求添加。”?

编辑

我目前正在尝试对我收集的时间序列进行一些分析。我编写了一个程序(Number Cruncher),它拆分我想要检查的不同参数并将它们分配给不同的线程(由我的电脑中的核心数量决定)。然后每个线程使用分配的输入运行 Number Cruncher。不幸的是,即使使用所有内核,这在我的电脑上也花费了大量的时间。所以我想在几台电脑(服务器)上运行这个相同的程序,并编写一个程序,将工作分配给所有服务器。每次模拟大约需要 1 小时。所以我正在查看 520 小时的计算时间(即对于单台电脑来说是不可行的)。

【问题讨论】:

    标签: c# wcf c#-4.0 distributed-computing


    【解决方案1】:

    我想你想多了。

    在 WCF 中,您可以控制实例的数量(单个、每个会话和每个请求)以及实例是单线程还是多线程。但不能超过请求的线程关联性。

    而且你不需要,在我看来你应该只配置每个请求的实例(很大程度上取决于编码和状态管理的细节)。

    您可以限制服务器以实现最大容量和可接受的延迟。如果不需要,不要乱用线程管理。


    编辑

    之后

    您可以为此使用 WCF,但这是一个分布式计算问题,存在专门的软件。

    您可以将工作 PC 作为服务器运行,这似乎是您当前的方向。但我会:

    • 运行 1 台服务器,用于拆分工作并管理工作项
      • 需要检查“过期”物品并重新签发
    • 运行多个客户端,它们可以请求与内核一样多的工作项
      • 需要配置为最大负载。可以是 cores+2 或 cores-1

    【讨论】:

    • 我已经编辑了我的问题 n +1,因为你上面所说的可能是对的。
    • 为什么一台服务器和多个客户端,而不是相反?
    • 因为这使得返回结果更容易。此外,Master 不需要知道/管理 Worker 的能力。
    • ??客户端是否将工作发送回服务器?如果是这样,您如何克服多个客户端同时向服务器发送结果?
    • 是的,这比保持回调通道打开超过 1 小时要容易得多。我认为提供和接收包裹比处理包裹要“轻松”得多。但在需要时,服务器可以限制请求。
    猜你喜欢
    • 2016-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多