大咖直播-鸿蒙原生开发与智能提效实战!>>> 了解详情
写点什么

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:214821
用户头像

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

关注

评论

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

.NET6新东西--CallerArgumentExpression

喵叔

11月日更

Go语言,定时器的使用

微客鸟窝

Go 语言 11月日更

在线英文名随机生成器

入门小站

工具

《PyTorch深度学习实战》复习之环境搭建

IT蜗壳-Tango

11月日更

14 K8S之对外访问容器服务

穿过生命散发芬芳

k8s 11月日更

和12岁小同志搞创客开发:手撕代码,做一款声控灯

不脱发的程序猿

少儿编程 DIY 传感器 创客开发 Arduino

微服务中台技术之延迟中心实践

小江

Java redis kafka 延时队列

设计消息队列存储消息数据的 MySQL 表格

缘分呐

PS 基础操作 - 文件格式和存储

hepingfly【gzh:和平本记】

ps教程 ps学习笔记

进击的Java(六)

ES_her0

11月日更

模块三课后作业 - 详细架构设计文档 - 外包学生管理系统

渐行渐远

架构实战营

对于排序号中参数值的校验

卢卡多多

参数校验 11月日更

无处不在的 Kubernetes,难用的问题解决了吗?

阿里巴巴云原生

阿里云 Kubernetes 容器 云原生 难题攻克

再见了,纸币!数字人民币,席卷而来

CECBC

PS 基础操作 - 缩放、抓手、移动工具

hepingfly【gzh:和平本记】

ps教程 ps学习笔记

Android C++系列:JNI中的线程操作

轻口味

c++ android jni 11月日更

Golang Gin 框架入门介绍(一)

liuzhen007

11月日更

linux之ClamAV杀毒软件安装配置

入门小站

Linux

架构实战营 - 模块八作业

en

#架构实战营

【Promise 源码学习】第七篇 - 实现 Promise 返回值 x 的处理

Brave

源码 Promise 11月日更

模块三作业:学生管理系统架构设计文档

赵先生

架构实战营

自动化前端页面性能测试介绍

刘冉

大前端 软件测试 性能测试 软件自动化测试

如何使用 Prometheus Kafka Adapter 向 Kafka 推送 Prometheus 数据

耳东@Erdong

kafka Prometheus Adapter 11月日更

模块三作业

忘记喝水的猫

架构训练营

架构营模块三作业

GTiger

架构实战营

低碳企业和个人如何参与碳交易市场?

石云升

碳中和 11月日更 碳交易

基于Serverless的测试服务化-理论篇

刘冉

软件测试 自动化测试 测试服务化

模块三作业

lxz

模块三作业

周文

「架构实战营」

【LeetCode】键值映射Java题解

Albert

算法 LeetCode 11月日更

架构实战营 - 模块八作业

Alex.Wu

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