我们正在开发一个.NET应用程序,它必须为第三方Web服务提供数万个小型Web服务调用。我们宁愿选择更“粗俗”的电话,但第三方不支持。我们已经设计了客户端以使用可配置数量的工作线程,并且通过测试具有针对一个多核机器进行了相当优化的代码。但是,我们仍然希望提高速度,并且正在考虑在多台机器上分散工作。我们精通典型的客户端/服务器/数据库应用程序,但对于多台机器的设计却是新手。所以,有几个与此相关的问题:
答案 0 :(得分:3)
听起来您的目标是尽快执行所有这些Web服务调用,并将结果制成表格。鉴于此,您最大的效率控制将通过扩展您可以进行的并发请求的数量来实现。
请务必查看client-side connection limits。默认情况下,我认为系统默认为2个连接。我自己没有尝试过,但通过增加与此属性的连接数,理论上应该通过从单个机器生成更多连接来生成更多请求的乘数效应。在MS论坛上有more info。
MSMQ选项效果很好。我自己正在运行该配置。 ActiveMQ也是一个很好的解决方案,但MSMQ已经在服务器上了。
你有一个很好的起点。将其付诸实践,然后继续提高性能和吞吐量。
答案 1 :(得分:1)
今年在CodeMash,Wesley Faler就这类问题做了一个有趣的演讲。他的解决方案是将“作业”存储在数据库中,然后使用客户端来完成工作并在完成时标记状态。
然后,他将整个基础设施推到了亚马逊的EC2。Here's his slides from the presentation - 他们应该给你基本的想法:
我在本地做过类似的多个PC - 管理工作量的基础知识与Faler的方法类似。
答案 2 :(得分:1)
如果您已经优化了代码,您可以考虑优化网络端以最小化发送的数据包数量:
答案 3 :(得分:0)
您可能需要考虑Rhino Service Bus而不是MSMQ。来源可用here。