9

我们有一个需要启用 SSL 的 Delphi SOAP 服务。我选择使用 IIS ARR 反向代理进行 SSL 卸载以简化配置(与 OpenSSL 和手动证书 + 密码管理相比)。ARR 有效,但它增加了大量开销...... 18 个服务请求的响应时间从不到 2 秒缩短到 19 秒(压缩后总计约 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>

来自 Fiddler 的请求和响应示例:

客户端和服务器时间戳网格

I0IS 跟踪显示来自 ARR 的开销

4

4 回答 4

10

我们有同样的问题。我找到了根,它在 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

“如果启用 IPv6 并调用 TcpClient(String, Int32) 方法连接到同时解析为 IPv6 和 IPv4 地址的主机,则将首先尝试连接到 IPv6 地址,然后再尝试 IPv4 地址。这可能会产生影响如果主机没有监听 IPv6 地址,则延迟建立连接的时间。”

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

于 2014-12-15T12:32:04.747 回答
4

我的建议:对应用程序使用 IIS,对代理使用 Apache HTTP Daemon。

过去,我使用各种软件和硬件进行 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 Daemon 作为 SSL 卸载引擎的说明。

于 2013-11-18T13:56:31.147 回答
1

正如 Dmitry 建议的那样,关闭 IPv6 为我解决了这个问题。

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

于 2015-08-23T17:45:45.203 回答
0

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

我同意 Brock 的观点,并说首先检查您的应用程序池设置。基本上,ARR 应用程序池应设置为永不回收。

我建议从以下位置开始观看第 32-38 集: http ://dotnetslackers.com/articles/iis/B​​indings-and-Rules-for-Application-Request-Routing-ARR-Week-32.aspx

于 2014-10-20T19:39:22.603 回答