WCF Насколько быстрее TCP, чем HTTP - PullRequest
23 голосов
/ 23 декабря 2010

Я понимаю, что TCP быстрее, чем HTTP для WCF, но мне интересно узнать, насколько. У меня проблема с производительностью в большом приложении, использующем HTTP, и я рассматриваю вопрос о том, приведет ли переход к netTcp к достаточному повышению производительности, чтобы оправдать инвестиции.

Кто-нибудь знает разницу в количестве данных, отправляемых netTCP по сравнению с привязками Http?

Ответы [ 5 ]

42 голосов
/ 23 декабря 2010

Пока много ответов, но нет конкретных данных.

Microsoft создала тест для измерения точно того, о чем вы спрашивали - разницы в производительности (пропускной способности) между HTTP и TCP для служб WCF.(В тесте не учитывался размер пакета!)

Figure 1: Peak TPS Rates for the Web Service Test. IBM WebSphere Trade 6.1 is running in its default EJB/Entity Beans with Container Managed Persistence (CMP).

Это показывает, что TCP / двоичный код обеспечивает почти двукратную пропускную способность HTTP / xml,для сообщений в этом тесте.Узким местом в этом тесте был серверный процессор, а не сеть.Ваши результаты будут отличаться, потому что ваши сообщения будут более (или менее) сложными, ваша сеть будет более (или менее) ограничена, а код вашего приложения будет более (или менее) интенсивно загружать процессор.Но это дает вам представление.

На самом деле тест Stocktrader был конкурентным, сравнивая производительность WCF на Windows Server с производительностью WebSphere в Linux.Но как часть этого, MS также сравнил производительность WCF с использованием HTTP с производительностью WCF с использованием TCP.

загрузить полный отчет Stocktrader

5 голосов
/ 23 декабря 2010

Согласно модели ISO / OSI, TCP является транспортным уровнем. HTTP - прикладной уровень, реализованный поверх TCP. Так что HTTP всегда будет добавлять накладные расходы, несмотря ни на что.

Вообще. если HTTP решает изрядное количество проблем на уровне приложений, используйте его, потому что он хорошо зарекомендовал себя, хорошо взаимодействует и проверен. Если вам нужно проделать немалую работу, чтобы все заработало, даже когда ваше приложение использует HTTP, а с TCP все становится лучше и проще, то непременно используйте протокол более низкого уровня.

Что касается WCF, я понятия не имею, как выглядит их реализация только для TCP. Держу пари, что это проще, чем HTTP. HTTP, вероятно, используется в качестве «пуленепробиваемой» среды связи, а стоимость HTTP-издержек оправдывается тем, что протокол легко пересекает прокси-серверы и т. Д.

5 голосов
/ 23 декабря 2010

Это не так просто. HTTP, TCP и другие опции транспорта имеют возможность балансировать вне скорости. Надежность может играть важную роль в стабильности вашего приложения в зависимости от того, что оно на самом деле делает . Не просто переверните протокол и запустите вашу программу пару раз, считая это хорошим тестом. Читайте о протоколах и сравнивайте варианты с вашими требованиями. Запустите некоторые программы, загрузку, тестирование производительности и сети, желательно с помощью квалифицированного сетевого администратора.

Обновление: так как вы изменили свой вопрос, я должен также отметить, что вам нужно выяснить, что вызывает снижение производительности, а не пытаться измерять теоретический размер пакета. Как и все остальные, запускайте тесты.

4 голосов
/ 23 декабря 2010

Самая дорогая часть WCF - это, я думаю, сериализация.По сравнению с этим, издержки стека веб-сервера составляют около 5-10%, что устраняет только транспорт TCP.Вопрос в том, нужны ли вам дополнительные преимущества веб-сервера.

2 голосов
/ 23 декабря 2010

Проведите несколько тестов! Это зависит от вашей сети и от того, что на самом деле делает ваш сервис.

Обычно это будет быстрее, поскольку TCP-соединения находятся в стеке ниже и не требуют дополнительных затрат на создание нового запроса после открытия соединения.

...