Apache Thrift - Apache Thrift
Эта статья поднимает множество проблем. Пожалуйста помоги Улучши это или обсудите эти вопросы на страница обсуждения. (Узнайте, как и когда удалить эти сообщения-шаблоны) (Узнайте, как и когда удалить этот шаблон сообщения)
|
Оригинальный автор (ы) | |
---|---|
Разработчики) | Фонд программного обеспечения Apache |
Стабильный выпуск | 0.13.0 / 16 октября 2019 |
Репозиторий | Хранение сбережений |
Написано в | ActionScript, C, C #, C ++, D, Дротик, Дельфи, Erlang, Идти, Haskell, Haxe, Ява, JavaScript, Node.js, OCaml, Perl, PHP, Python, Ржавчина, Болтовня |
Тип | Удаленный вызов процедур фреймворк |
Лицензия | Лицензия Apache 2.0 |
Интернет сайт | бережливость |
Бережливость является язык определения интерфейса и протокол двоичной связи[1]используется для определения и создания Сервисы для множества языков программирования.[2] Он образует удаленный вызов процедур (RPC) и был разработан в Facebook за «разработку масштабируемых межъязыковых сервисов». Он объединяет программный стек с механизмом генерации кода для создания кросс-платформенный сервисы, которые могут соединять приложения, написанные на разных языках и фреймворках, включая ActionScript, C, C ++,[3] C #, Капучино,[4] Какао, Delphi, Erlang, Идти, Haskell, Ява, JavaScript, Цель-C, OCaml, Perl, PHP, Python, Рубин, Эликсир,[5] Ржавчина, Болтовня и Swift.[6] Он был разработан в Facebook, и теперь (2020 г.) Открытый исходный код проект в Фонд программного обеспечения Apache. Реализация была описана в апрельском 2007 г. техническом документе, выпущенном Facebook, который теперь размещен на Apache.[7][8]
Архитектура
Thrift включает в себя полный стек для создания клиентов и серверов.[9] Верхняя часть - это сгенерированный код из определения Thrift. Из этого файла службы генерируют код клиента и процессора. В отличие от встроенных типов, созданные структуры данных отправляются как результат в сгенерированном коде. Протокол и транспортный уровень являются частью библиотека времени исполнения. С помощью Thrift можно определить службу и изменить протокол и транспорт без перекомпиляции кода. Помимо клиентской части, Thrift включает в себя серверную инфраструктуру для связывания протоколов и транспорта вместе, например, блокирующие, неблокирующие и многопоточные серверы. Базовая часть стека ввода-вывода реализована по-разному для разных языков.
Thrift поддерживает ряд протоколов:[9]
- TBinaryProtocol - простой двоичный формат, простой, но не оптимизированный для эффективность использования пространства. Быстрее обрабатывать, чем текстовый протокол, но труднее отлаживать.
- TCompactProtocol - более компактный двоичный формат; как правило, более эффективно обрабатывать
- TJSONProtocol - Использует JSON для кодирования данных.
- TSimpleJSONProtocol - протокол только для записи, который не может быть проанализирован Thrift, поскольку он удаляет метаданные с использованием JSON. Подходит для разбора скриптовыми языками.[10]
Поддерживаемый транспортирует находятся:
- TSimpleFileTransport - этот транспорт записывает в файл.
- TFramedTransport - этот транспорт необходим при использовании неблокирующего сервера. Он отправляет данные в кадрах, где каждому кадру предшествует информация о длине.
- TMemoryTransport - Использует память для ввода / вывода. В реализации Java используется простой
ByteArrayOutputStream
внутренне. - TSocket - использует блокирующий ввод-вывод сокета для транспорта.
- TZlibTransport - выполняет сжатие с использованием zlib. Используется совместно с другим транспортом.
Thrift также предоставляет ряд серверов, которые
- TNonblockingServer - многопоточный сервер, использующий неблокирующий ввод / вывод (Реализация Java использует НИО каналы). TFramedTransport должен использоваться с этим сервером.
- TSimpleServer - однопоточный сервер, использующий стандартный блокирующий ввод-вывод. Полезно для тестирования.
- TThreadedServer - многопоточный сервер, использующий модель потока для каждого соединения и стандартный блокирующий ввод-вывод.
- TThreadPoolServer - многопоточный сервер, использующий пул потоков и стандартный блокирующий ввод-вывод.
Льготы
Некоторые заявленные преимущества Thrift включают:[нужна цитата ]
- Межъязыковая сериализация с меньшими накладными расходами, чем такие альтернативы, как МЫЛО за счет использования двоичного формата.
- Нет XML файлы конфигурации.
- В языковые привязки чувствовать себя естественно. Например, Ява использует
ArrayList
. C ++ используетstd :: vector
. - Формат проводов уровня приложения и формат проводов уровня сериализации четко разделены. Их можно модифицировать самостоятельно.
- К предопределенным стилям сериализации относятся: двоичный, удобный для HTTP и компактный двоичный.
- Работает как кросс-языковой файл сериализация.
- Мягкое управление версиями[прояснить ] протокола. Для бережливости не требуется централизованного и явного механизма, такого как основная версия / второстепенная версия. Слабосвязанные команды могут свободно развивать вызовы RPC.
- Никаких зависимостей сборки или нестандартного ПО. Никакого сочетания несовместимых лицензий на программное обеспечение.
Создание сберегательного сервиса
Thrift написан на C ++, но может создавать код для нескольких языков. Чтобы создать сервис Thrift, нужно написать файлы Thrift, которые описывают его, сгенерировать код на целевом языке, написать код для запуска сервера и вызвать его из клиента. Вот пример кода такого файла описания:
перечислитьPhoneType{ГЛАВНАЯ,РАБОТА,МОБИЛЬНЫЙ,ДРУГОЙ}структураТелефон{1:i32мне бы,2:строкаколичество,3:PhoneTypeтип}оказание услугТелефонная служба{ТелефонfindById(1:i32мне бы),список<Телефон>найти все()}
Thrift сгенерирует код на основе этой описательной информации. Например, в Java PhoneType
будет простой перечислить
внутри Телефон
класс.
Смотрите также
использованная литература
- ^ «Установка и использование Apache Cassandra с Java, часть 4 (экономичный клиент)». http://www.sodeso.nl/: Sodeso - Решения для разработки программного обеспечения. Получено 2011-03-30.
Thrift - это отдельный проект Apache, который представляет собой двоичный протокол связи.
- ^ Андрей Пруницкий. «Apache Thrift: Введение». http://www.ociweb.com/: Object Computing Inc. - компания открытых решений. Получено 2011-04-11.
Посредством простого и понятного языка определения интерфейса (IDL) Thrift позволяет [пользователям] определять и создавать сервисы, которые могут использоваться и обслуживаться множеством языков. Используя генерацию кода, Thrift создает набор файлов, которые затем можно использовать для создания клиентов и / или серверов. Помимо возможности взаимодействия, Thrift может быть очень эффективным благодаря уникальному механизму сериализации, который эффективен как во времени, так и в пространстве.
- ^ Требования к бережливости, увидеть Эта проблема для поддержки Windows
- ^ Фред Поттер, Экономия на капучино В архиве 2011-08-12 на Wayback Machine, постер сочного блога parallel48, 10 июня 2010 г.
- ^ pinterest / elixir-thrift, Pinterest, 2020-02-05, получено 2020-02-06
- ^ Андрей Пруницкий. «Apache Thrift: создание кода». http://www.ociweb.com/: Object Computing Inc. - компания открытых решений. Получено 2011-04-12.
Thrift поддерживает множество языков программирования тоже в разной степени. Полный список ниже. Будьте осторожны, прежде чем предполагать, что только потому, что ваш язык имеет некоторую поддержку, он поддерживает все функции Thrift. Например, Python поддерживает только TBinaryProtocol. Какао, C ++, C #, Erlang, Haskell, Java, OCaml, Perl, PHP, Python, Ruby и Smalltalk
- ^ Марк Сли, Адитья Агарвал, Марк Квятковски, Экономичность: реализация масштабируемых межъязыковых сервисов
- ^ «Функции библиотеки - Thrift Wiki». Получено 2016-04-21.
- ^ а б Андрей Пруницкий. «Apache Thrift: Введение». http://www.ociweb.com/: Object Computing Inc. - компания открытых решений. Получено 2011-04-11.
Верхняя часть стека - это сгенерированный код из вашего файла определения Thrift. В результате сберегательных услуг создается код клиента и процессора. На схеме они представлены коричневыми прямоугольниками. Отправляемые структуры данных (кроме встроенных типов) также приводят к сгенерированному коду. В результате появляются красные прямоугольники. Протокол и транспорт являются частью библиотеки времени выполнения Thrift. Следовательно, с помощью Thrift вы можете определить службу и можете свободно изменять протокол и транспорт без повторной генерации кода. Thrift также включает в себя серверную инфраструктуру для объединения протоколов и транспортов. Доступны блокирующие, неблокирующие, однопоточные и многопоточные серверы. Часть стека «Базовый ввод-вывод» отличается в зависимости от рассматриваемого языка. Для сетевого ввода-вывода Java и Python встроенные библиотеки используются библиотекой Thrift, в то время как реализация C ++ использует собственную пользовательскую реализацию.
- ^ Скелтон, Стивен. «Ведение журнала запросов на сбережение, удобное для разработчиков». Получено 3 июля 2014.