WCF TCP相对于HTTP有多快?

24

我知道在WCF中TCP比HTTP更快,但我很想知道它有多快。我的一个大型应用程序使用HTTP存在性能问题,我正在考虑是否将其转移到netTcp可以获得足够的性能提升以使投资值得。

有人知道netTCP与Http绑定相比发送的数据量差异吗?


我只是想知道数据包大小的大致数字。我们是在讨论大约2倍的差异还是100倍的差异? - Mark 909
数据包大小可配置。我不认为仅了解数据包大小对于解决性能问题有多少帮助。 - P.Brian.Mackey
这取决于你的需求,如果是通过HTTP通信,你可以使用SOAP,但也有更轻量级的POX和JSON。所以你是在将netTcpBinding与什么进行比较? - Darin Dimitrov
5个回答

43

到目前为止,有很多答案但没有具体数据。

微软制作了一个测试,精确地衡量了您所问的内容 - HTTP和TCP在WCF服务中的性能(吞吐量)差异。(该测试未考虑包大小!)

图1:Web服务测试的最高TPS速率。 IBM WebSphere Trade 6.1正在运行默认的EJB / Entity Beans以及容器管理持久性(CMP)。

这表明,在这个测试中的消息中,TCP /二进制提供了近2倍的HTTP / xml吞吐量。此测试的瓶颈是服务器CPU,而不是网络。您的结果会因为您的消息更复杂或更简单,您的网络限制更多或更少,以及您的应用程序代码更或更少需要CPU而有所不同。但这给了您一个想法。

实际上,Stocktrader基准测试是一项竞争性的事情,比较了运行在Windows Server上的WCF与运行在Linux上的WebSphere之间的性能。但作为其中的一部分,微软还比较了使用HTTP和使用TCP的WCF性能。

下载完整的Stocktrader报告


这对于销售推广来说很好。如果用户提出问题的方式只是想要一个单一的基准测试,那么这将是一个很好的答案。但是,他说他有一个真正的“性能问题”,所以这种类型的信息就不相关了。 - P.Brian.Mackey
13
我完全不同意你轻易地驳回这个答案。论文中清楚地记录了基准测试方法,如果他觉得需要进行自己的测试,单是这一点就值得考虑。此外,“股票交易员”(Stocktrader)的所有源代码都是可用的,包括测试脚本,因此他可以利用它来在实现自己的基准测试时获得巨大的优势。最后,它给出了比其他答案更好得多的答案,其他答案可能仅仅是“哦,我猜TCP会更快”的程度。这是一个真实的数字,针对一个场景,而不是一个猜想。 - Cheeso
谢谢提供这些信息。这正是我需要的。正如大家所建议的,我知道我需要运行测试来找到瓶颈。然而,在开始设置环境和运行测试这个繁琐的过程之前,拥有这个基准数据是很有用的。 - Mark 909
请注意:最后一个柱状图显示了“自托管”模式下的 TCP 测量结果。对于生产代码,您可能希望将 TCP 服务托管在 Windows Service 或 IIS 7.0/7.5 中,我认为这可能会显著影响上述结果。 - tsemer
1
你的图片链接损坏了 :) - Mathematics

5

这并不是那么简单。HTTP、TCP和其他传输选项除了速度之外还有其他平衡的选项。可靠性取决于应用程序实际执行的内容,对应用程序的稳定性起着重要作用。不要只是翻转协议并运行你的程序几次,然后认为这是一个良好的测试。阅读有关协议的信息,并根据你的需求权衡各种选项。最好在合格的网络管理员的帮助下运行一些程序、负载、性能和网络测试。

更新:由于你更改了问题,我还应该指出,你需要找出导致性能损失的原因,而不是测量理论包大小。就像其他人说的那样,运行测试。


当然我可以运行一些测试。但在这之前,我只是对知道两个绑定之间的数据大小差异感兴趣,大概的因素是什么。 - Mark 909

5
根据ISO/OSI模型,TCP是传输层。HTTP是在TCP之上实现的应用层。因此,无论如何,HTTP都会增加额外的开销。
通常情况下,如果HTTP可以解决你的应用层问题,那么使用它是明智的,因为它已经被广泛接受、高度互操作并且经过验证。如果即使你的应用程序使用HTTP,仍需要做大量的工作才能使事情顺利进行,并且通过TCP变得更好和更简单,那么请尽管选择一个更低级别的协议。
具体针对WCF,我不知道他们的TCP-only实现是什么样子的。我敢打赌它比HTTP更简单。HTTP可能被用作“防弹”通信媒介,HTTP开销的代价可以通过该协议轻松地穿越代理服务器等来证明。

4

我认为,WCF 最昂贵的部分是序列化。与此相比,Web 服务器堆栈的开销约为 5-10%,而 TCP 传输可以消除这种开销。问题是,您是否需要 Web 服务器的附加优势。


2

做一些测试!这取决于您的网络以及您的服务实际上正在执行什么操作。

通常情况下会更快,因为TCP连接位于较低的层次,并且没有在打开连接后创建新请求的开销。


当我说更快时,我指的是数据包大小的差异。我已经编辑了问题。 - Mark 909

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接