我需要帮助解决一个生产问题。
我们有一个NServiceBus处理程序,当它处理消息时,会向运行在IIS 6.0上的asmx (.net 2.0) Web服务发送请求,然后Web服务会向第三方Web服务发送第二个HTTP请求。平均而言,第三方服务需要500毫秒才能响应,但我们被告知只有在有11个并发请求时才会开始排队请求。
为了满足我们的处理SLA,我们需要能够每小时处理79,000条消息或每分钟约1300条消息。如果我们能够让11个并发请求同时进行,并且平均处理时间为500毫秒,那么我们应该能够每秒处理约20条消息。
我们面临的问题是,我们无法接近这些数字。我们的部署解决方案如下。我们有一个服务,每5秒轮询一次数据库以检索100个新消息批次,然后将它们发送到分布器,该分布器负载均衡四个工作窗口服务在两个服务器上运行。我称它们为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,似乎表明如果要对同一Web服务进行多个并发调用,则必须调整IIS 6.0进程模型。
引用文章中的内容: 如果您从每个ASPX页面向单个IP地址进行一次Web服务调用,Microsoft建议使用以下配置设置: 将maxWorkerThreads参数和maxIoThreads参数的值设置为100。 将maxconnection参数的值设置为12*N(其中N是您拥有的CPU数量)。 将minFreeThreads参数的值设置为88*N,将minLocalRequestFreeThreads参数的值设置为76*N。 将minWorkerThreads的值设置为50。请记住,默认情况下,配置文件中没有minWorkerThreads。您必须添加它。
如果有人能够解释发生了什么或解决方案是什么,我将非常感激。
谢谢,
查理
我们有一个NServiceBus处理程序,当它处理消息时,会向运行在IIS 6.0上的asmx (.net 2.0) Web服务发送请求,然后Web服务会向第三方Web服务发送第二个HTTP请求。平均而言,第三方服务需要500毫秒才能响应,但我们被告知只有在有11个并发请求时才会开始排队请求。
为了满足我们的处理SLA,我们需要能够每小时处理79,000条消息或每分钟约1300条消息。如果我们能够让11个并发请求同时进行,并且平均处理时间为500毫秒,那么我们应该能够每秒处理约20条消息。
我们面临的问题是,我们无法接近这些数字。我们的部署解决方案如下。我们有一个服务,每5秒轮询一次数据库以检索100个新消息批次,然后将它们发送到分布器,该分布器负载均衡四个工作窗口服务在两个服务器上运行。我称它们为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,似乎表明如果要对同一Web服务进行多个并发调用,则必须调整IIS 6.0进程模型。
引用文章中的内容: 如果您从每个ASPX页面向单个IP地址进行一次Web服务调用,Microsoft建议使用以下配置设置: 将maxWorkerThreads参数和maxIoThreads参数的值设置为100。 将maxconnection参数的值设置为12*N(其中N是您拥有的CPU数量)。 将minFreeThreads参数的值设置为88*N,将minLocalRequestFreeThreads参数的值设置为76*N。 将minWorkerThreads的值设置为50。请记住,默认情况下,配置文件中没有minWorkerThreads。您必须添加它。
如果有人能够解释发生了什么或解决方案是什么,我将非常感激。
谢谢,
查理