【问题标题】:WCF How much faster is TCP than HTTPWCF TCP 比 HTTP 快多少
【发布时间】:2011-05-30 00:43:39
【问题描述】:

我知道对于 WCF,TCP 比 HTTP 快,但我很想知道多少。我有一个使用 HTTP 的大型应用程序的性能问题,并且正在考虑迁移到 netTcp 是否会产生足够的性能改进以使投资值得。

有谁知道 netTCP 与 Http 绑定在发送数据量上的区别?

【问题讨论】:

  • 我只是在了解数据包大小的一般数字。我们说的差异大约是 2 倍还是 100 倍?
  • 数据包大小是可配置的。我不明白仅知道数据包大小对于解决性能问题有多大用处。
  • 这取决于,在 HTTP 上你有 SOAP,但你也有像 POX 和 JSON 这样的 lighter 东西。所以你在比较 netTcpBinding 和什么?

标签: c# wcf nettcpbinding


【解决方案1】:

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

Microsoft 制作了一个测试来准确地测量您所询问的内容 - WCF 服务的 HTTP 和 TCP 之间的性能(吞吐量)差异。 (测试没有考虑数据包大小!)

这表明对于此测试中的消息,TCP/binary 提供的吞吐量几乎是 HTTP/xml 的 2 倍。此测试的瓶颈是服务器 CPU,而不是网络。您的结果会有所不同,因为您的消息将更加(或不那么)复杂,您的网络将受到更多(或更少)的限制,并且您的应用程序代码将更多(或更少)CPU 密集型。但这给了你一个想法。

实际上,Stocktrader 基准测试是一项具有竞争力的事情,它将 Windows Server 上的 WCF 性能与 Linux 上的 WebSphere 进行了比较。但作为其中的一部分,MS 还将使用 HTTP 的 WCF 的性能与使用 TCP 的 WCF 的性能进行了比较。

download the full Stocktrader report

【讨论】:

  • 这非常适合推销。如果用户以他只想要一个基准的方式提出他的问题,这将是一个很好的答案。但是,他说他有一个真正的“性能问题”,所以这类信息是不相关的。
  • 我完全不同意你轻易驳回这个答案。基准测试方法清楚地记录在论文中,因此如果他觉得需要运行自己的测试,仅此一点就值得。此外,Stocktrader 的所有源代码都是可用的,包括测试脚本,因此他可以利用这些代码在实施自己的基准测试方面取得巨大的进步。最后,它给出的答案比这里的其他答案要好得多,比如“哦,我猜 TCP 会更快”。对于一种情况,这是一个实数。不是猜测。
  • 感谢您的信息。这就是我所追求的。正如每个人都建议的那样,我很感激我需要运行测试来找到瓶颈。但是,在我开始设置环境和运行测试的艰巨过程之前拥有这个基准测试很有用。
  • 请注意:最后一个栏测量“自托管”模式下的 TCP。对于生产代码,您可能希望将 TCP 服务托管在 Windows 服务或 IIS 7.0/7.5 中,我怀疑这可能会对上述结果产生很大影响。
  • 您的图片链接已损坏 :)
【解决方案2】:

事情没那么简单。 HTTP、TCP 和other 传输选项具有平衡速度之外的选项。可靠性可以在应用程序的稳定性方面发挥重要作用,具体取决于应用程序的实际作用。不要只是翻转协议并运行您的程序几次并认为这是一个很好的测试。阅读协议并根据您的要求权衡选项。最好在合格的网络管理员的帮助下运行一些程序、负载、性能和网络测试。

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

【讨论】:

  • 我当然可以运行一些测试。但在此之前,我只是想知道两个绑定之间数据大小的差异,只是一个粗略的因素。
【解决方案3】:

根据 ISO/OSI 模型,TCP 是一个传输层。 HTTP 是在 TCP 之上实现的应用层。所以无论如何,HTTP 总会增加开销。

一般。如果 HTTP 解决了相当多的应用程序层问题,那么请使用它,因为它已被完善、高度互操作且经过验证。如果即使您的应用程序使用 HTTP 也需要做大量工作才能让事情顺利进行,而使用 TCP 会使事情变得更好、更简单,那么请务必使用较低级别的协议。

特别是关于 WCF,我不知道他们的仅 TCP 实现是什么样的。不过我敢打赌它比 HTTP 更简单。 HTTP 可能被用作“防弹”通信介质,HTTP 开销的成本是由协议轻松遍历代理服务器等事实证明的。

【讨论】:

    【解决方案4】:

    我认为 WCF 最昂贵的部分是序列化。与此相比,网络服务器堆栈的开销约为 5-10%,而仅 TCP 传输确实消除了这一点。问题是,您是否需要网络服务器的额外好处。

    【讨论】:

      【解决方案5】:

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

      通常它会更快,因为 TCP 连接在堆栈中较低,并且没有在连接打开后创建新请求的开销。

      【讨论】:

      • 当我说更快时,我指的是数据包大小的差异。我已经编辑了问题
      猜你喜欢
      • 1970-01-01
      • 2010-09-13
      • 2014-05-04
      • 2011-04-17
      • 2018-04-10
      • 1970-01-01
      • 2010-09-08
      • 2019-11-18
      相关资源
      最近更新 更多