写点什么

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

  • 2015-02-12
  • 本文字数:866 字

    阅读完需:约 3 分钟

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

Bond 与其他序列化系统具有很多相似性,例如 Google Protocol Buffers Thrift 以及 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-02-12 09:214383
用户头像

发布了 321 篇内容, 共 121.9 次阅读, 收获喜欢 19 次。

关注

评论

发布
暂无评论
发现更多内容

Spring系列一:Spring基础篇

叶秋学长

在 Business Application Studio 里使用 SAP UI5 应用消费 OData 的 Create 和 Delete 操作

汪子熙

Cloud SAP Fiori SAP UI5 7月月更

云原生(八) | Devops篇之深入Devops

Lansonli

云原生 7月月更

Wallys/3×3/2×2 MIMO/ 802.11ac/ Mini PCIe /2,4GHz / 5GHz QCA 9880

wallys-wifi6

亮点抢先看!2022 开放原子全球开源峰会定于 7 月 25-29 日在北京举办

kk-OSC

开源 开发原子全球开源峰会

在 Excel 内使用 ODBC 消费 SAP ABAP CDS view

汪子熙

JDBC SAP abap ODBC 7月月更

出自阿里P8的Java面试神册,涵盖30个技术栈扛住面试官的狂轰乱炸

程序知音

Java 面试 程序员面试 后端技术 Java八股文

用 emoji 学安全上网小常识?看 Google 新玩法

Geek_2d6073

Qt | QWidget的一些总结

YOLO.

qt 7月月更

C# DataGridView数据导出Excel文件

IC00

C# 7月月更

Unity3D和Android交互

沃德

程序员 Unity 7月月更

算力网络,AI先行,昇腾AI助力运营商数字化转型 ——携手聚力,共赢算力时代

科技热闻

让你事半功倍的JS utils工具函数

南城FE

JavaScript 前端 工具库 7月月更

小心!正则 test() 匹配的一个“坑”

掘金安东尼

正则 7月月更

被大厂强制毕业,两个月空窗期死背八股文,幸好上岸,不然房贷都还不上了

程序知音

Java 程序员 java面试 后端技术 八股文

STM32+DHT11读取温湿度数据显示

DS小龙哥

7月月更

Android 功能开发笔记

沃德

android 程序员 7月月更

【LeetCode】数位和相等数对的最大和Java题解

Albert

LeetCode 7月月更

数仓之数据质量建设

五分钟学大数据

数据仓库 数据治理 数据质量 7月月更

Wallys/DR882/QCA9882/ AC/AN MiniPCIE/2×2.4GHz 2x5GHz MT7915 MT7975

wallys-wifi6

QCA9880 QCA9882 MT7915 MT7975 /

mysql进阶(十三)命令行导出导入数据库

No Silver Bullet

MySQL 数据库 数据导入 数据导出 7月月更

后深度学习时代,推荐系统向何处去?

博文视点Broadview

C++课程设计:图书管理系统【附源码】

攻城狮杰森

c++ 7月月更 课程设计 图书管理系统

KUDU1.11 环境安装

怀瑾握瑜的嘉与嘉

7月月更 kudu

strcat() - 连接字符串

謓泽

7月月更

短视频直播系统源码

开源直播系统源码

短视频源码 直播系统源码 开源源码

图的基本定义和相关概念(一)

乔乔

7月月更

视频分析StreamEye Studio

贾献华

7月月更

java零基础入门-java8新特性(下篇)

喵手

Java 7月月更

LeetCode-100. 相同的树(java)

bug菌

Leet Code 7月月更

解密方舟的高性能内存回收技术——HPP GC

HarmonyOS开发者

HarmonyOS

Microsoft开源跨平台的序列化库——Bond_微软_Boris Lublinsky_InfoQ精选文章