BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

BERT--作为Protocol Buffers/Thrift的动态替代

| 作者 Werner Schuster 关注 6 他的粉丝 ,译者 黄璜 关注 0 他的粉丝 发布于 2009年11月4日. 估计阅读时间: 2 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

尽管XML在数据编码方面尤为突出,仍然有很多情况下效率不高成为了阻碍,这是由编码/解码的效率不足与所占用的空间两方面所造成的。流行的二进制序列化格式有得到广泛使用的ASN.1, Google的ProtocolBuffers,以及Facebook的Thrift

一个新的格式现在为GitHub的后端提供支持:BERT,它由Tom Preston-Werner在Erlang用于编码节点间通讯术语的外部术语格式(ETF)的基础上所构建。

BERT对ETF进行了扩展,加入了字典,时间和正则表达式等复杂数据类型。

BERT不同于ASN.1与Protocol Buffers之处在于其格式不要求一个模式或者是IDL规范。Tom Preston-Werner 解释这使得BERT就好像是JSON这一思想的二进制版:

我喜欢JSON。我喜欢抽取一种语言的子集并用它来促进进程间通信这种概念。这使我想起我关于Erlectricity所做的工作。两年以前我为Erlectricity写过一个C扩展来加速Erlang的外部术语格式的反序列化。
[..] 如果我将Erlang的外部术语格式的公共部分抽取出来,让它成为进程间通信的标准,会怎么样呢?如果让Erlang拥有像JavaScript的JSON那样的相同的事物又会怎样呢?如果能在这一格式的基础上构建一个RPC协议,又会如何?这些东西看起来会像什么样子,能简单的实现吗?

BERT-RPC允许对托管在BERT-RPC服务器上的代码远程调用,它使用BERTs来编码(节点的)协商,并返回调用的值。Tom 提到了BERT-RPC的一些特性

- 同步及异步的调用[..]
- 流(来或往)
- 缓存指令

Ruby代码可通过使用像Ernie这样的BERT-PRC服务器来获得。

已有现成的BERT和BERT-RPC规范。至于Ruby和Erlang实现的其它语言可替代实现包括BERT for JavascriptPython,以及其它。

你更倾向于BERT这样的无模式方案呢,还是像ASN.1和ProtocolBuffers这样的基于IDL的选择?

查看英文原文:BERT as Dynamic Alternative to Protocol Buffers/Thrift

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT