返回 登录
0

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

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

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

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

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

  • 类型系统非常丰富,引入了继承、类型别名和泛型。这方面与Apache Thrift比较类似。但缺乏Avro和 Protocol Buffers支持的联合类型,这是通过可选字段的schema来表示的。
  • 编程模型也更接近Thrift,生成原生类型,用目标语言和原生集合表示schema,但是Bond不会硬编码类型映射,更加灵活。
  • 协议方面,Bond支持三类:Tagged binary protocol(类似于Thrift的protocol和Protocol Buffers的wire format,用于RPC场景)、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

评论