Microsoft开源跨平台的序列化库——Bond

上个月Microsoft开源了Bond,一个跨平台的模式化数据处理框架。Bond支持跨语言的序列化/反序列化,支持强大的泛型机制能够对数据进行有效地处理。该框架在Microsoft公司内部的高扩展服务中得到了广泛的应用。目前该项目已经基于宽松的MIT许可开源在了GitHub上,当前版本支持C++、C#和Python,可运行在Linux、OS-X和Windows平台上。Bond的编译器完全是使用Haskell编写的。

Bond与其他序列化系统具有很多相似性,例如Google Protocol BuffersThrift以及Avro

  • Bond使用IDL风格的语言定义消息 
  • 它会将所有的Bond数据类型映射到本地语言数据类型

但是Bond的实现有一个很大的不同:它并没有硬编码类型映射。用户能够以插件的方式定制核心架构逻辑之外的内容——是从Bond模式还是从自定义的类型序列化、有线格式是什么、是否将自定义元数据放到有效负载中等等。例如,在C++中默认是std::vector这样的STL容器,但是用户能够很容易地映射自定义的类型——在一个生成的C++结构体中使用Python的boost::multi索引容器或者在一个生成的C++类中将一个unit64模式域映射为一个System.DateTime域。Bond生成的C++结构体还能使用自定义的分配器。

Stack Overflow上的一个帖子对Bond和Google Protocol Buffers做了一个非常好的比较:

优点:

  • Bond支持泛型 
  • Bond有不同的类型用于表示集合:vector, map, list 
  • Bond支持类型安全的惰性反序列化(bonded) 
  • Bond支持多种格式(快速二进制、紧凑二进制、XML和JSON)以及封送与转码

缺点:

  • Bond不支持不同类型的固定、可变整数编码。在Bond中整数如何编码是由输出格式(快速二进制还是紧凑二进制)决定的,但是在Protocol Buffers中整数类型始终有固定的大小:fixed32和fixed64。
  • Bond不支持union类型 (Protocol Buffers支持)
  • Bond并没有Java实现

另外,在这个Reddit的公告中有很多与Bond的实现和能力相关的答案。

考虑到现在正在有越来越多的人以微服务的形式使用SOA,数据编组/解组的问题变得越来越重要。对于已有的序列化系统而言,Bond可以成为一个非常有用的候选方案。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏XAI

Highcharts AJAX JSON JQuery 实现动态数据交互显示图表 柱形图

这是第一篇实例的步骤与代码。还有整个项目的结构图。 http://my.oschina.net/xshuai/blog/345117 原创的博文。转载注明出处...

59060
来自专栏Android 技术栈

java 常用十种设计模式示例归纳 | 已打包请带走

一个Demo,集合常用的十种设计模式,每个模式使用易被人们接受的案例讲述,按模式分包,使用设计模式前后对比,界面显示定义讲解,让你更深刻的了解每种设计模式。 ...

3.7K20
来自专栏大数据和云计算技术

伸手党福利-从零开始玩转图库

tinkerpop是一个图库标准,一个框架,学习图库,先从这个项目入手比较合适, neo4j, janusGraph只是它两个组件(图storage-engin...

1K30
来自专栏Java开发者杂谈

For update带来的思考

​ 之所以想写这个专题,是因为最近在做一个抢占任务的实现。假设数据库很多个任务,在抢占发生之前任务的状态都是FREE。现在假设同时有一堆抢占线程开始工作,抢占线...

14430
来自专栏Spark生态圈

[spark] spark推测式执行

推测任务是指对于一个Stage里面拖后腿的Task,会在其他节点的Executor上再次启动这个task,如果其中一个Task实例运行成功则将这个最先完成的Ta...

26420
来自专栏技术与生活

设计模式-命令模式

Client:确定具体的命令和接受者; Command:抽象命令接口,一般是接口类或者抽象类 ConcreteCommand:具体的命令执行,调用接受者 Inv...

13950
来自专栏企鹅号快讯

Java 9 逆天的十大新特性

在介绍 Java 9 之前,我们先来看看 Java 成立到现在的所有版本。 1990 年初,最初被命名为 Oak; 1995 年 5 月 23 日,Java 语...

25350
来自专栏AhDung

【VBS】vbs指定编码保存文本文件(含xml、ini什么的)

- 让用户填写一些信息,待安装完成后把这些信息写入软件安装目录中的指定ini、xml文件中

12110
来自专栏吉浦迅科技

DAY35:阅读流程控制语句

15940
来自专栏趣谈编程

synchronized与Lock 擂台之战

面试官:说说synchronized和Lock(或ReentrantLock)的区别 Java 1.5之后,对共享变量访问的协调机制除了之前的synchron...

207100

扫码关注云+社区

领取腾讯云代金券