Апач бережливый
![]() | В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
![]() | |
Оригинальный автор(ы) | Фейсбук, Инк. |
---|---|
Разработчик(и) | Фонд программного обеспечения Apache |
Стабильная версия | 0.19.0
/ 2 сентября 2023 г [1] |
Репозиторий | Комиссионный репозиторий |
Написано в | ActionScript , C , C# , C++ , D , Dart , Delphi , Erlang , Go , Haskell , Haxe , Java , JavaScript , Node.js , OCaml , Perl , PHP , Python , Rust , Scala , Smalltalk |
Тип | удаленного вызова процедур Платформа |
Лицензия | Апач 2.0 |
Веб-сайт | бережливость |
Thrift — это язык определения интерфейса , двоичный протокол связи [2] используется для определения и создания сервисов для языков программирования. [3] Его разработал Facebook . С 2020 года это проект с открытым исходным кодом в Apache Software Foundation .
Он использует структуру удаленного вызова процедур (RPC) и объединяет программный стек с механизмом генерации кода для создания кроссплатформенных сервисов. В конечном итоге, Thrift может подключать приложения, написанные на различных языках и платформах, включая ActionScript , C , C++ , [4] С# , [5] Какао , Delphi , Erlang , Go , Haskell , Java , JavaScript , Objective-C , OCaml , Perl , PHP , Python , Ruby , Elixir , [6] Rust , Scala , Smalltalk и Swift . [7] Реализация была описана в техническом документе, опубликованном Facebook в апреле 2007 года и сейчас размещенном на Apache. [8] [9]
Архитектура [ править ]

Thrift включает в себя полный стек для создания клиентов и серверов. [10] Верхняя часть генерируется кодом из определения Thrift. Из этого файла сервисы генерируют коды клиента и процессора. В отличие от встроенных типов, созданные структуры данных передаются в результате сгенерированного кода. Протокол и транспортный уровень являются частью библиотеки времени выполнения . С помощью Thrift можно определить службу и изменить протокол и транспорт без перекомпиляции кода. Помимо клиентской части, Thrift включает в себя серверную инфраструктуру для объединения протоколов и транспорта, например, блокирующие, неблокирующие и многопоточные серверы. Базовая часть стека ввода-вывода реализована по-разному для разных языков.
Thrift поддерживает ряд протоколов: [10]
- TBinaryProtocol — простой двоичный формат, простой, но не оптимизированный для экономии пространства . Обрабатывается быстрее, чем текстовый протокол, но сложнее отлаживается .
- TCompactProtocol – более компактный двоичный формат; как правило, более эффективно обрабатывать
- TJSONProtocol — использует JSON для кодирования данных.
- TSimpleJSONProtocol — протокол только для записи, который не может быть проанализирован Thrift, поскольку он удаляет метаданные с помощью JSON. Подходит для анализа скриптовыми языками. [11]
Поддерживаемые транспорты :
- TSimpleFileTransport — этот транспорт записывает в файл.
- TFramedTransport — этот транспорт необходим при использовании неблокирующего сервера. Он отправляет данные в кадрах, каждому из которых предшествует информация о длине.
- TMemoryTransport — использует память для ввода-вывода . Реализация Java использует простой
ByteArrayOutputStream
внутренне. - TSocket — использует блокирующий сокет ввода-вывода для транспорта.
- TZlibTransport – выполняет сжатие с помощью zlib . Используется совместно с другим транспортом.
Thrift также предоставляет ряд серверов, а именно:
- TNonblockingServer — многопоточный сервер, использующий неблокирующий ввод-вывод (реализация Java использует каналы NIO ). С этим сервером необходимо использовать TFramedTransport.
- TSimpleServer — однопоточный сервер, использующий стандартный блокирующий ввод-вывод. Полезно для тестирования.
- TThreadedServer — многопоточный сервер, использующий последовательность потоков для каждой модели соединения и стандартную блокировку ввода-вывода.
- TThreadPoolServer — многопоточный сервер, использующий пул потоков и стандартную блокировку ввода-вывода.
Преимущества [ править ]
Некоторые заявленные преимущества Thrift включают в себя: [12]
- Межъязыковая сериализация с меньшими издержками, чем альтернативы, такие как SOAP, благодаря использованию двоичного формата.
- Нет XML . файлов конфигурации
- Языковые привязки кажутся естественными. Например, Java использует
ArrayList<String>
. С++ используетstd::vector<std::string>
. - Формат передачи уровня приложения и формат передачи уровня сериализации четко разделены. Их можно модифицировать независимо.
- К предопределенным стилям сериализации относятся: двоичный, HTTP-дружественный и компактный двоичный.
- Выполняет функцию межъязыковой сериализации файлов .
- Мягкое управление версиями [ объяснить ] протокола. Thrift не требует централизованного и явного механизма, такого как major-version/minor-version . Слабо связанные команды могут свободно развивать вызовы RPC.
- Никаких зависимостей сборки или нестандартного программного обеспечения. Никакого сочетания несовместимых лицензий на программное обеспечение.
Создание сберегательного сервиса [ править ]
Thrift написан на C++, но может создавать код для ряда языков. Чтобы создать службу Thrift, необходимо написать файлы Thrift, которые ее описывают, сгенерировать код на целевом языке, написать некоторый код для запуска сервера и вызвать его из клиента. Вот пример кода такого файла описания:
enum PhoneType {
HOME,
WORK,
MOBILE,
OTHER
}
struct Phone {
1: i32 id,
2: string number,
3: PhoneType type
}
service PhoneService {
Phone findById(1: i32 id),
list<Phone> findAll()
}
Thrift сгенерирует код на основе этой описательной информации. Например, в Java PhoneType
будет простой enum
внутри Phone
сорт.
См. также [ править ]
Ссылки [ править ]
- ^ «Apache Thrift — Загрузки» . Проверено 6 января 2024 г.
- ^ «Установка и использование Apache Cassandra с Java, часть 4 (Thrift Client)» . Sodeso – Решения для разработки программного обеспечения . Проверено 30 марта 2011 г.
Thrift — это отдельный проект Apache, который представляет собой двоичный протокол связи.
- ^ Андрей Пруницкий. «Apache Thrift: Введение» . Объектные вычисления . Архивировано из оригинала 23 июля 2011 г. Проверено 11 апреля 2011 г.
Благодаря простому и понятному языку определения интерфейса (IDL) Thrift позволяет [пользователям] определять и создавать сервисы, которые одновременно могут использоваться и обслуживаться на многих языках. Используя генерацию кода, Thrift создает набор файлов, которые затем можно использовать для создания клиентов и/или серверов. Помимо совместимости, Thrift может быть очень эффективным благодаря уникальному механизму сериализации, который эффективен как во времени, так и в пространстве.
- ^ Требования к экономии , см. этот выпуск для поддержки Windows.
- ↑ Фред Поттер, Экономия при приготовлении капучино. Архивировано 12 августа 2011 г. в Wayback Machine , невероятно роскошный блог Parallel48, 10 июня 2010 г.
- ^ pinterest/elixir-thrift , Pinterest, 05 февраля 2020 г. , получено 6 февраля 2020 г.
- ^ Андрей Пруницкий. «Apache Thrift: генерация кода» . Объектные вычисления . Архивировано из оригинала 23 июля 2011 г. Проверено 12 апреля 2011 г.
Thrift поддерживает многие языки программирования тоже в разной степени. Полный список приведен ниже. Будьте осторожны, прежде чем предполагать, что именно потому, что ваш язык имеет некоторую поддержку, он поддерживает все функции Thrift. Например, Python поддерживает только TBinaryProtocol. Cocoa, C++, C#, Erlang, Haskell, Java, OCaml, Perl, PHP, Python, Ruby и Smalltalk.
- ^ Марк Сли, Адитья Агарвал, Марк Квятковски, Бережливость: реализация масштабируемых межъязыковых сервисов
- ^ «Особенности библиотеки — Thrift Wiki» . Проверено 21 апреля 2016 г.
- ^ Jump up to: Перейти обратно: а б Андрей Пруницкий. «Apache Thrift: Введение» . Объектные вычисления . Архивировано из оригинала 23 июля 2011 г. Проверено 11 апреля 2011 г.
Верхняя часть стека генерируется кодом из файла определения Thrift. Результатом бережливых сервисов является создание кода клиента и процессора. На схеме они обозначены коричневыми прямоугольниками. Отправляемые структуры данных (кроме встроенных типов) также приводят к созданию сгенерированного кода. В результате появляются красные прямоугольники. Протокол и транспорт являются частью библиотеки времени выполнения Thrift. Таким образом, с помощью Thrift вы можете определить службу и свободно менять протокол и транспорт без повторной генерации кода. Thrift также включает в себя серверную инфраструктуру для объединения протоколов и транспорта. Доступны блокирующие, неблокирующие, одно- и многопоточные серверы. Часть стека «Базовый ввод-вывод» различается в зависимости от рассматриваемого языка. Для сетевого ввода-вывода Java и Python встроенные библиотеки используются библиотекой Thrift, а реализация C++ использует свою собственную реализацию.
- ^ Скелтон, Стивен (3 августа 2013 г.). «Удобное для разработчиков журналирование запросов на сбережения» . Проверено 3 июля 2014 г.
- ^ Руководство программиста по Apache Thrift, Рэнди Абернати, Manning Publications, 2019, ISBN 978-1-6172-9616-1