写点什么

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

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

关注

评论

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

豆包MarsCode IDE 搭建 VitePress 博客并使用 GitHub 部署

豆包MarsCode

人工智能 程序员 AI 开发者 计算机

中国信通院可信人工智能基础平台(AI Infra)第八批评估工作正式启动

中国信通院AI Infra工作组

繁星·数智思享会:以流程为中心的数字化转型战役已打响

望繁信科技

数字化转型 流程管理 流程挖掘 流程资产 流程智能

基于LangChain手工测试用例转App自动化测试生成工具

霍格沃兹测试开发学社

2024新动态:低代码开发占领新常态市场

EquatorCoco

低代码

解决 AI 算法开发和存储难题,华为云 DTSE 助力文华云技术架构升级

华为云开发者联盟

Vue3.5中解构props,让父子组件通信更加丝滑

快乐非自愿限量之名

Vue 前端

个人GPU云服务器是什么

Ogcloud

gpu 云主机 云服务器 GPU云服务器 云服务器租用

openGemini 发布人才培养计划,与顶尖的数据库专家并肩成长

华为云开发者联盟

#开源

在 React 中模拟输入

yuanyxh

前端 js react context

探索大模型和 Multi-Agent 在运维领域的实践

华为云开发者联盟

AIGC

inBuilder低代码平台新特性推荐-第二十四期

inBuilder低代码平台

低代码 表单设计

一文详解低代码开发如何成为学校低成本数字化转型的新引擎

快乐非自愿限量之名

低代码 数字化

高效打造跨平台桌面应用:Electron加载服务器端JS

快乐非自愿限量之名

跨平台 Electron

阿里巴巴拍立淘API返回值:商家优化商品信息的参考

技术冰糖葫芦

API Gateway API 接口 API 测试 pinduoduo API

一文搞定WeakHashMap

不在线第一只蜗牛

Java

支持 128TB 超大存储,GaussDB (for MySQL) 如何轻松应对海量数据挑战

华为云开发者联盟

数据库

基于LangChain手工测试用例转App自动化测试生成工具

测吧(北京)科技有限公司

测试

从源码角度,深度解读 MySQL 优化器的 GROUP BY 优化策略

华为云开发者联盟

数据库

二维码固定资产管理系统,中小微企业的合适之选

软件大师兄

低代码 无代码 无代码平台 草料二维码

CDN加速是什么?CDN加速的原理是什么?

Ogcloud

CDN 网络加速 CDN加速 CDN技术 CDN网络加速

Java SE 23 新增特性

EquatorCoco

Java Python

恭喜!龙蜥赛题队获得 2024 大学生操作系统能力大赛 OS 功能挑战赛道三等奖

OpenAnolis小助手

开源 操作系统 龙蜥社区

面试官:GROUP BY和DISTINCT有什么区别?

王磊

低代码开发:助力制造业数字化高质量发展

不在线第一只蜗牛

低代码

天池Fashion AI 比赛失败经历分享

阿里云天池

专访阿里云:AI 时代服务器操作系统洗牌在即,生态合作重构未来

OpenAnolis小助手

开源 AI 操作系统 龙蜥社区 龙蜥操作系统大会

万界星空科技饮料行业生产管理MES系统解决方案

万界星空科技

工业互联网 mes 万界星空科技 饮料行业 食品饮料

Nexpose 6.6.270 发布下载,新增功能概览

sysin

漏洞扫描 Nexpose

商家运营优化:基于京东API返回值的商品管理策略

技术冰糖葫芦

API Gateway API 接口 API 测试 pinduoduo API

【IoTDB 线上小课 07】多类写入接口,快速易懂的“说明书”!

Apache IoTDB

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