Comparison Apache Thrift和ZeroMQ之间的区别

Comparison Apache Thrift和ZeroMQ之间的区别,comparison,message-queue,thrift,zeromq,Comparison,Message Queue,Thrift,Zeromq,我知道Apache Thrift和ZeroMQ是属于不同类别的软件,进行比较并不容易,因为这是苹果对橙色的比较。但我不知道为什么它们属于不同的类别。它们不是都用来在不同的服务之间传递数据吗?这些服务可能用不同的语言编写,也可能不用不同的语言编写 我什么时候应该使用节俭,什么时候应该使用消息队列?它们属于不同的类别,主要是因为它们针对不同的受众,有不同的关注点。因此,他们在不同的事情上做得更好 类似于,它是一种高级的、相当抽象的方法,用于在不同机器上的进程之间发送数据,可能使用不同的语言。它们有意

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


我什么时候应该使用节俭,什么时候应该使用消息队列?

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

类似于,它是一种高级的、相当抽象的方法,用于在不同机器上的进程之间发送数据,可能使用不同的语言。它们有意提供一个IDL ish层来描述消息,可能带有自动或半自动版本控制和可选部分

另一方面,特别是消息队列(这将是一个完全独立的问题)并不完全是关于速度的。它们有效地将字节移动到另一端。沿途尽可能少停几站。因此,您负责序列化、版本控制或其他对开发人员很重要的事情。当然,这可能意味着复杂性,特别是当您在不同的平台和语言之间进行通信时,但这是缺乏抽象的一部分惩罚

选择哪一个?取决于你的项目。如果您不需要绝对的原始性能,那么更高级别的工具包可能会很好地满足您的需求。如果您正在构建一个高速、低延迟的应用程序,那么无论如何,您最终都会离金属更近


Good Luck

Thrift定义了如何表示复杂的数据,以便用不同的语言编写和读取数据(因此它有IDL来定义要传输的类型)。它还定义了在两个端点之间传输此类格式化消息的简单方法(也称为第三方传输)

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

因此,如果您有复杂的数据结构,但有简单的消息传递模式,那么您可能会倾向于节约。如果您有简单的数据但有复杂的消息传递模式,那么您可以使用ZeroMQ或类似的工具(AMQP)


如果两者都需要,可以成对使用THrift和ZeroMQ,THrift可以格式化消息,Davorin提到成对使用Thrift和ZeroMQ,如果您对这种方法感兴趣,请检查Thrift代码库,并在Thrift/contrib/ZeroMQ下查看Thrift使用ZermoMQ的演示。

和pycon上刚刚宣布的另一个有趣项目: