我正在寻找一些我们遇到的生产问题的帮助。什么导致了这种情况下的瓶颈?
我们有一个NServiceBus处理程序,它在处理消息时向IIS 6.0上运行的asmx(.net 2.0)Web服务发送请求,然后Web服务将第二个http请求平均发送到第三方Web服务第三方服务需要500毫秒才能响应,但我们被告知只有当11个同时请求正在进行时才会启动排队请求。
为了满足我们处理SLA的需求,我们需要每小时处理79,000条消息或每分钟处理约1300条消息。有11个请求并行处理,平均需要500毫秒,如果我们能够获得11个并发请求,每秒钟我们应该能够处理大约20条消息,这应该是可以实现的。
我们现在面临的问题是,我们无法在这些数字附近找到任何地方。我们部署的解决方案如下。我们有一项服务,每5分钟轮询一个数据库以检索一批100条新消息,它将它们发送给一个经销商,该经销商负责在两台服务器上运行的四个工作者Windows服务间的负载平衡。我会给他们打电话NsbServerA & NSbServerB。每个辅助服务都配置了2个线程,所以我们总共有8个线程。我们有两台运行asmx Web服务的服务器,我将其称为asmx1 & asmx2,ServerA向asmx1发送请求,ServerB向asmx2发送请求。
当前的吞吐量是每小时30,000条消息,每分钟约500个,每秒约8个,所以我们有一个瓶颈问题在哪里?
我已经看到这篇文章http://support.microsoft.com/default.aspx?scid=kb;en-us;821268这似乎表明如果您想对同一个webservice进行多个并发调用,您必须调整IIS 6.0过程模型。从文章
报价: “如果你正在一个Web服务调用从每个ASPX页面一个IP地址,Microsoft建议您使用以下配置设置: 设置maxWorkerThreads参数的值和maxIoThreads参数到100 设置MAXCONNECTION参数的值,以12 * N(其中N是你有CPU的数量)。 设置minFreeThreads参数的值,以88 * N和minLocalRequestFreeThreads参数to76 * N。 将minWorkerThreads的值设置为50.请记住,默认情况下minWorkerThreads不在配置文件中,您必须添加它。“
如果任何人都可以阐明发生了什么或解决方案是什么,我会非常感激。
感谢,
查理
Downvoter,请与OP分享他需要纠正的内容,以避免downvote。 –
您是否单独测量每个组件的吞吐量?这可以使用每个组件的存根/模拟服务来完成。 – Oded
我在任何地方都看不到编程问题。 – bmargulies