您的位置:首页 > 其它

常用的跨语言通信方案

2015-11-19 23:44 288 查看
传统的跨语言通信方案:基于SOAP消息格式的WebService基于JSON消息格式的RESTful 服务主要弊端:XML体积太大,解析性能极差JSON体积相对较小,解析相对较快,但表达能力较弱现在比较流行的跨语言通信方案:Google protobuf (http://code.google.com/p/protobuf)Apache Thrift (http://thrift.apache.org/)Apache Avro (http://avro.apache.org/)

Google protobuf:优点二进制消息,性能好/效率高(空间和时间效率都很不错)proto文件生成目标代码,简单易用序列化反序列化直接对应程序中的数据类,不需要解析后在进行映射(XML,JSON都是这种方式)支持向前兼容(新加字段采用默认值)和向后兼容(忽略新加字段),简化升级支持多种语言(可以把proto文件看做IDL文件)Netty等一些框架集成
缺点官方只支持C++,JAVA和Python语言绑定二进制可读性差(貌似提供了Text_Fromat功能)二进制不具有自描述特性默认不具备动态特性(可以通过动态定义生成消息类型或者动态编译支持)只涉及序列化和反序列化技术,不涉及RPC功能(类似XML或者JSON的解析器)

Apache Thrift:
应用Facebook的开源的日志收集系统(scribe: https://github.com/facebook/scribe)淘宝的实时数据传输平台(TimeTunnel http://code.taobao.org/p/TimeTunnel/wiki/index)Evernote开放接口(https://github.com/evernote/evernote-thrift)Quora(http://www.quora.com/Apache-Thrift)HBase( http://abloz.com/hbase/book.html#thrift )…优点支持非常多的语言绑定thrift文件生成目标代码,简单易用消息定义文件支持注释数据结构与传输表现的分离,支持多种消息格式包含完整的客户端/服务端堆栈,可快速实现RPC支持同步和异步通信缺点和protobuf一样不支持动态特性Apache Avro:
应用Hadoop RPC (http://hadoop.apache.org/#What+Is+Apache+Hadoop%3F)优点二进制消息,性能好/效率高使用JSON描述模式模式和数据统一存储,消息自描述,不需要生成stub代码(支持生成IDL)RPC调用在握手阶段交换模式定义包含完整的客户端/服务端堆栈,可快速实现RPC支持同步和异步通信支持动态消息模式定义允许定义数据的排序(序列化时会遵循这个顺序)提供了基于Jetty内核的服务基于Netty的服务缺点只支持Avro自己的序列化格式语言绑定不如Thrift丰富

来自为知笔记(Wiz)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: