#comparison #message-queue #thrift #zeromq
#сравнение #очередь сообщений #бережливость #zeromq
Вопрос:
Я понимаю, что Apache Thrift и ZeroMQ — это программы, принадлежащие к разным категориям, и провести сравнение непросто, поскольку это сравнение яблока с апельсином. Но я не знаю, почему они принадлежат к разным категориям. Разве они оба не используются для передачи данных между разными сервисами, которые могут быть написаны на разных языках, а могут и не быть?
Когда я должен использовать Thrift и когда я должен использовать очередь сообщений?
Ответ №1:
Они принадлежат к разным категориям в первую очередь потому, что они ориентированы на разные аудитории с разными интересами. Поэтому они лучше справляются с разными вещами.
Apache Thrift, аналогичный буферам протокола Google, задуман как высокоуровневое, достаточно хорошо абстрагированное средство для отправки данных между процессами на разных машинах, возможно, на разных языках. Они целенаправленно предоставляют уровень IDL-иш для описания сообщения, возможно, с автоматическим или полуавтоматическим управлением версиями и дополнительными разделами.
С другой стороны, именно ZeroMQ, а не очереди сообщений в целом (что было бы совершенно отдельным вопросом), касается скорости. Они эффективно перемещают байты на другой конец. Как можно меньше остановок на этом пути. Таким образом, вы несете ответственность за сериализацию, управление версиями или за все остальное, что важно для вас, разработчика. Конечно, это может означать сложность, особенно если вы обмениваетесь данными между разными платформами и языками, но это часть штрафа за отсутствие абстракции.
Что выбрать? Зависит от вашего проекта. Если вам не нужна абсолютная производительность raw, инструментарий более высокого уровня, скорее всего, отлично подойдет для ваших целей. Если вы создаете высокоскоростное приложение с низкой задержкой, вы в любом случае будете ближе к металлу.
Удачи
Ответ №2:
Thrift определяет, как представлять сложные данные, чтобы они могли быть записаны и прочитаны на разных языках (следовательно, у него есть IDL для определения типов, которые будут передаваться). Он также определяет простые средства для передачи такого форматированного сообщения между двумя конечными точками (он же thirft transport).
С другой стороны, ZeroMQ отличается тем, что вы можете передавать сообщения между конечными точками, чтобы приобретать различные модели поведения, такие как «один к одному», «один ко многим», «многие ко многим», и разными ожиданиями от скорости и надежности таких передач. А что касается самого сообщения, это всего лишь большой двоичный объект для ZeroMQ, и приложения должны найти способ их кодирования и декодирования.
Поэтому, если у вас сложные структуры данных, но простые шаблоны обмена сообщениями, вы можете предпочесть бережливость. Если у вас простые данные, но сложные шаблоны обмена сообщениями, вы можете использовать ZeroMQ или что-то подобное (AMQP).
И если вам нужно и то, и другое, вы могли бы использовать THrift и ZeroMQ в паре, thrift для форматирования сообщения и ZeroMQ для его транспортировки.
Ответ №3:
Даворин упомянул использование Thrift и ZeroMQ в паре, и если вас интересует такой подход, проверьте кодовую базу Thrift и посмотрите в разделе thrift / contrib / zeromq демонстрацию Thrift с использованием ZermoMQ.
Комментарии:
1. И еще один интересный проект в том же духе, который только что был анонсирован на pycon: github.com/dotcloud/zerorpc-python