Apache Thrift | |
---|---|
![]() | |
Тип | RPC framework |
Разработчик | Apache Software Foundation |
Написана на | C++ |
Операционная система | Кроссплатформенное программное обеспечение |
Первый выпуск | 14 апреля 2012[1] |
Последняя версия | 0.16.0 (9 февраля 2022 ) |
Репозиторий |
git-wip-us.apache.org/re… github.com/apache/thrift… |
Лицензия | Apache License 2.0 |
Сайт | thrift.apache.org |
![]() |
Thrift (с англ. — «бережливость», произносится как [θrift]) — язык описания интерфейсов, который используется для определения и создания служб под разные языки программирования. Является фреймворком к удалённому вызову процедур (RPC). Используется компанией Facebook в качестве масштабируемого кросс-языкового сервиса по разработке. Сочетает в себе программный конвейер с движком генерации кода для разработки служб, в той или иной степени эффективно и легко работающих между такими языками как[2] C#, C++, D, Cappuccino, Cocoa, Delphi, Erlang, Go, Haskell, Java, OCaml, Perl, PHP, Python, Ruby, Rust, Smalltalk и JavaScript[3]. Проще говоря, Thrift является двоичным протоколом связи. С апреля 2007 разрабатывается как open source проект некоммерческой организации Apache Software Foundation.
Thrift включает в себя готовый программный конвейер, состоящий из шести уровней, для работы с клиентской и серверной частью. Верхний уровень составляет сгенерированный код описания Thrift. Службы генерируют из него клиентский и серверный код. В отличие от встроенных типов, созданная структура данных возвращается как результат в сгенерированном коде. Уровни протокола и транспортировки являются частью runtime-библиотеки. В Thrift возможно выбрать службы и изменить протокол и транспортировку без перекомпиляции кода. Помимо клиентской части Thrift включает в себя серверную инфраструктуру для связи протокола и транспортировки в blocking
, non-blocking
и multi-threaded
серверах. Основа уровня Ввода/Вывода по-разному реализована для различных языков.
ByteArrayOutputStream
.zlib
. Используется в сочетании с другим транспортом. Отсутствует в реализации Java.multi-threaded
сервер, использующий non-blocking
ввод / вывод (Java реализация использует NIO channels
). На этих серверах должен использоваться TFramedTransport.single-threaded
, использующий std blocking
ввод / вывод. Полезен для тестирования.multi-threaded
сервер, использующий std blocking
ввод / вывод.ArrayList<String>
. C++ использует std::vector<std::string>.
Apache Thrift | Protocol Buffers | |
---|---|---|
Разработчик | Facebook, Apache | |
Поддерживаемые языки | C++, C#, Dart, D, Go, Haskell, Java, JavaScript, Python, PHP, XSD, Ruby, Perl, Objective C,
Erlang, Smalltalk, OCaml, Haskell |
C++, C#, Dart, Go, Java, JavaScript, Python, PHP, Objective C, Ruby |
Исходящие форматы | Binary, JSON | Binary |
Простые типы | bool byte 16/32/64-bit integers double string byte sequence map<t1,t2> list<t> set<t> |
bool 32/64-bit integers float double string byte sequence повторные свойства работают как списки |
Константы | Да | Нет |
Составной тип | struct | message |
Исключения | Да | Нет |
Документация | Проблематично | Хорошая |
Лицензия | Apache | BSD-style |
Расширения составных типов | Нет | Да |
Thrift написан на C++, однако код может быть написан на нескольких языках. Для создания Thrift службы для начала надо написать Thrift файлы, которые описывают его, затем сгенерировать код на выходном языке и указать команды запуска сервера, вызвав после чего их в клиенте. Вот пример файла описания:
enum PhoneType {
HOME,
WORK,
MOBILE,
OTHER
}
struct Phone {
1: i32 id,
2: string number,
3: PhoneType type
}
Thrift сгенерирует код из этого файла описания, например, в Java. PhoneType
будет простым перечислением (enum)
внутри POJO для класса Phone.
![]() | В статье не хватает ссылок на источники (см. рекомендации по поиску). |
Для улучшения этой статьи желательно:
|