当前位置: 网站首页 > 新闻资讯 > 最新资讯
成功案例 公司动态 最新资讯 行业知识 财务案例

Bond微软的跨平台序列化系统

Bond 是一个结构数据的可扩展框架,适合从服务通信到大数据的存储和处理的应用场景,通过可插拔序列化协议,数据流,用户定义的类型等等高度扩展它的功能,与语言和平台无关,支持C++,C sharpPython,可运行在 LinuxOS-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 可以成为一个非常有用的候选方案。

分享到:
点击次数:  更新时间:2015-09-11 17:34:03  【打印此页】  【关闭
京ICP备11045779号  北京工商

北京聚元亨新科技有限公司 版权所有

地址:北京市海淀区上地十街辉煌国际 邮编:100085