如何跟踪应用程序请求路由添加的开销?

时间:2013-11-12 15:54:21

标签: iis soap iis-7 arr iis-arr

我们有一个需要启用SSL的Delphi SOAP服务。我选择使用IIS ARR反向代理来进行SSL卸载以便于配置(与OpenSSL和手动证书+密码短语管理相比)。 ARR可行,但它增加了大量的开销......响应时间从 2秒到19秒达到18个服务请求(总压缩约60Kb)。

我将时间戳记录添加到客户端&服务器用于何时发送和接收消息。它显示在从客户端发送和服务接收之间通过ARR向每个请求路由添加大约1秒。响应很快被路由回来,只有通过ARR的请求路由很慢(见下图)。

如何追踪开销的来源? ARR不适合这个用例吗?我尝试调整和禁用大多数设置,包括缓存。我尝试使用干净的IIS设置的不同主机,包括生产Windows Server 2012.SSL本身不是开销,只是让ARR HTTP反向代理导致延迟。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                    <match url="(.*)" />
                    <action type="Rewrite" url="http://localhost:8987/{R:1}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

请求&amp;来自Fiddler的回复样本:

Client and server timestamps grid

I0IS Tracing shows overhead from ARR

4 个答案:

答案 0 :(得分:7)

我们遇到同样的问题。我找到了根,它在System.Net.Sockets.Socket.DoConnect中 问题与IPv6有关:

https://social.msdn.microsoft.com/Forums/vstudio/en-US/203b6230-e4c0-477c-9a0a-0c21a7ad1615/strange-onesecond-delay-with-tcpconnections-to-localhost?forum=clr

http://msdn.microsoft.com/en-us/library/115ytk56.aspx

&#34;如果启用了IPv6并且调用了TcpClient(String,Int32)方法以连接到解析为IPv6和IPv4地址的主机,则将首先尝试在IPv4地址之前连接到IPv6地址。如果主机没有监听IPv6地址,这可能会延迟建立连接的时间。&#34;

要解决环回请求,您需要在计算机上禁用IPv6,请参阅第4-5-6页: https://stackoverflow.com/a/12403731

答案 1 :(得分:4)

我的建议:对应用程序使用IIS,使用Apache HTTP守护程序进行代理。

过去我曾使用各种软件和硬件进行SSL卸载(从2003年的某个地方开始,我认为)。每个都有自己的定价水平和功能。在过去的几年里,我为了这个目的切换到单独使用Apache HTTP Daemon。即使与IIS和Windows结合使用。一旦运行样本,Apache就很容易配置,并且通过转发和重命名更容易扩展到更复杂的场景。

可以在http://www.invantive.com/about-invantive/news/entryid/897/ssl-offloading-for-apache-tomcat上找到有关如何在Windows上使用Apache HTTP守护程序作为SSL卸载引擎的一些说明。

答案 2 :(得分:1)

正如德米特里建议的那样,关闭IPv6解决了这个问题。

您也可以在重写中使用127.0.0.1而不是localhost来强制使用IPv4。

答案 3 :(得分:0)

我会说你的设置有些麻烦。我们目前运行ARR进行SSL卸载并进行大量吞吐量测试,ARR对吞吐量几乎没有影响。

我同意Brock的说法并首先检查您的App Pool设置。基本上应该将ARR应用程序池设置为永不回收。

我建议观看从第32-38集开始的剧集: http://dotnetslackers.com/articles/iis/Bindings-and-Rules-for-Application-Request-Routing-ARR-Week-32.aspx