BT

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

Microsoft Avro介绍

| 作者 Jonathan Allen 关注 530 他的粉丝 ,译者 孙镜涛 关注 2 他的粉丝 发布于 2014年5月13日. 估计阅读时间: 2 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

Microsoft发布了他们自己对Apache Avro通信协议的实现。Avro被描述为“紧凑的二进制数据序列化格式,类似于Thrift或者Protocol Buffers”,同时还有像Hadoop这样的分布式处理环境所需要的额外功能。

为了让该协议尽可能地快,Microsoft Avro类库会在运行时使用表达式树构建并编译一个自定义的序列化器。在第一次命中将序列化器编译成IL代码之后,它的性能要比基于反射的算法更好。

Protocol Buffers不同的是,Avro协议是自描述的。当客户端和服务器之间建立连接的时候,模式就会被传送。通常情况下模式仅会被传输一次,因此没必要硬编码二进制格式,也没有在每个消息里面传递模式的代价。

由于以上种种原因,Microsoft Avro类库能支持下面三种模式:

  • 反射模式。基于.NET类型的模式构建序列化器的IL代码以便于实现性能最大化。
  • 通用记录模式。可以在运行时指定数据的JSON模式,因此能够处理任意模式的动态数据。
  • 容器模式。类库能够生成嵌入了模式的可移植文件。文件格式与Avro容器文件规范兼容,同时能够跨平台使用。

在反射模式下使用的时候,Avro使用WCF开发者所熟悉的DataContract/DataMemeber属性。

通用记录模式会假定你并没有一个预定义的.NET类用来存储数据。相反地,你使用AvroRecord类连同一个描述数据格式的JSON文档。AvroRecord对象需要使用后期绑定模式访问(C# dynamic、关闭VB Option Strict)。

容器模式可以连同反射模式或者通用记录模式一起使用。因为你是以这种模式创建文件而不是通过可以对数据进行压缩和/或加密(使用你喜欢的任意方式)的线路发送消息。开箱即用并不会让你感受到压力或者抑制,但是它仅包含构建代码解码器的指令

查看英文原文Introducing Microsoft Avro

评价本文

专业度
风格

您好,朋友!

您需要 注册一个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