Які найбільші плюси і мінуси Apache Thrift vs протокольних буферів Google ?
Які найбільші плюси і мінуси Apache Thrift vs протокольних буферів Google ?
Відповіді:
Вони обидва пропонують багато однакових можливостей; однак, є деякі відмінності:
Set
типВ основному вони досить рівноцінні (буфери протоколів трохи ефективніші від того, що я прочитав).
map
також
Ще одна важлива відмінність - це мови, які підтримуються за замовчуванням.
Обидва можуть бути розширені на інші платформи, але це мовні прив’язки, доступні поза коробкою.
RPC - ще одна ключова відмінність. Thrift генерує код для реалізації клієнтів RPC та серверів, де буфери протоколів, як правило, розроблені лише як формат обміну даними.
option optimize_for = SPEED
.Щоб детальніше ознайомитись з відмінностями, перевірте, чи не відрізняється вихідний код у цьому проекті з відкритим кодом .
Як я вже говорив як тема "Ощадливість проти протоколів" :
Посилаючись на порівняння Thrift vs Protobuf vs JSON :
Крім того, існує безліч цікавих додаткових інструментів для тих рішень, які можуть вирішити. Ось приклади для Protobuf: Protobuf-wireshark , protobufeditor .
Буфери протоколів, здається, мають більш компактне представлення, але це лише враження, яке я отримую від прочитання довідки про ощадливість. Своїми словами:
Ми вирішили проти екстремальних оптимізацій зберігання даних (тобто упаковки малих цілих чисел у ASCII або використання 7-бітового формату продовження) заради простоти та ясності в коді. Ці зміни легко можна зробити, якщо і коли ми стикаємося з критично важливими для експлуатації випадками, які цього вимагають.
Крім того, це може бути саме моє враження, але, здається, буфери протоколів мають дещо товстіші абстракції навколо версій структури. У Thrift є деяка підтримка версій, але для цього потрібно докласти трохи зусиль.
Мені вдалося покращити продуктивність за допомогою текстового протоколу порівняно з протобуффом на python. Однак, ніякої перевірки типу чи іншої фантазії utf8 перетворення тощо ..., що пропонує протобуф.
Отже, якщо серіалізація / десеріалізація - це все, що вам потрібно, то, ймовірно, ви можете використовувати щось інше.
http://dhruvbird.blogspot.com/2010/05/protocol-buffers-vs-http.html
Ще одна очевидна річ, яка ще не згадана, - це те, що вони можуть бути як про, так і проти (і однаково для обох) - це те, що вони є двійковими протоколами. Це дає можливість більш компактного представлення та, можливо, більшої продуктивності (плюсів), але зі зниженою читабельністю (а точніше, налагодженістю), кон.
Крім того, обидва мають трохи меншу підтримку інструментів, ніж стандартні формати, такі як xml (а може бути, навіть json).
(EDIT) Ось цікаве порівняння, яке вирішує як різниці розмірів, так і показників продуктивності, а також включає числа для інших форматів (xml, json).
Згідно з wiki, час роботи Thrift не працює в Windows.
ProtocolBuffers - Швидше.
Тут є хороший орієнтир:
http://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking
Ви також можете заглянути в Авро, оскільки Авро ще швидший.
Microsoft має тут пакет:
http://www.nuget.org/packages/Microsoft.Hadoop.Avro
До речі, найшвидший, що я коли-небудь бачив - це Cap'nProto ;
Реалізацію AC # можна знайти в Github-сховищі Marc Gravell .
Я думаю, що більшість із цих пунктів пропустили основний факт, що Thrift є рамкою RPC, яка, можливо, має можливість серіалізувати дані за допомогою різних методів (бінарних, XML тощо).
Буфери протоколів розроблені виключно для серіалізації, це не така структура, як Thrift.
Для одного протобуф - це не повна реалізація RPC. Для цього потрібно щось на зразок gRPC.
gPRC дуже повільний порівняно з Thrift:
Тут є кілька чудових моментів, і я збираюся додати ще один випадок, якщо сюди перетинає хтось шлях.
Ощадливість дає можливість вибирати між ощадливо-бінарним та ощадливим компактним (де) серіалізатором, ощадливість-бінарний матиме відмінну продуктивність, але більший розмір пакета, тоді як ощадливість-компактність дасть вам хороше стиснення, але потребує більшої потужності для обробки. Це зручно, тому що ви завжди можете перемикатися між цими двома режимами так само просто, як змінювати рядок коду (чорт, навіть зробити його настроюваним). Тож якщо ви не впевнені, скільки вашої програми має бути оптимізовано під розмір пакету або потужність обробки, ощадливість може стати цікавим вибором.
PS: Дивіться цей чудовий тестовий проект, за допомогою thekvs
якого порівнюється багато серіалізаторів, включаючи ощадливість-бінарний, ощадливий компактний та протобуф: https://github.com/thekvs/cpp-serializers
PS: Існує ще один названий серіалізатор, YAS
який також дає цю опцію, але це без схем, див. Посилання вище.