WCF насколько быстрее TCP, чем HTTP

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

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

5 ответов


до сих пор много ответов, но никаких конкретных данных.

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/binary обеспечивает почти 2x пропускную способность HTTP / xml для сообщений в этом тесте. Узким местом в этом тесте был сервер CPU, а не сеть. Ваши результаты будут отличаться, потому что ваши сообщения будут более (или менее) сложными, ваша сеть будет более (или менее) ограниченной, а ваш код приложения будет более (или менее) интенсивным для процессора. Но это дает вам идею.

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

скачать полный отчет Stocktrader


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

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


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

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

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


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


сделайте несколько тестов! Это зависит от вашей сети и то, что ваша служба на самом деле делает.

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