Эта статья поднимает множество проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалить эти сообщения-шаблоны ) ( Узнайте, как и когда удалить этот шаблон сообщения )
|
Автор (ы) оригинала | |
---|---|
Разработчики) | Фонд программного обеспечения Apache |
Стабильный выпуск | 0.14.1 / 8 марта 2021 г . |
Репозиторий | Хранилище сбережений |
Написано в | ActionScript , C , C # , C ++ , D , Dart , Delphi, Erlang , Go , Haskell , Haxe , Java , JavaScript , Node.js , OCaml , Perl , PHP , Python , Rust , Scala , SmallTalk |
Тип | Удаленный вызов процедуры рамки |
Лицензия | Лицензия Apache 2.0 |
Веб-сайт | бережливость |
Thrift - это язык определения интерфейса и протокол двоичной связи [1], используемый для определения и создания сервисов для множества языков программирования. [2] Он формирует структуру удаленного вызова процедур (RPC) и был разработан в Facebook для «разработки масштабируемых межъязыковых сервисов». Он сочетает в себе программный стек с механизмом генерации кода для создания кроссплатформенных сервисов, которые могут соединять приложения, написанные на различных языках и фреймворках, включая ActionScript , C , C ++ , [3] C # ,Cappuccino , [4] Какао , Delphi , Erlang , Go , Haskell , Java , JavaScript , Objective-C , OCaml , Perl , PHP , Python , Ruby , Elixir , [5] Rust , Scala , Smalltalk и Swift . [6] Он был разработан в Facebook, и теперь (2020) это проект с открытым исходным кодом в Apache Software Foundation.. Реализация была описана в техническом документе, выпущенном Facebook в апреле 2007 года, который теперь размещен на 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 использует каналы NIO ). TFramedTransport должен использоваться с этим сервером.
- TSimpleServer - однопоточный сервер, использующий стандартный блокирующий ввод-вывод. Полезно для тестирования.
- TThreadedServer - многопоточный сервер, использующий модель потока на соединение и стандартный блокирующий ввод-вывод.
- TThreadPoolServer - многопоточный сервер, использующий пул потоков и стандартный блокирующий ввод-вывод.
Преимущества [ править ]
Некоторые заявленные преимущества Thrift включают: [ необходима ссылка ]
- Межъязыковая сериализация с меньшими накладными расходами, чем такие альтернативы, как SOAP, благодаря использованию двоичного формата.
- Нет файлов конфигурации XML .
- В языке привязок чувствовать себя естественно. Например, Java использует
ArrayList<String>
. C ++ используетstd::vector<std::string>
. - Формат проводов уровня приложения и формат проводов уровня сериализации четко разделены. Их можно модифицировать самостоятельно.
- К предопределенным стилям сериализации относятся: двоичный, удобный для HTTP и компактный двоичный.
- Удваивается как межъязыковая сериализация файлов .
- Мягкое версионирование [ пояснить ] протокола. Для бережливости не требуется централизованный и явный механизм, такой как major-version / minor-version . Слабосвязанные команды могут свободно развивать вызовы RPC.
- Никаких зависимостей сборки или нестандартного ПО. Никакого сочетания несовместимых лицензий на программное обеспечение.
Создание сберегательного сервиса [ править ]
Thrift написан на C ++, но может создавать код для нескольких языков. Чтобы создать сервис Thrift, нужно написать файлы Thrift, которые описывают его, сгенерировать код на целевом языке, написать код для запуска сервера и вызвать его из клиента. Вот пример кода такого файла описания:
enum PhoneType { ГЛАВНАЯ , РАБОТА , МОБИЛЬНЫЙ , ДРУГИЕ}struct Phone { 1 : идентификатор i32 , 2 : номер строки , 3 : Тип PhoneType }service PhoneService { Телефон findById ( 1 : i32 id ), list < Телефон > findAll ( ) }
Thrift сгенерирует код на основе этой описательной информации. Например, в Java это PhoneType
будет просто enumвнутри Phone
класса.
См. Также [ править ]
- Сравнение форматов сериализации данных
- Apache Avro
- Первая абстрактная синтаксическая нотация (ASN.1)
- Гессен
- Буферы протокола
- Представление внешних данных (XDR)
- Система Интернет-коммуникаций (Ice)
- gRPC
- SDXF
Ссылки [ править ]
- ^ «Установка и использование Apache Cassandra с Java, часть 4 (экономичный клиент)» . http://www.sodeso.nl/ : Sodeso - Решения для разработки программного обеспечения . Проверено 30 марта 2011 .
Thrift - это отдельный проект Apache, который представляет собой двоичный протокол связи.
- ^ Эндрю Prunicki. «Apache Thrift: Введение» . http://www.ociweb.com/ : Object Computing Inc. - компания открытых решений . Проверено 11 апреля 2011 .
Посредством простого и понятного языка определения интерфейса (IDL) Thrift позволяет [пользователям] определять и создавать сервисы, которые могут потребляться и обслуживаться множеством языков.
Используя генерацию кода, Thrift создает набор файлов, которые затем можно использовать для создания клиентов и / или серверов.
Помимо возможности взаимодействия, Thrift может быть очень эффективным благодаря уникальному механизму сериализации, который эффективен как во времени, так и в пространстве.
- ^ Требования к сбережению , см. Эту проблему для поддержки Windows
- ↑ Fred Potter, Using Thrift with Cappuccino Архивировано 12 августа 2011 г.в Wayback Machine , постер сочный блог parallel48, 10 июня 2010 г.
- ^ pinterest / elixir-thrift , Pinterest, 05.02.2020 , получено 06.02.2020
- ^ Эндрю Prunicki. «Экономичность Apache: создание кода» . http://www.ociweb.com/ : Object Computing Inc. - компания открытых решений . Проверено 12 апреля 2011 .
Thrift поддерживает множество языков программирования тоже в разной степени.
Полный список ниже.
Будьте осторожны, прежде чем предполагать, что только потому, что ваш язык имеет некоторую поддержку, он поддерживает все функции Thrift.
Например, Python поддерживает только TBinaryProtocol.
Какао, C ++, C #, Erlang, Haskell, Java, OCaml, Perl, PHP, Python, Ruby и Smalltalk
- ^ Марк Slee, Адитья Агарвал, Марк Квятковский, бережливость: Реализация Scalable Cross-Language Services
- ^ «Особенности библиотеки - Thrift Wiki» . Проверено 21 апреля 2016 .
- ^ а б Эндрю Пруницкий. «Apache Thrift: Введение» . http://www.ociweb.com/ : Object Computing Inc. - компания открытых решений . Проверено 11 апреля 2011 .
Верхняя часть стека - это сгенерированный код из вашего файла определения Thrift. В результате сберегательных услуг создается код клиента и процессора. На схеме они представлены коричневыми прямоугольниками. Отправляемые структуры данных (кроме встроенных типов) также приводят к сгенерированному коду. В результате появляются красные прямоугольники. Протокол и транспорт являются частью библиотеки времени выполнения Thrift. Поэтому с помощью Thrift вы можете определить службу и можете свободно изменять протокол и транспорт без повторной генерации кода. Thrift также включает в себя серверную инфраструктуру для объединения протоколов и транспорта. Доступны блокирующие, неблокирующие, однопоточные и многопоточные серверы. Часть стека «Базовый ввод-вывод» различается в зависимости от рассматриваемого языка. Для сетевого ввода-вывода Java и Pythonвстроенные библиотеки используются библиотекой Thrift, в то время как реализация C ++ использует свою собственную реализацию.
- ^ Скелтон, Стивен. «Ведение журнала запросов на сбережение, удобное для разработчиков» . Проверено 3 июля 2014 года .
Внешние ссылки [ править ]
- Официальный веб-сайт