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

Thrift, Avro, Protocolbuffers - Are they all dead?

从事一个宠物项目(cassandra、spark、hadoop、kafka)我需要一个数据序列化框架。查看常见的三个框架 - 即 Thrift、Avro 和 Protocolbuffers - 我注意到它们中的大多数似乎都死气沉沉,每年最多发布 2 个次要版本。

这给我留下了两个假设:

如果有人能给我一些关于我的假设的提示,欢迎任何意见。

关于节俭:据我所知,它是生机勃勃的。我们将它用于序列化和内部 API 我工作的地方,它工作得很好。

已通过诸如 Twitter 的 Finagle.

之类的项目添加了诸如连接多路复用和更加用户友好的客户端之类的缺失内容

虽然我会将我们对它的使用描述为 半强化(即,我们不会首先考虑性能:它应该易于使用且无错误首先)到目前为止我们还没有 运行 解决任何问题。

因此,关于节俭,我认为它属于您的第一类。[*]

Protocolbuffers 是 thrift 序列化部分的替代品,但它不提供 thrift 提供的 RPC 工具箱。

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

[*]无论如何,一旦您开始使用它并看到所有好处,就很难 将其放入您的第二类:)

与Protobuf相比,Thrift的优势在于Thrift提供了完整的RPC和序列化框架。 Plus Thrift 支持大约 20 多种目标语言,而且这个数字还在增长。我们即将包含 .NET 核心,并且在不久的将来会有对 Rust 的支持。

过去几个月 Thrift 发布的次数不多这一事实肯定是需要解决的问题,我们完全意识到这一点。另一方面,代码库的整体稳定性非常好,所以可以做一个 Github fork 并从当前的 master 自己切出一个分支 - 当然有通常的质量措施。

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

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

Protocol Buffers 是一个非常成熟的框架,近 15 年前在 Google 上首次推出。它当然没有死:几乎 Google 中的每个服务都在使用它。但是经过如此多的使用,此时可能没有太多需要更改的地方。事实上,他们今年发布了一个主要版本 (3.0),但该版本既有删除功能,也有添加功能。

Protobuf 的关联 RPC 系统 gRPC 相对较新,最近 activity 有了更多。 (但是,它基于 Google 的内部 RPC 系统,该系统已经发展了大约 12 年。)

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

它们在很多地方都被广泛使用,所以我想说你的第一个假设。我不知道您对发布时间表的期望是什么,但对于那种规模和成熟度的图书馆来说,它们对我来说似乎很正常。哎呀,Avro 1.8.0 于 2016 年初问世,大多数东西仍在使用 Avro 1.7.7(例如 Spark、Hadoop)。 https://avro.apache.org/releases.html