据我所知,Apache Thrift和ZeroMQ是属于不同类别的软件,并且进行比较并不容易,因为它是橙色比较的苹果。但我不知道他们为什么属于不同的类别。他们是不是都习惯在不同的服务之间传递数据,这些服务可能用不同的语言编写也可能不用?
我什么时候应该使用Thrift?何时应该使用消息队列?
答案 0 :(得分:43)
它们属于不同的类别主要是因为它们针对不同的受众而有不同的关注点。因此他们在不同的事情上会更好。
类似于Apache Thrift的Google Protocol Buffers旨在成为高级的,相当好的抽象方式,用于在不同机器上的进程之间发送数据,可能使用不同的语言。他们故意提供IDL-ish层来描述消息,可能有自动或半自动版本控制和可选部分。
另一方面,ZeroMQ,一般而言消息队列(这将是一个完全独立的问题),都与速度有关。它们有效地将字节移动到另一端。尽可能少的路段停下来。因此,您负责序列化,版本控制或其他对您开发人员非常重要的事情。当然,这可能意味着复杂性,特别是如果您在不同平台和语言之间进行通信,但这是缺乏抽象的惩罚的一部分。
选择哪个?取决于您的项目。如果您不需要绝对的原始性能,更高级别的工具包可能会很好地满足您的需求。如果您正在构建一个高速低延迟应用程序,那么无论如何您最终会更接近金属。
祝你好运
答案 1 :(得分:25)
Thrift定义了如何表示复杂数据,以便它可以由不同语言编写和读取(因此它具有IDL来定义将被传输的类型)。它还定义了在两个端点之间传输这种格式化消息的简单方法(又称第三次传输)。
另一方面,ZeroMQ以您可以在端点之间传输消息的方式发光,以便获得不同的行为,例如一对一,一对多,多对多,以及对此类传输的速度和可靠性的不同期望。至于消息本身,它只是ZeroMQ的一个blob,应用程序应该找到一种方法来解码它们。
因此,如果您有复杂的数据结构但是简单的消息传递模式,那么您可能会依赖于节俭方面。如果你有简单的数据但复杂的消息传递模式,你可能会依赖ZeroMQ或类似的东西(AMQP)。
如果你需要两者,你可以使用THrift和ZeroMQ对,thrift来格式化消息,使用ZeroMQ来传输它。
答案 2 :(得分:7)
Davorin提到成对使用Thrift和ZeroMQ,如果你对这个方法感兴趣,请查看Thrift代码库,并在thrift / contrib / zeromq下查看使用ZermoMQ的Thrift演示。