RPC, сокеты и соображения производительности - PullRequest
2 голосов
/ 10 мая 2011

У меня есть две машины в одной подсети. Я хочу обмениваться объектами между двумя машинами как можно быстрее. Он использует g ++ и находится в Debian / Ubuntu. Машины загружены трафиком и процессором.

  • Один из способов - отправить сжатую сериализацию объекта через сокеты в виде двоичных пакетов (используя буферы протокола Google для кодирования для ex).

  • CORBA кажется излишним для этого

  • Я читал некоторые статьи об ONC-RPC и Sun RPC

  • есть ли в Boost эффективная библиотека для этого?

Уверен, у вас есть другие идеи. Как бы вы это сделали, чтобы гарантировать лучшее время отклика в 2011 году?

Ответы [ 3 ]

1 голос
/ 10 мая 2011

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

http://www.zeromq.org/results:rt-tests-v031

1 голос
/ 10 мая 2011

Когда вы говорите, что хотите «обмениваться объектами между двумя машинами как можно быстрее», это звучит так, как будто вы заинтересованы в максимально возможном ограничении пропускной способности сети. В этом случае вы можете рассмотреть возможность использования протокола FAST .

Акроним FAST официально означает «FIX Adapted for Streaming», что означает, что он лучше всего подходит для протокола FIX, но на самом деле это не так. FAST можно использовать с любым протоколом.

FAST-кодированные пакеты могут быть очень маленькими, и хорошая реализация будет использовать ограниченное количество ресурсов ЦП при кодировании и декодировании. Компромисс в том, что протокол FAST - не самая легкая вещь в мире, которую можно взломать человеком, и код может быть довольно сложным, чтобы получить право. Существуют доступные реализации продуктов с открытым исходным кодом, которые могут соответствовать или не соответствовать вашим потребностям. Одной из таких реализаций для C ++ является QuickFAST .

1 голос
/ 10 мая 2011

Вы можете объединить Google protobuf для сериализации с Boost.ASIO для обработки фактического ввода-вывода. Это должно обеспечить хороший баланс между производительностью и временем реализации.

...