【转载】跨语言通信方案比较

简介:

常用的跨语言通信方案:

  • 基于 SOAP 消息格式的 WebService ;
  • 基于 JSON 消息格式的 RESTful 服务;

以上两种方案的弊端:

  • XML 体积太大,解析性能极差;
  • JSON 体积相对较小,解析相对较快,但表达能力较弱;

于是探索一下现在比较流行的跨语言通信方案:

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 文件;

应用

优点

  • 支持非常多的语言绑定;
  • thrift 文件生成目标代码,简单易用;
  • 消息定义文件支持注释
  • 数据结构与传输表现的分离,支持多种消息格式;
  • 包含完整的客户端/服务端堆栈,可快速实现 RPC ;
  • 支持同步和异步通信

缺点

  • 和 protobuf 一样不支持动态特性;

Apache Avro

Avro 出自 Hadoop 之父 Doug Cutting ;
目标是推出标准性的、用于云计算的、数据交换和存储协议;
支持 C, C++, Java, Python, Ruby, PHP 等语言;
消息格式定义采用 JSON 描述;

应用

优点

  • 二进制消息,性能好/效率高;
  • 使用 JSON 描述模式;
  • 模式和数据统一存储,消息自描述,不需要生成 stub 代码(支持生成 IDL);
  • RPC 调用在握手阶段交换模式定义;
  • 包含完整的客户端/服务端堆栈,可快速实现 RPC;
  • 支持同步和异步通信;
  • 支持动态消息;
  • 模式定义允许定义数据的排序(序列化时会遵循这个顺序);
  • 提供了基于 Jetty 内核的服务基于 Netty 的服务;

缺点

  • 只支持 Avro 自己的序列化格式;
  • 语言绑定不如 Thrift 丰富;
目录
相关文章
|
10月前
|
网络协议 自动驾驶 安全
掌握SOME/IP:远程过程调用 构建高效通信系统的关键技术
掌握SOME/IP:远程过程调用 构建高效通信系统的关键技术
1009 0
|
存储 网络协议 Java
网络通信的核心机制:Socket如何实现高效数据传输(上)
网络通信的核心机制:Socket如何实现高效数据传输
|
7月前
|
消息中间件 监控 网络协议
构建高效微服务通信:选择合适的通信方式
构建高效微服务通信:选择合适的通信方式
|
4月前
|
传感器 物联网 Linux
Bluegiga APX4 协议的优势
Bluegiga APX4协议优势显著,包括高性能处理器、多种无线连接支持、丰富的软件功能、强大的协议共存能力、易于扩展和定制,以及降低研发风险和成本。这些特点使其在物联网应用中表现出色,加速产品开发和上市。
102 44
|
4月前
|
存储 网络协议 物联网
C 语言物联网开发之网络通信与数据传输难题
本文探讨了C语言在物联网开发中遇到的网络通信与数据传输挑战,分析了常见问题并提出了优化策略,旨在提高数据传输效率和系统稳定性。
|
4月前
|
存储 负载均衡 监控
如何利用Go语言的高效性、并发支持、简洁性和跨平台性等优势,通过合理设计架构、实现负载均衡、构建容错机制、建立监控体系、优化数据存储及实施服务治理等步骤,打造稳定可靠的服务架构。
在数字化时代,构建高可靠性服务架构至关重要。本文探讨了如何利用Go语言的高效性、并发支持、简洁性和跨平台性等优势,通过合理设计架构、实现负载均衡、构建容错机制、建立监控体系、优化数据存储及实施服务治理等步骤,打造稳定可靠的服务架构。
91 1
|
6月前
|
网络协议 网络安全 网络架构
分布式基础-网络通信协议讲解
分布式基础-网络通信协议讲解
分布式基础-网络通信协议讲解
|
6月前
|
网络协议
UDP协议在网络通信中的独特应用与优势
UDP(用户数据报协议)作为关键的传输层协议,在网络通信中展现出独特优势。本文探讨UDP的无连接性及低开销特性,使其在实时性要求高的场景如视频流、在线游戏中表现优异;其不保证可靠交付的特性赋予应用程序自定义传输策略的灵活性;面向报文的高效处理能力及短小的包头设计进一步提升了数据传输效率。总之,UDP适用于高速、实时性强且对可靠性要求不高的应用场景,为网络通信提供了多样化的选择。
|
10月前
|
网络协议 安全 Java
Java网络编程实战:构建高效稳定的网络通信
【4月更文挑战第2天】Java网络编程涉及Socket编程,基于TCP(可靠,面向连接)和UDP(不可靠,无连接)协议。Socket类和ServerSocket类用于TCP,而DatagramSocket和DatagramPacket处理UDP。高效通信涉及线程管理、选择合适的IO模型(如NIO)、利用缓冲区及确保网络安全,如使用SSL/TLS。适用于Web服务器、文件传输等场景。
59 0
Java网络编程实战:构建高效稳定的网络通信
|
10月前
|
Dubbo Java 应用服务中间件
【分布式技术专题】「探索高性能远程通信」基于Netty的分布式通信框架实现(附通信协议和代码)(上)
今天,我要向大家实现一个基于Netty实现的高性能远程通信框架!这个框架利用了 Netty 的强大功能,提供了快速、可靠的远程通信能力。 无论是构建大规模微服务架构还是实现分布式计算,这个分布式通信框架都是一个不可或缺的利器。
183 2
【分布式技术专题】「探索高性能远程通信」基于Netty的分布式通信框架实现(附通信协议和代码)(上)