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

发布于2019-04-21 20:36:28

尽管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