Apache Thrift 和 ZeroMQ 之间的区别

问题描述 投票:0回答:3

我知道Apache Thrift和ZeroMQ是属于不同类别的软件,并且很难进行比较,因为这是苹果与橘子的比较。但我不知道为什么它们属于不同的类别。它们不是都用于在不同的服务之间传递数据吗?这些服务可能用不同的语言编写,也可能不是用不同的语言编写的?

什么时候应该使用 Thrift,什么时候应该使用消息队列?

comparison message-queue thrift zeromq
3个回答
46
投票

它们属于不同的类别,主要是因为它们针对具有不同关注点的不同受众。 因此他们在不同的事情上更擅长。

Apache ThriftGoogle Protocol Buffers 类似,旨在成为高级的、相当抽象的方法,以便在不同机器上的进程之间(可能使用不同的语言)发送数据。 他们有目的地提供一个 IDL-ish 层来描述消息,可能带有自动或半自动版本控制和可选部分。

另一方面,

ZeroMQ,而不是一般的消息队列(这将是一个完全独立的问题),都是关于速度的。 它们有效地将字节移动到另一端。 沿途尽可能少停站。 因此,您负责序列化、版本控制或其他对开发人员来说重要的事情。 当然,这可能意味着复杂性,特别是当您在不同平台和语言之间进行通信时,但这是缺乏抽象的惩罚的一部分。 选择哪个? 取决于你的项目。 如果您不需要绝对的原始性能,更高级别的工具包可能会很好地满足您的目的。 如果您正在构建高速低延迟应用程序,无论如何您最终都会更接近金属。

祝你好运


26
投票

另一方面,ZeroMQ 的亮点在于您可以在端点之间传输消息,以获得不同的行为,例如一对一、一对多、多对多,以及对此类传输的速度和可靠性的不同期望。至于消息本身,它只是 ZeroMQ 的一个 blob,应用程序应该找到一种对其进行编码和解码的方法。

因此,如果您有复杂的数据结构但简单的消息传递模式,您可能会倾向于thrift。如果您有简单的数据但复杂的消息传递模式,您可能会依赖 ZeroMQ 或类似的东西 (AMQP)。

如果您两者都需要,您可以配对使用 THrift 和 ZeroMQ,thrift 格式化消息,ZeroMQ 传输消息。请参阅

Amir Haghighat 的回答


8
投票
Davorin 提到

成对使用 Thrift 和 ZeroMQ,如果您对这种方法感兴趣,请查看 Thrift 代码库并在 thrift/contrib/zeromq 下查看使用 ZermoMQ 的 Thrift 演示。

© www.soinside.com 2019 - 2024. All rights reserved.