Apache Thrift 和 ZeroMQ 的区别
Posted
技术标签:
【中文标题】Apache Thrift 和 ZeroMQ 的区别【英文标题】:Difference between Apache Thrift and ZeroMQ 【发布时间】:2011-12-25 02:54:49 【问题描述】:据我了解,Apache Thrift 和 ZeroMQ 是属于不同类别的软件,由于是苹果和橙子的比较,所以不容易做比较。但我不知道为什么它们属于不同的类别。它们不是都用来在不同的服务之间传递数据吗?这些服务可能用不同的语言编写,也可能不用?
什么时候应该使用 Thrift,什么时候应该使用消息队列?
【问题讨论】:
【参考方案1】:它们属于不同的类别,主要是因为它们针对具有不同关注点的不同受众。因此他们更擅长不同的事情。
Apache Thrift 类似于Google Protocol Buffers 旨在成为高级的、相当好的抽象手段,用于在不同机器上的进程之间发送数据,可能使用不同的语言。他们有目的地提供一个 IDL 层来描述消息,可能带有自动或半自动版本控制和可选部分。
另一方面,ZeroMQ,而不是一般的 消息队列(这将是一个完全独立的问题),都是关于速度的。它们有效地将字节移动到另一端。沿途尽可能少停站。因此,您负责序列化、版本控制或其他对开发人员您很重要的事情。当然,这可能意味着复杂性,尤其是当您在不同平台和语言之间进行通信时,但这是缺乏抽象的部分惩罚。
选择哪个?取决于你的项目。如果您不需要绝对的原始性能,则更高级别的工具包可能会很好地满足您的目的。如果您正在构建一个高速低延迟的应用程序,那么无论如何您最终都会更接近金属。
祝你好运
【讨论】:
【参考方案2】:Thrift 定义了如何表示复杂数据,以便它可以被不同的语言写入和读取(因此它具有 IDL 来定义将被传输的类型)。它还定义了在两个端点之间传输此类格式化消息的简单方法(也称为 thirft 传输)。
另一方面,ZeroMQ 的亮点在于您可以在端点之间传输消息以获得不同的行为,例如一对一、一对多、多对多,以及对此类传输的速度和可靠性的不同期望。至于消息本身,它只是 ZeroMQ 的一个 blob,应用程序应该找到一种编码解码它们的方法。
因此,如果您的数据结构复杂但消息传递模式简单,那么您可能会倾向于节俭的一面。如果您有简单的数据但复杂的消息传递模式,您可能会依赖 ZeroMQ 或类似的东西 (AMQP)。
如果两者都需要,可以成对使用 THrift 和 ZeroMQ,thrift 格式化消息,ZeroMQ 传输消息。
【讨论】:
【参考方案3】:Davorin 提到了成对使用 Thrift 和 ZeroMQ,如果您对这种方法感兴趣,请查看 Thrift 代码库并在 thrift/contrib/zeromq 下查看使用 ZermoMQ 的 Thrift 演示。
【讨论】:
还有另一个有趣的项目,与刚刚在 pycon 上宣布的内容相同:github.com/dotcloud/zerorpc-python以上是关于Apache Thrift 和 ZeroMQ 的区别的主要内容,如果未能解决你的问题,请参考以下文章