WCF TCP привязка или именованные каналы для грид-вычислений?

Я строю распределенную систему. Есть несколько приложений (некоторые на основе.Net (C#), другие на C++ (НЕ C++/CLI!)). Эти приложения будут установлены на каждом компьютере в кластере (в настоящее время под управлением Windows). На локальном ПК я использую для IPC: MemoryMappedFiles для приложений C#, Shared Memory для приложений C++, Named Pipes для IPC между C# и C++. Через Интернет я использую привязку WCF TCP, используя приложения C# в качестве мостов для приложений C++.

Что было бы лучше использовать для связи по локальной сети? Кажется, что MPICH2 использует TCP... Типичные именованные каналы быстрее, чем привязка WCF TCP с оптимизацией (отключенная защита и т. Д.)? Сообщения будут очень большими, в основном двойного типа. WCF чрезвычайно удобен в моей ситуации (все математические методы - просто контракты), но вопрос в его эффективности.

2 ответа

Вы смешиваете два разных слоя, вы можете запустить WCF поверх NamedPipes. Именованные каналы (хотя могут работать с большим количеством установочных слов) не предназначены для связи между двумя процессами на двух компьютерах.

См. Эту страницу MSDN в разделе Выбор транспорта, чтобы понять, когда использовать какой транспорт.

Преимущества каждого транспорта

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

Когда использовать HTTP -транспорт

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

Протокол HTTP не основан на соединении - после отправки ответа состояние не поддерживается. Для обработки многостраничных транзакций приложение должно сохранять любое необходимое состояние.

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

Когда использовать транспорт TCP

TCP- это ориентированная на соединение потоковая служба доставки с сквозным обнаружением и исправлением ошибок. Основанный на соединении означает, что сеанс связи между хостами устанавливается перед обменом данными. Хост - это любое устройство в сети TCP/IP, идентифицируемое логическим IP-адресом.

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

TCP-транспорт WCF оптимизирован для сценария, в котором оба конца обмена данными используют WCF. Эта привязка является самой быстрой привязкой WCF для сценариев, в которых используется обмен данными между различными машинами. Обмен сообщениями использует BinaryMessageEncodingBindingElement для оптимизированной передачи сообщений. TCP обеспечивает дуплексную связь и может использоваться для реализации дуплексных контрактов, даже если клиент находится за трансляцией сетевых адресов (NAT).

Когда использовать именованный транспорт

Именованный канал - это объект в ядре операционной системы Windows, например раздел общей памяти, который процессы могут использовать для связи. Именованный канал имеет имя и может использоваться для односторонней или дуплексной связи между процессами на одном компьютере.

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

Прочитайте это, http://weblogs.asp.net/spano/archive/2007/10/02/choosing-the-right-wcf-binding.aspx.

Вы можете видеть, что выбор зависит от того, где находится сервис. Надеюсь, поможет.

Другие вопросы по тегам