Разница между Apache Thrift и ZeroMQ - PullRequest
31 голосов
/ 09 ноября 2011

Я понимаю, что Apache Thrift и ZeroMQ - это программы, относящиеся к разным категориям, и сравнивать нелегко, так как это сравнение между яблоком и апельсином.Но я не знаю, почему они принадлежат к разным категориям.Разве они не используются для передачи данных между различными службами, которые могут или не могут быть написаны на разных языках?

Когда мне следует использовать Thrift и когда я должен использовать очередь сообщений?

Ответы [ 3 ]

43 голосов
/ 10 ноября 2011

Они относятся к разным категориям прежде всего потому, что они нацелены на разные аудитории с разными проблемами. Поэтому они лучше в разных вещах.

Apache Thrift аналогично Буферы протокола Google предназначены для использования в качестве высокоуровневого, достаточно абстрактного средства передачи данных между процессами на разных машинах, возможно, на разных языках. Они целенаправленно предоставляют IDL-слой для описания сообщения, возможно, с автоматическим или полуавтоматическим управлением версиями и дополнительными разделами.

С другой стороны,

ZeroMQ , а не очереди сообщений в целом (что было бы совершенно отдельным вопросом), это все о скорости. Они эффективно перемещают байты на другой конец. Как можно меньше остановок по пути. Таким образом, вы несете ответственность за сериализацию, управление версиями или все, что важно для вас разработчика. Конечно, это может означать сложность, особенно если вы общаетесь между различными платформами и языками, но это часть наказания за отсутствие абстракции.

Что выбрать? Зависит от вашего проекта. Если вам не нужна абсолютная чистая производительность, высокоуровневый инструментарий, скорее всего, удовлетворит вашу цель. Если вы создаете высокоскоростное приложение с низкой задержкой, вы все равно окажетесь ближе к металлу.

Удачи

25 голосов
/ 14 ноября 2011

Thrift определяет, как представлять сложные данные, чтобы их можно было записывать и читать на разных языках (следовательно, он имеет IDL для определения типов, которые будут транспортироваться). Он также определяет простые средства для транспортировки такого отформатированного сообщения между двумя конечными точками (иначе говоря, передача в трифтах).

С другой стороны, ZeroMQ великолепно показывает, как вы можете передавать сообщения между конечными точками, чтобы получить различное поведение, например, один к одному, один ко многим, много ко многим, и разные ожидания скорости и надежности таких передач. А что касается самого сообщения, это просто капля в ZeroMQ, и приложения должны найти способ кодировать, декодировать их.

Так что, если у вас есть сложные структуры данных, но простые шаблоны обмена сообщениями, вы можете опираться на экономную сторону. Если у вас есть простые данные, но сложные шаблоны обмена сообщениями, вы можете опираться на ZeroMQ или что-то подобное (AMQP).

А если вам нужно и то, и другое, вы можете использовать THrift и ZeroMQ в паре, экономить для форматирования сообщения и ZeroMQ для его транспортировки.

7 голосов
/ 11 марта 2012

Даворин упомянул об использовании Thrift и ZeroMQ в паре, и в случае, если вы заинтересованы в этом подходе, ознакомьтесь с базой кодов Thrift и посмотрите в thrift / contrib / zeromq демонстрацию Thrift с использованием ZermoMQ.

...