微软的开源数据格式化框架Bond

jopen 9年前

Bond 是一个跨平台(目前支持 Linux、OS X 和 Windows)的数据格式化框架,支持跨语言(C++、 C#和 Python)的序列化和解序列化,与 Protocol Buffers、Thrift 和 Avro 类似。已在微软内部用于一些大规模的服务。 

Bond 的主要作者是微软主任软件工程师 Adam Sapek,来自波兰,自 2001 年一直效力于微软。之前他曾经负责设计 P2P 协议 BitSwarm。 

Sapek 自己在 Hacker News 中透露,Bond 比较引人注目的是其核心部分包括编译器和代码生成器是用函数式语言 Haskell 开发的。 

根据官方文档,Bond 的特点主要是: 

  1. 类型系统非常丰富,引入了继承、类型别名和泛型。这方面与 Apache Thrift 比较类似。但缺乏 Avro 和 Protocol Buffers 支持的联合类型,这是通过可选字段的 schema 来表示的。
  2. 编程模型也更接近 Thrift,生成原生类型,用目标语言和原生集合表示 schema,但是 Bond 不会硬编码类型映射,更加灵活。
  3. 协议方面,Bond 支持三类:Tagged binary protocol(类似于 Thrift 的 protocol 和 Protocol Buffers 的 wire format,用于 PRC 场景)、untagged protocol(类似 Avro wire format,载荷是压缩的,用于数据存储场景)、文本协议如 JSON 和 XML。协议是可插拔的,尽可能地通过泛型来实现,因此没有性能开销。 -架构上,Bond 比较独特的地方是序列化和解序列化都不是硬编码在所生成的代码中的基本操作,用户可以使用元编程技术编写分析器和变换,因此非常灵活。

Hacker News 上的两次讨论:1,2 

有意思的是,类似的框架除了 ProtoBuf、Thrift 和 Avro 之外,还有 MessagePack、Google 新推的 FlatBuffers、Martin Thompson 的 SBE 和 ProtoBuf 负责人 Kenton Varda(Google 拜 Jeff Dean 教也是他创立的)创业后开发的 Cap'n Proto(号称提速无限倍)。 

这些项目背后的开发者实力都很强,它们之间的选择,可成了一个课题了。之前 Varda 曾经写过一篇文章比较几个新一点的方案,可供参考。此外维基百科也有专门的条目:http://en.wikipedia.org/wiki/Comparison_of_data_serialization_formats

来自: www.iteye.com