Это прежде всего протоколы сериализации.Каждый раз, когда вам нужно перенести данные между машинами или процессами или сохранить их на диске и т. Д., Они должны быть сериализованы.
Xml / json / etc работают ok , но они имеют определенные накладные расходычто делает их нежелательными - в дополнение к ограниченным возможностям, они относительно большие и вычислительно дорогие для обработки в любом направлении.Размер может быть улучшен путем сжатия, но это еще больше увеличивает стоимость обработки.У них есть преимущество в том, что они удобочитаемы для человека, но: большинство данных не читается людьми.
Теперь люди могут тратить целую вечность на написание трудоемкой, утомленной ошибками, неоптимальной,непереносимые форматы, которые являются менее многословными, или они могут использовать хорошо проверенные форматы сериализации общего назначения, которые хорошо документированы, кроссплатформенны, дешевы в обработке и разработаны людьми, которые тратят далеко слишком долго беспокоился о сериализации, чтобы быть дружелюбным - например, толерантным к версии.В идеале это также позволило бы независимый от платформы уровень описания (например, «wsdl» или «mex»), который позволяет легко сказать «вот как выглядят данные» любому другому разработчику (не зная, какие инструменты / язык / платформу они используют).используют), и пусть они безболезненно потребляют данные, не создавая новый сериализатор / десериализатор с нуля.
Вот где приходят protobuf и thrift.
В большинстве случаев volume-мудро , я бы на самом деле ожидал, что оба конца будут в одной и той же технологии в одной и той же компании: просто, им нужно получить данные от А до В с минимумом суеты и накладных расходов, или они должны хранить и загружать ихпозже (например, мы используем protobuf внутри блогов redis в качестве вторичного кэша).