上个月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可以成为一个非常有用的候选方案。

Microsoft开源跨平台的序列化库——Bond的更多相关文章

  1. 开源跨平台声波传输库:Sonic

    简介 [Sonic](https://github.com/linyehui/sonic) 是一个跨平台的声波传输库(iOS & Android),技术上类似于[chirp](http://c ...

  2. AngouriMath: 用于C#和F#的开源跨平台符号代数库

    AngouriMath是一个MIT协议开源符号代数库.也就是说,通过AngouriMath,您可以自动求解方程.方程组.微分.从字符串解析.编译表达式.处理矩阵.查找极限.将表达式转换为LaTeX,以 ...

  3. cereal:C++实现的开源序列化库

    闲来无事发现了一个基于C++实现的序列化工具,相比于其他(比如Boost serialization或Google protobuf,恰巧都用过,以后再介绍),使用简单,感觉不错,下面做个摸索. ce ...

  4. C++的开源跨平台日志库glog学习研究(三)--杂项

    在前面对glog分别做了两次学习,请看C++的开源跨平台日志库glog学习研究(一).C++的开源跨平台日志库glog学习研究(二)--宏的使用,这篇再做个扫尾工作,算是基本完成了. 编译期断言 动态 ...

  5. C++的开源跨平台日志库glog学习研究(二)--宏的使用

    上一篇从整个工程上简单分析了glog,请看C++的开源跨平台日志库glog学习研究(一),这一篇对glog的实现代码入手,比如在其源码中以宏的使用最为广泛,接下来就先对各种宏的使用做一简单分析. 1. ...

  6. 最全面的iOS和Mac开源项目和第三方库汇总

    标签: UI 下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UIT ...

  7. Ptypes一个开源轻量级的c++库,包括对一些I/O操作、网络通信、多线程和异常处理的封装

    C++开源项目入门级:Ptypes    Ptypes一个开源轻量级的c++库,包括对一些I/O操作.网络通信.多线程和异常处理的封装.虽然代码有限,包括的内容不少,麻雀虽小,五脏俱全.    提高: ...

  8. .NET Core:面向未来的开源跨平台开发技术

    作为一种全新的开源和跨平台的开发平台,.NET Core 历经两年多的开发,终于在于2016年6月27日针对所有主流服务器和桌面操作系统发布 1.0 RTM 版本..NET Core 是一种通用开发平 ...

  9. C++序列化库的实现

    C++中经常需要用到序列化与反序列化功能,由于C++标准中没有提供此功能,于是就出现了各式各样的序列化库,如boost中的,如谷歌的开源项目,但是很多库都依赖其他库过于严重,导致库变得很庞大.今天来分 ...

随机推荐

  1. 手把手教你玩转nginx负载均衡(三)----配置虚拟服务器网络

    引言 虽然上一篇我们成功的启动了虚拟机,也安装好了操作系统,但是这台虚拟机和主机以及其他虚拟机是没有办法连通的,我们的目标是配置多台服务器并且配置nginx反向代理,来实现负载均衡,所以不能访问内网是 ...

  2. 让IIS支持bootstrap 增加svg和woff格式文件的支持

    增加以下两种文件类型即可: .woff application/x-woff.svg image/svg+xml

  3. Datazen图表创建和发布

    Datazen是被微软收购的移动端全平台的数据展现解决方案.此篇主要介绍如何创建和发布图表. 如前面介绍,Datazen图表的创建和发布是通过Publisher的应用,它是Windows 8应用商店下 ...

  4. PostgreSQL中标准的SQL boolean数据类型

  5. app后端设计--总目录 (转)

    特此说明,我转载的!!! app后端设计(1)--api app后端设计(2)--xmpp的使用 app后端设计(3)--短信,邮件,推送服务 app后端设计(4)-- 通讯的安全性 app后端设计( ...

  6. git 查看某文件的修改历史

    前提 先进入此文件所在的目录下 1. git log filename可以看到fileName相关的commit记录2. git log -p filename可以显示每次提交的diff3. 只看某次 ...

  7. Codeforces 144D Missile Silos 最短路

    time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...

  8. iOS 删除、重新排序xcdatamodel

    找到Xcode项目文件.xcodeproj,查看包内容. 里面有project.pbxproj,用文本编辑器打开. 找到类似如下内容段: /* Begin XCVersionGroup section ...

  9. jQuery的选择器中的通配符

    (1)通配符: $("input[id^='code']");//id属性以code开始的所有input标签 $("input[id$='code']");// ...

  10. 由overflow-x:scroll产生的收获

    我们都知道float:left属性会让元素向左浮动,如果用一个div将几个左浮动的li包起来,是不是div的宽度被li撑得很长很长呢,代码: <!DOCTYPE html> <htm ...