Кто-нибудь сравнивал WCF и ZeroC ICE?

ICE от ZeroC (www.zeroc.com) выглядит интересно, и мне интересно взглянуть на него и сравнить с нашим существующим программным обеспечением, использующим WCF. В частности, наше приложение WCF использует обратные вызовы сервера (через HTTP).

Кто-нибудь их сравнивал? Как прошло? Меня особенно интересует аспект производительности, поскольку совместимость сейчас для нас не очень важна. Спасибо!

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

Eric Schoonover 20.09.2008 23:18
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
16
1
7 477
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

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

Во-первых, не совсем честно сравнивать WCF с ICE, поскольку WCF - это особый механизм удаленной связи, а WCF - это платформа удаленной связи более высокого уровня.

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

Для сравнения, ICE - это кроссплатформенный механизм удаленной связи, который использует двоичное кодирование для эффективной связи между приложениями. Это что-то вроде упрощенной эволюции CORBA и более прямо сопоставимо с CORBA, DCOM, .NET Remoting и JNI.

Однако, несмотря на то, что между ICE и WCF нет прямого соответствия, если вам нужно, чтобы ваше .NET-приложение взаимодействовало удаленно, они оба являются соперниками. Некоторые из моментов принятия решения, которые вы, возможно, захотите рассмотреть, включают:

  • Ресурсы. Будет легче найти разработчиков с опытом работы с WCF, чем с ICE.

  • Спектакль. Если вам нужна производительность, то ICE работает быстро, но WCF также можно использовать в производительной конфигурации. В качестве альтернативы .NET Remoting может обеспечить очень хорошую производительность, и что бы ни говорили тесты, спонсируемые MS, я видел, что он превосходит WCF на 10%.

  • Кроссплатформенность. Если вам нужно взаимодействовать с приложениями, отличными от Windows, вы ограничены параметрами WCF, которые вы можете использовать. Кроме того, поскольку каждый стек SOAP, кажется, реализует стандарты по-разному, создание действительно универсальных веб-сервисов может оказаться сложной задачей (хотя WS-I помогает).

Если вам не нужна каждая капля производительности с первого дня, то я лично для начала бы выбрал WCF, а затем подумал о ICE, если производительность когда-либо станет критичной. Даже в этом случае было бы дешевле масштабировать ваши сервисные боксы, чем переходить на ICE, и если у вас нет каких-либо экзотических кроссплатформенных потребностей, вы всегда можете посмотреть на перенастройку WCF для двоичного кодирования и т. д.

Благодарю. на самом деле наша текущая система уже использует WCF (wsDualHttpBinding), поэтому я также рассматриваю ICE, если он может обеспечить лучшую производительность или масштабируемость.

cruizer 23.09.2008 04:15

Мои собственные тесты для лучшей ситуации .NET Remoting (внутрипроцессные вызовы методов между доменами приложений) показывают, что WCF действительно быстрее в этой конкретной ситуации. YMMV.

Mark 26.10.2010 01:51

Мы использовали ICE в режиме балансировки нагрузки, который не требовал изменений в коде сервера. Когда мы выполняли обновление, он автоматически отправлял обновления на все узлы. WCF не поддерживает ничего из этого.

Contango 01.03.2011 00:50

Мичи Хеннинг из ZeroC недавно опубликовал опубликованоБелая книга только по этой теме - «Выбор промежуточного программного обеспечения: почему производительность и масштабируемость имеют (и не имеют) значение». Он сравнивает Ice, WCF (двоичный и SOAP) и RMI с различными показателями производительности, платформами, языками и т. д. Более подробная информация о Блог Мичи, но технический документ также вполне читаем со всеми стандартными оговорками любого теста.

Отказ от ответственности: я широко использовал Ice и RMI, но никогда не использовал WCF.

Технический документ был обновлен недавно (16 февраля 2011 г.) zeroc.com/forums/announcements/…

MKroehnert 03.05.2011 18:07

Мы используем ICE для интеграции модулей, написанных на C++, Java и C#. Приятно то, что наш сервер также может получать доступ к компонентам на удаленных машинах, поэтому, если нам нужна более высокая производительность, мы можем перенести обработку на другие машины.

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

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

Apache Thrift - еще один претендент на ICE и WCF. Он был разработан Facebook с открытым исходным кодом. Apache Thrift хорош в некотором смысле, потому что он не только чрезвычайно эффективен на стороне кодирования, он также поддерживает добавление полей в структуры, не нарушая работу всех клиентов (что мы нашли чрезвычайно полезным для наших проектов).

Буферы протокола Google, казалось бы, не совсем претендент, поскольку на домашней странице он не упоминает о поддержке .NET. Однако некоторые надстройки сообщества поддерживают C#. Кроме того, ЛЕД обеспечивает эмуляцию буферов протокола Google, если вы работаете с существующими службами.

Как давний пользователь ICE, я также начал рассматривать Thrift как возможную замену ICE. На самом деле это не так уж и плохо, и во многих отношениях это намного проще. Я не измерял производительность, но ожидал, что она будет аналогична, если не лучше, для маршалинга на основе сгенерированного кода.

Andrew McVeigh 18.05.2012 18:29

Точка данных: мы только что преобразовали мультиплатформенный и многоязычный проект обратного вызова с Ice на Thrift с довольно хорошими результатами. Ice многое делает для вас, поэтому нам пришлось самостоятельно реализовать прослушиватели отключения, события подключения и т. д. И в одном случае мы попали в пресловутую пословицу с большой блокировкой объекта, с которой Ice позволил нам уйти - это вызвало тупик на сервере Thrift, но это было легко исправлено менее ленивым кодированием на стороне C#.

Я только что закончил тестирование, и в нашем приложении все, что обрабатывает большие объемы данных, работает быстрее, чем Ice. Более короткие сообщения с большим количеством накладных расходов (т. Е. «Пульс», который обновляет статус по протоколу) немного медленнее.

Самым важным моментом было то, что для правильной реализации службы обратного вызова нам пришлось расширить интерфейсы Thrift и определить наш собственный протокол вместе с «процессором» Thrift и клиент-сервером обратного вызова. Но я открыто признаю, что наше приложение / очень / особенное. Существующих протоколов и серверов должно хватить. Но расширить их, даже чтобы использовать мультиплексные сокеты из .Net, было не так уж сложно.

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