[转]跨语言通信方案比较
原文链接(http://blog.csdn.net/weiwangchao_/article/details/22289905)
常用的跨语言通信方案:
- 基于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
Protocol Buffers是Google公司开发的一种数据描述语言
可用于数据存储、通信协议等方面,它不依赖于语言和平台并且可扩展性极强。
现阶段官方支持C++、Java、Python等三种编程语言,但可以找到大量的几乎涵盖所有语言的第三方拓展包。
消息格式定义采用proto文件
应用
- Google内部
- …
优点
- 二进制消息,性能好/效率高(空间和时间效率都很不错)
- proto文件生成目标代码,简单易用
- 序列化反序列化直接对应程序中的数据类,不需要解析后在进行映射(XML,JSON都是这种方式)
- 支持向前兼容(新加字段采用默认值)和向后兼容(忽略新加字段),简化升级
- 支持多种语言(可以把proto文件看做IDL文件)
- Netty等一些框架集成
缺点
- 官方只支持C++,JAVA和Python语言绑定
- 二进制可读性差(貌似提供了Text_Fromat功能)
- 二进制不具有自描述特性
- 默认不具备动态特性(可以通过动态定义生成消息类型或者动态编译支持)
- 只涉及序列化和反序列化技术,不涉及RPC功能(类似XML或者JSON的解析器)
Apache Thrift
Thrift是Facebook实现的一种高效的、支持多种编程语言的远程服务调用的框架,
现在已经转到Apache组织下,提供数据序列化的功能和RPC服务能力。
支持 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk 等语言
消息格式定义采用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
- Avro出自Hadoop之父Doug Cutting,
- 目标是推出标准性的云计算的数据交换和存储的Protocol
- 支持 C, C++, Java, Python, Ruby, PHP
- 消息格式定义采用JSON描述
应用
- Hadoop RPC (http://hadoop.apache.org/#What+Is+Apache+Hadoop%3F)
优点
- 二进制消息,性能好/效率高
- 使用JSON描述模式
- 模式和数据统一存储,消息自描述,不需要生成stub代码(支持生成IDL)
- RPC调用在握手阶段交换模式定义
- 包含完整的客户端/服务端堆栈,可快速实现RPC
- 支持同步和异步通信
- 支持动态消息
- 模式定义允许定义数据的排序(序列化时会遵循这个顺序)
- 提供了基于Jetty内核的服务基于Netty的服务
缺点
- 只支持Avro自己的序列化格式
- 语言绑定不如Thrift丰富
转载于:https://www.cnblogs.com/weiyinfu/p/6306124.html
[转]跨语言通信方案比较相关推荐
- SSO的几种跨域方案
在此只是记录一下自己在尝试SSO跨域实现的过程中学到的几种跨域方案,不包含任何例子和具体的实现方法. 最近在尝试SSO的跨域,看了好多资料,然后自己记录了一下可以实现的方法: ①跳转所有站点设置coo ...
- gorilla websocket无法跨域_聊聊浏览器同源策略与跨域方案详解
开发出高性能的 Web 应用固然重要,但安全问题也不容小觑.本文我们继续以 HTTP 为线索,展开来讲一讲浏览器安全相关的同源策略. 浏览器的同源策略(Same Origin Policy) 源(Or ...
- 闲鱼架构专家,详解Flutter技术架构15页ppt:跨端方案如何选择?
文/技术领导力社区 编辑/Emma 闲鱼架构团队负责人国有.技术专家宗心.灯阳,在文章及公开分享中介绍了Flutter在闲鱼的实践,内容包括:选择Flutter的背景和思考.闲鱼的Flutter新混合 ...
- 好的跨端方案,成为跨平台开发效率的加速器
近些年,整个前端领域发展迅速,效率型的前端框架也层出不穷,每个团队选择的技术解决方案都不太一致,因为互联网的特性及中国自身的特色,各个产品对于多端的投放的需求是一致的.虽然很多平台都采用了跨端开发(跨 ...
- 1 跨芯片方案的IPC通用库的架构设计
专栏特色 1.所有源码严格遵守统一的编码规范. 2.纯C++接口,接口封装严谨,接口功能丰富,应用层调用简单便捷. 3.近二十年行业经验和技术积累打造的高质量商用级代码,架构清晰合理,便于扩展和维护. ...
- MPLS BGP 跨域方案A
应用场景 当公司地理位置跨度较大,跨多个运营商时就需要使用跨域技术解决路由传递问题 例如北方主要使用联通网络,南方主要使用电信网络,如果两个公司一个在北京一个在广东就需要使用到跨域方案解决MPLS B ...
- MPLS BGP 跨域方案B
应用场景 当公司地理位置跨度较大,跨多个运营商时就需要使用跨域技术解决路由传递问题 例如北方主要使用联通网络,南方主要使用电信网络,如果两个公司一个在北京一个在广东就需要使用到跨域方案解决MPLS B ...
- 前端跨域方案看这篇就够了
文章目录 前言 跨域解决的方法 1.JSONP 2.CORS跨域资源共享 3.http proxy => webpack webpack-dev-server 4.nginx反向代理 5.pos ...
- 【综合】JS跨域方案JSONP与CORS跨域
缘由: 因为浏览器的同源策略,即是浏览器之间要隔离不同域的内容,禁止互相操作,提高安全性. 为何要跨域: 有时候你想通过自己的网站去获取另一个自己的网站的一些资料信息,但是由于两者域名不同,所以就被同 ...
最新文章
- TC SRM 562 div2 B 题
- word2vec应用场景_word2vec的使用参数解释和应用场景
- cocos2d-x知识总结
- 工作337:pc-ele-ment联查问题
- 华为什么时候更新鸿蒙os,华为鸿蒙系统升级时间表
- 你以为PHP那么好自定义升级?
- Python办公自动化(二)|从Excel到Word
- python 多个装饰器的调用顺序
- 相对定向绝对定向 MFC 实现 CSU摄影测量学
- 房天下搜房网二手房_【杭州二手房|杭州二手房出售】 - 杭州房天下
- 有哪些在家健身的软件?Mac健身软件推荐
- ESXi社区版ne1000 VIB驱动的更新
- css 全角设置,CSS Flex框布局:全角行和列
- 常见的NLP处理手段和相应的spaCy库使用
- Android如何自定义服务器DynamicMockServer的使用
- 大货跟踪程序精简版v1.20200731
- NPOI导出Word插入图片问题解决方案
- 值得你收藏的Notes应用模板
- 基于Python改变图片像素大小
- 无线有线统一认证计费管理平台