Полное раскрытие информации: я работаю в Informatica (ранее 29West) и являюсь членом инженерной группы, ответственной за их продукты для обмена сообщениями .Я предвзятый.Я, однако, довольно хорошо разбираюсь в сообщениях с малой задержкой на финансовом рынке.
Если скорость передачи сообщений составляет около 60 сообщений в секунду.(как указано в комментарии к ответу Уилла Дина), и когда они доставляются в графический интерфейс с человеком, сидящим перед ним и реагирующим на рынок с человеческой скоростью, честно говоря, не имеет большого значения, какое программное обеспечениевы используете с точки зрения латентности.Возможно, вам даже удастся обойтись без использования WCF (хотя я все же рекомендовал бы против него; мы рассмотрели возможность его поддержки один раз и создали для него прототип адаптера, и это увеличило задержки на порядок - мы решили не беспокоиться об этомв то время).
Теперь программное обеспечение Informatica для обмена сообщениями может передавать сообщения между процессами на одном компьютере за микросекунду, и если вы хотите купить несколько замечательных сетевых адаптеров на 10 гигабит Eс помощью обхода ядра или механизма InfiniBand вы можете передавать миллионов сообщений в секунду между машинами с задержкой в одну цифру микросекунды.Мы также скоро выпустим новую библиотеку сериализации данных, которая поддерживается в C / C ++, Java и .NET, как часть продукта обмена сообщениями, которая в некоторых случаях на самом деле быстрее, чем буферы протокола (хотя буферы протокола широко используются, а такжеочень хороший выбор).Наши API .NET и Java имеют функцию «ZOD» для «Zero Object Delivery», что является довольно забавным способом сказать, что они не генерируют новые объекты во время доставки сообщений, что означает отсутствие пауз сборки мусора и связанных всплесков / выбросов задержек.У нас есть еще один продукт под названием UMDS, который специально предназначен для разветвления высокоскоростного магистрального трафика для замедления настольных приложений без замедления магистрали или других клиентов.
Я мог бы продолжить и рассказать о том, насколько великолепно программное обеспечение Informatica для обмена сообщениями.и я думаю, что стоит проверить, но это уже выглядит как обычная реклама, и я инженер, а не продавец.Итак, вот несколько общих советов:
Если у вас много клиентов, получающих одни и те же данные, вам понадобится несколько вариантов многоадресной рассылки UDP.Вам часто понадобится надежный многоадресный транспорт какого-либо типа - известный (и бесплатный) надежный протокол многоадресной передачи - PGM.Windows включает реализацию PGM, которую можно использовать в C #;Я отсылаю вас к отличному сообщению Майка Реттига в блоге о том, как его использовать, если вы хотите попробовать его.(Я знаю, Майк - он умный парень.) Выбор протокола - это область, в которой вы получаете то, за что платите;Обмен сообщениями в Informatica включает в себя надежный многоадресный протокол, слабо основанный на PGM (наш архитектор разработал его совместно с RFM PGM уже давно), но с большим количеством значительных улучшений.Обычный PGM может подойти для того, что вам нужно.
Вы хотите использовать архитектуру без посредников / без серверов.Сделайте так, чтобы приложения общались однорангово, ни с чем в середине.Избегайте лишних прыжков в пути сообщения (что обычно означает, что нужно избегать большинства реализаций JMS, избегать чего-либо с «очередью» в имени где-либо и т. Д.).
Помните о том, как работает ваша системаведет себя, когда один отдельный клиент ведет себя плохо.Может ли один медленный потребитель замедлить всех остальных?
Существует множество параметров настройки ОС и параметров BIOS, которые могут быть полезны для любого типа сообщений с низкой задержкой, отечественных или купленных - например, объединение прерываний , привязка прерываний NIC к конкретному ядру ЦП, масштабирование на стороне приема (что исторически было ужасно при использовании с UDP в Windows, но должно стать намного лучше в будущем), отключение определенных состояний питания ЦПи т. д.
Не поддавайтесь искушению использовать встроенную сериализацию объектов в .NET для отправки целых объектов по проводам - это на несколько порядков медленнее, чем при использовании простого двоичного формата (например, буферов протокола, библиотеки сериализации Informatica или ваш собственный двоичный формат и т. д.).
Если у вас есть более конкретные вопросы или вам нужна более подробная информация по любому из моих советов, просто дайте мне знать!