Для чего используются Apache Thrift и Google Protocol Buffers? - PullRequest
13 голосов
/ 13 октября 2011

Я вижу, что Thrift и Protocol Buffers часто упоминаются, но я не совсем понимаю, для чего они используются. Из моего ограниченного понимания, они в основном используются, когда вы хотите выполнять сериализацию между языками, то есть когда у вас есть некоторые структуры данных на одном языке, которые вы хотите отправить в другую программу, написанную на другом языке.

Это правильно? Они используются для чего-то еще?

(Исходя из моего вновь ограниченного понимания, я думаю, что Thrift и Protocol Buffers - это, по сути, две разные версии одной и той же вещи - не стесняйтесь исправлять меня или уточнять.)

1 Ответ

18 голосов
/ 13 октября 2011

Это прежде всего протоколы сериализации.Каждый раз, когда вам нужно перенести данные между машинами или процессами или сохранить их на диске и т. Д., Они должны быть сериализованы.

Xml / json / etc работают ok , но они имеют определенные накладные расходычто делает их нежелательными - в дополнение к ограниченным возможностям, они относительно большие и вычислительно дорогие для обработки в любом направлении.Размер может быть улучшен путем сжатия, но это еще больше увеличивает стоимость обработки.У них есть преимущество в том, что они удобочитаемы для человека, но: большинство данных не читается людьми.

Теперь люди могут тратить целую вечность на написание трудоемкой, утомленной ошибками, неоптимальной,непереносимые форматы, которые являются менее многословными, или они могут использовать хорошо проверенные форматы сериализации общего назначения, которые хорошо документированы, кроссплатформенны, дешевы в обработке и разработаны людьми, которые тратят далеко слишком долго беспокоился о сериализации, чтобы быть дружелюбным - например, толерантным к версии.В идеале это также позволило бы независимый от платформы уровень описания (например, «wsdl» или «mex»), который позволяет легко сказать «вот как выглядят данные» любому другому разработчику (не зная, какие инструменты / язык / платформу они используют).используют), и пусть они безболезненно потребляют данные, не создавая новый сериализатор / десериализатор с нуля.

Вот где приходят protobuf и thrift.

В большинстве случаев volume-мудро , я бы на самом деле ожидал, что оба конца будут в одной и той же технологии в одной и той же компании: просто, им нужно получить данные от А до В с минимумом суеты и накладных расходов, или они должны хранить и загружать ихпозже (например, мы используем protobuf внутри блогов redis в качестве вторичного кэша).

...