Читайте также: |
|
Thrift - это язык определения интерфейсов, который используется для описание сервисов для ряда языков. В частности он испольщуется для удалённого вызова процедур RPC и был разработан в Facebook для масштабируемого кросс-платформенного развёртывания сервисов написанных на разных языках. Он состоит из программного стека и генератора кода. С их помощью можно прозрачно стыковать сервисы работающие на разных языках (C#, C++, Cocoa, Erlang, Java, Python, Ruby, Node.js). Несмотря на то что эта технология разработана в Facebook на данный момент она передана в open sourceи сейчас хостится на Apache Software Foundation.
Таким образом, Apache Thrift представляет собой бинарный протокол передачи данных.
Thrift содержит полный набор средств для создания клиентских и серверных частей: - верхня часть генерируется из Thrift definition, а нижняя часть (TProtocol, TTransport) представлена в виде runtime библиотек. С помощью Thrift возможно задавать сервисы и менять транспорт и протоколы путём настроек, без перекомпиляции кода.
Thrift поддерживает следующие виды протоколов:
· TBinaryProtocol — Несложный двоичный формат, простой, но не оптимизированный для экономии пространства.
· TCompactProtocol — Более компактный двоичный формат, как правило более эффективен.
· TDebugProtocol — Человечески понятный формат текста, помогающий в отладке.
· TDenseProtocol — Как и в TCompactProtocol, получение мета информации из того, что было передано.
· TJSONProtocol — Использование JSON’a для раскодировки данных.
· TSimpleJSONProtocol — Протокол «только для записи», использующий JSON. Подходит для парсинга на скриптовых языках.
Thrift поддерживает следующие виды транспортов:
· TFileTransport — Этот транспортировщик записывает в файл.
· TFramedTransport — Этот транспортировщик используется, когда применяются non-blocking сервера. Он отправляет данные во фреймах, где каждому фрейму предшествует длина информации.
· TMemoryTransport — Использование памяти для ввода / вывода. Резализация Java использует простой встроенный ByteArrayOutputStream.
· TSocket — Использует blocking socket ввода / вывода для транспортировки.
· TZlibTransport — Выполняет сжатие с помощью zlib. Используется в сочетании с другим транспортом. Отсутствует в реализации Java.
Преимущества Thrift:
· Кросс-платформенная сериализация с меньшими накладными расходами по сравнению с альтернативами типа SOAP, так как используется бинарный формат.
· Простая библиотеука и конфигурация.
· Естественная привязка к языкам программирования (например использование Java ArrayList<String>)
· Уровни сериализацииприложения и транспорта разделены и могут подменяться
· Поставляется с тремя видами сериализации: binary, HTTP-friendly, compact binary
· Мягкое версионирование протокола, соответвенно независимые команды могут более свободно разрабатывать их части
· Отсутсвие зависимостей на нестандартное ПО, нет необходимости с дополнительных несовместимых лицензиях.
Пример описания структуры на Thrift:
enum PhoneType { HOME, WORK, MOBILE, OTHER } struct Phone { 1: i32 id, 2: string number, 3: PhoneType type } |
Из этого описания Thrift генерирует код на целевом языке.
Apache Avro
Поднобно Thrift Avro – это так же технология сериализации и удалённого вызова процедур, разработанная в рамках проекта Apache Hadoop. Она использует JSON для задания типов данных и протоколов (в отличие от Thrift definition) и сериализует в компактный бинарный формат. Используется в основном в рамках проекта Apache Hadoop и систем, построенных на его основе для сериализации и межпроцессной коммуникации между нодами, а так же для сохранения данных. В отличие от Thrift Avro не требует предварительной генерации кода при изменении схемы данных.
Теоретически Avro может поддерживаться любыми языками, но на практике уже существуют привязки к следующим языкам: Java, C#, C, C++, Python, Ruby.
В дополнении к поддержке JSON как языка определения типов, Avro поддерживает Avro IDL (interface description language). Он предназначен для пользователей, которые привыкли пользоватьтся традиционным IDL с синтаксисом похожим на C/C++.
Дата добавления: 2015-10-24; просмотров: 887 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Область видимости бина | | | Accurate job inquiry references solicited |