Вы бы порекомендовали Google Protocol Buffers или Caucho Hessian для межязыкового двоичного формата? - PullRequest
9 голосов
/ 20 января 2009

Вы бы порекомендовали буферы протокола Google или Caucho Hessian для кросс-языкового двоичного формата? Или что-нибудь еще, в этом отношении - Facebook Thrift, например?

Ответы [ 8 ]

9 голосов
/ 26 июня 2010

Мы используем Caucho Hessian из-за уменьшенных затрат на интеграцию и простоты. Его производительность очень хорошая, поэтому он идеально подходит для большинства случаев.

Для некоторых приложений, в которых межъязыковая интеграция не так важна, есть еще более быстрая библиотека, способная повысить производительность, называемая Kryo . К сожалению, он не так широко используется, и его протокол не является квази-стандартным, как протокол от Hessian.

5 голосов
/ 11 марта 2009

Зависит от варианта использования. PB гораздо более тесно связан, лучше всего его использовать внутри тесно связанных систем; не подходит для общих / общедоступных интерфейсов (так как может использоваться более чем двумя конкретными системами). Гессиан немного более информативен, имеет хорошую производительность на Java. Лучше, чем PB на моих тестах, но я уверен, что это зависит от варианта использования. У PB, похоже, проблемы с текстовыми данными, возможно, он был оптимизирован для целочисленных данных.

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

РЕДАКТИРОВАТЬ: производительность Hessian на самом деле не так хороша, как в jvm-сериализаторах . И PB довольно быстр, если вы обязательно добавите флаг, который заставляет использовать быстрые опции на Java. А если PB не подходит для публичных интерфейсов, что это? IMO, открытые форматы, такие как JSON, превосходят внешне и чаще всего не настолько быстро, чтобы производительность не имела большого значения.

3 голосов
/ 22 июля 2011

Для меня Каучо Гессиан - лучший.

Очень легко начать, и производительность хорошая. Я проверил местный, латентный составляет около 3 мс, на Lan вы можете ожидать около 10 мс.

С гессианом вам не нужно писать другой файл для определения модели (мы используем java + java). Это экономит много времени на разработку и обслуживание.

2 голосов
/ 18 июля 2010

Если вам нужна поддержка для соединения приложений на многих языках / платформах, тогда Hessian - лучший Если вы используете только Java, то Kryo еще быстрее.

1 голос
/ 05 марта 2009

Я сам изучаю это .. пока нет хороших выводов, но я нашел http://dewpoint.snagdata.com/2008/10/21/google-protocol-buffers/, обобщающий все варианты.

0 голосов
/ 13 января 2013

Я бы сказал, что ProtocolBuffers, Thrift или Hessian довольно похожи в том, что касается их двоичных форматов - там, где они обеспечивают поддержку межязыковой сериализации. Присущая им сериализация может иметь небольшие различия в производительности (компромиссы между размером и пространством), но это не самое главное. ProtocolBuffers, безусловно, является хорошо работающим форматом, определенным IDL, который имеет функции для расширяемости, которые делают его привлекательным.

ОДНАКО использование «по проводам» в вопросе подразумевает использование библиотеки связи. Здесь Google предоставил определение интерфейса для protobuf RPC, что эквивалентно созданию спецификации, в которой все детали реализации оставлены на усмотрение разработчика. Это прискорбно, потому что это означает, что де-факто НИКАКОЙ межъязыковой реализации нет - если только вы не можете найти реализацию на разных языках, вероятно, упомянутую здесь http://code.google.com/p/protobuf/wiki/ThirdPartyAddOns. Я видел некоторые реализации RPC, которые поддерживают java и c, или c и c ++ или python, c и т. д., но здесь вам просто нужно найти библиотеку, которая удовлетворяет вашим конкретным требованиям и оценить, иначе вы, вероятно, будете разочарованы. (По крайней мере, я был достаточно разочарован написанием protobuf-rpc-pro)

Kyro - это формат сериализации, подобный protobuf, но только для Java. Kyro / Net является реализацией RPC только для Java, использующей сообщения Kryo. Так что это не лучший выбор для общения между языками.

Сегодня может показаться, что ICE http://www.zeroc.com/, и Thrift, которые предоставляют реализацию RPC из коробки, являются лучшими реализациями RPC на нескольких языках.

0 голосов
/ 25 июня 2010

Я пробовал буфер протокола Google. Он работает с C ++ / MFC, C #, PHP и другими языками (см .: http://code.google.com/p/protobuf/wiki/ThirdPartyAddOns) и работает очень хорошо независимо от транспорта и сохранения / загрузки диска.

0 голосов
/ 20 января 2009

Muscle имеет бинарный транспорт сообщений. Извините, что я не могу комментировать другие, так как я не пробовал их.

...