分布式计算中序列化的范例

今天粗略地看了[url=http://hadoop.apache.org/avro/docs/current/index.html]Apache Avro[/url]的资料, 这是一种类似于Thrift和ProtocolBuffer的数据序列化工具,看起来不错。主要特点是:有schema定义以及动态类型。

schema定义的好处是能减少数据大小,如果没有schema定义,那么协议处理器不可能知道下一个遇到的类型是什么,只好通过每个数据的头部知道,这样头部的大小会占比较可观的比例, 比如每个整数四个字节,就要有一个字节说明这个数据的类型, 利用率只能有80%. 典型这样的协议有AMF, BSON, Erlang Node protocol, python语言的pickle, mashal等; 有了schema 定义,则处理器在数据收到的时候就知道数据的格式,从CORBA到Thrift到PB还有诸多游戏网络引擎采用这个模式。一般先用预处理器将schema/spec/protocol翻译成实现语言(c/c++/java等)的桩(stub)这样对于开发和部署都存在不方便, 而对于动态语言, 传统的方式和处理静态语言没有什么区别. 实际上以动态语言的脚本生成能力,完全不需要提前生成桩, 完全可以当schema改变的时候编译一遍(eval或者compile) 以后就直接使用编译生成的脚本,一切都可以由机制自动完成, 对于应用开发者来说是透明的,这样应用开发何部署更容易一些。

记得大约4,5年前,工作内容是为一个网络游戏的引擎VCE写动态语言的接口,我曾经用过这种动态编译的方法,对于ruby/python/perl语言的程序,可以自动生成处理器脚本,接口的相应变化都会立即反应到脚本生成。但是超出了当时的需求,最终没有发布。

而Avro的模式,是在客户端服务器连接的开始就互换各种schema信息,并生成相应的处理器。schema用方便快捷的JSON来定义, 也提供了几种语言的接口, 看起来不错。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值