当前位置: 首页 > 知识库问答 >
问题:

Thrift、Avro、Protocolbuffers——他们都死了吗?

谢选
2023-03-14

在一个pet项目(cassandra、spark、hadoop、kafka)上工作时,我需要一个数据序列化框架。查看常见的三个框架——即Thrift、Avro和Protocolbuffers——我注意到它们中的大多数似乎都死气沉沉,一年最多发布两次小版本。

这让我有两个假设:

  • 它们与这样一个框架一样完整,只要不需要新功能,就处于维护模式

如果有人能给我一个暗示,我的假设,任何投入都是受欢迎的。

共有3个答案

朱承载
2023-03-14

关于节俭:据我所知,节俭是活生生的。我们将其用于序列化和内部API,这是我的工作领域,它可以很好地实现这一点。

通过Twitter的Finagle等项目,添加了连接多路复用和更加用户友好的客户端等缺失内容。

虽然我将我们对它的使用描述为仅是半密集型的(即,我们不首先考虑性能:它应该易于使用并且没有bug),但到目前为止,我们没有遇到任何问题。

所以,关于节俭,我认为它属于你的第一类。[*]

原型缓冲区是节俭器序列化部分的替代方案,但它不提供RPC工具箱节俭器提供的功能。

我不知道还有任何其他项目将RPC和序列化混合到如此简单易用且完整的单个包中。

无论如何,一旦你开始使用它并看到了所有的好处,就很难把它归入你的第二类:)

蒋华美
2023-03-14

与Protobuf相比,Thrift的优势在于它提供了完整的RPC和序列化框架。加上Thrift支持大约20种目标语言,而且这个数字还在增长。我们即将加入。网芯,在不久的将来将有防锈支撑。

事实上,过去几个月里没有那么多的节俭产品发布,这确实是需要解决的问题,我们完全意识到这一点。另一方面,代码库的整体稳定性相当好,因此可以使用Github fork,并从当前master中自己切割一个分支,当然,使用通常的质量度量。

Avro和Thrift之间的主要区别在于Thrift是静态类型的,而Avro使用更动态的方法。在大多数情况下,静态方法非常适合需求,在这种情况下,Thrift让您受益于生成代码的更好性能。如果不是这样,Avro可能更合适。

此外,值得一提的是,除了Thrift、Protobuf和Avro之外,市场上还有更多的解决方案,如Capt'n'proto或BOLT。

百里俭
2023-03-14

协议缓冲区是一个非常成熟的框架,大约15年前在Google首次引入。它当然没有死:谷歌内部几乎所有的服务都使用它。但是经过这么多的使用,现在可能没有什么需要改变的了。事实上,他们今年发布了一个主要版本(3.0),但该版本的内容既包括删除功能,也包括添加功能。

Protobuf的相关RPC系统gRPC相对较新,最近有更多的活动。(然而,它基于谷歌的内部RPC系统,该系统经过了大约12年的发展。)

我对Thrift或Avro不太了解,但它们也存在了一段时间。

 类似资料:
  • 问题内容: 在我的程序中,我正在main()方法中创建多个线程。main方法的最后一行是对System.out.println()的调用,在所有线程都死亡之前,我不希望调用它。我试过在每个线程上调用Thread.join(),但是会阻塞每个线程,以便它们顺序执行而不是并行执行。 有没有一种方法可以阻塞main()线程,直到所有其他线程执行完毕?这是我的代码的相关部分: 感谢您的帮助! 埃里克 问题

  • 问题内容: 我不明白为什么这段代码中会发生死锁。我尝试了几种不同的方法来使僵局停止(使用WorkGroup的几种不同版本)。这是我在Go中的第一天,到目前为止,我对相当简单直接的操作的复杂性感到非常失望。我感觉好像缺少了一些明显的东西,但是我发现的所有文档似乎与对我来说是一种非常基本的操作模式都大不相同。所有文档都将原始类型用于通道(int,string),而不是更复杂的类型,所有类型都具有非常基

  • 目前,我们在多个地理区域拥有数据中心,每个数据中心托管着需要相互通信的不同应用程序和服务。目前,我们正在使用http进行通信,出于性能原因,希望探索其他协议。可以使用ProtocolBuffers或Thrift通过tcp/ip在地理区域之间进行通信吗?如果是这样的话,延迟是否会扼杀协议缓冲区或节俭提供的任何性能提升?是否有其他合适的选择?

  • Thrift 是一个软件框架(远程过程调用框架),用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引 擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的、高效的服务。 thri

  • 问题内容: 当我打字 是物体吗? 谁能向我解释在Java中每件事都是一个对象吗? 问题答案: 每个对象都是(注意:没有超类。;)) 但是,有很多东西不是对象。 原语和引用。 字段(字段本身不是内容) 局部变量和参数。 通用类(在Java 8中可能会更改) 方法(将在Java 8中更改) 代码块(将在Java 8中更改) 将代码块作为对象是Java 8中最令人兴奋的功能之一。下面的示例都是Closu

  • 问题内容: 如果我使用如下代码: 它会死掉还是可以在之后提出其他查询?像将错误日志记录到另一个表的预定函数一样?如: “或”之后还有哪些其他选择?我没有在文档中找到它,任何线索都值得赞赏。 问题答案: 它必须死吗 恰恰相反, 它永远都不会。 PHP是一种不良遗传的语言。遗传很差。和错误消息是最差的雏形之一: 死掉会抛出错误消息,向潜在的攻击者透露一些系统内部信息 这会给无辜的用户带来奇怪的消息,并