Апач бережливый
![]() | В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
![]() | |
Оригинальный автор(ы) | Фейсбук, Инк. |
---|---|
Разработчик(и) | Фонд программного обеспечения 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 — это IDL ( язык определения интерфейса ) и двоичный протокол связи. [2] используется для определения и создания сервисов для языков программирования . [3] Его разработал Facebook . С 2020 года это проект с открытым исходным кодом в Apache Software Foundation .
Он использует структуру удаленного вызова процедур (RPC) и объединяет программный стек с механизмом генерации кода для создания кроссплатформенных сервисов. Thrift может подключать приложения, написанные на различных языках и платформах, включая ActionScript , C , C++ , [4] С# , [5] Cocoa , Delphi , Erlang , Go , Haskell , Java , JavaScript , Objective-C , OCaml , Perl , PHP , Python , Ruby , Elixir , Rust , Scala , Smalltalk и Swift . [6] Реализация была описана в техническом документе, опубликованном Facebook в апреле 2007 года и сейчас размещенном на Apache. [7] [8]
Архитектура
[ редактировать ]
Thrift включает в себя полный стек для создания клиентов и серверов. [9] Верхняя часть генерируется кодом из определения Thrift. Из этого файла сервисы генерируют коды клиента и процессора. В отличие от встроенных типов, созданные структуры данных передаются в результате сгенерированного кода. Протокол и транспортный уровень являются частью библиотеки времени выполнения . С помощью Thrift можно определить службу и изменить протокол и транспорт без перекомпиляции кода. Помимо клиентской части, Thrift включает в себя серверную инфраструктуру, такую как блокирующие, неблокирующие и многопоточные серверы. Базовая часть стека ввода-вывода реализована по-разному для разных языков программирования. [9]
Thrift поддерживает ряд протоколов: [9]
- TBinaryProtocol — двоичный формат, не оптимизированный для экономии места . Обрабатывается быстрее, чем текстовый протокол.
- TCompactProtocol – более компактный двоичный формат.
- TJSONProtocol — использует JSON для кодирования данных.
- TSimpleJSONProtocol — протокол только для записи, который не может быть проанализирован Thrift, поскольку он удаляет метаданные с помощью JSON. Подходит для анализа скриптовыми языками. [10]
Поддерживаемые транспорты :
- TSimpleFileTransport — этот транспорт записывает в файл.
- TFramedTransport — этот транспорт необходим при использовании неблокирующего сервера. Он отправляет данные в кадрах, каждому из которых предшествует информация о длине.
- TMemoryTransport — использует память для ввода-вывода . Реализация Java использует простой
ByteArrayOutputStream
внутренне. - TSocket — использует блокирующий сокет ввода-вывода для транспорта.
- TZlibTransport – выполняет сжатие с помощью zlib . Используется совместно с другим транспортом.
Thrift также предоставляет ряд серверов, а именно:
- TNonblockingServer — многопоточный сервер, использующий неблокирующий ввод-вывод (реализация Java использует каналы NIO ). С этим сервером необходимо использовать TFramedTransport.
- TSimpleServer — однопоточный сервер, использующий стандартный блокирующий ввод-вывод.
- TThreadedServer — многопоточный сервер, использующий последовательность потоков для каждой модели соединения и стандартную блокировку ввода-вывода.
- TThreadPoolServer — многопоточный сервер, использующий пул потоков и стандартную блокировку ввода-вывода.
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 – Решения для разработки программного обеспечения. Архивировано из оригинала 31 марта 2022 года . Проверено 30 марта 2011 г.
Thrift — это отдельный проект Apache, который представляет собой двоичный протокол связи.
- ^ Пруницкий, Андрей. «Apache Thrift: Введение» . Объектные вычисления . Архивировано из оригинала 23 июля 2011 года . Проверено 11 апреля 2011 г.
Используя генерацию кода, Thrift создает набор файлов, которые затем можно использовать для создания клиентов и/или серверов.
- ^ «Требования к экономии» . Фонд программного обеспечения Apache . Архивировано из оригинала 26 февраля 2024 года . Проверено 22 июня 2024 г.
{{cite web}}
: CS1 maint: неподходящий URL ( ссылка ) - ↑ Фред Поттер, Экономия при приготовлении капучино. Архивировано 12 августа 2011 г. в Wayback Machine , невероятно роскошный блог Parallel48, 10 июня 2010 г.
- ^ Андрей Пруницкий. «Apache Thrift: генерация кода» . Объектные вычисления . Архивировано из оригинала 23 июля 2011 года . Проверено 12 апреля 2011 г.
- ^ Марк Сли, Адитья Агарвал, Марк Квятковски, Бережливость: реализация масштабируемых межъязыковых сервисов
- ^ «Особенности библиотеки» . Фонд программного обеспечения Apache . 11 июля 2019 года. Архивировано из оригинала 3 мая 2024 года . Проверено 21 апреля 2016 г.
- ^ Jump up to: а б с Андрей Пруницкий. «Apache Thrift: Введение» . Объектные вычисления . Архивировано из оригинала 23 июля 2011 года . Проверено 11 апреля 2011 г.
- ^ Скелтон, Стивен (3 августа 2013 г.). «Удобное для разработчиков журналирование запросов на сбережения» . Стивенскелтон . Архивировано из оригинала 24 января 2024 года . Проверено 3 июля 2014 г.