分布式应用通信协议
1. 历史
第一轮:HTTP,带来了Internet与电子商务
第二轮:Java,cross-platform,最早的RMI
第三轮:XML,标准的数据封装技术,各种App之间交换数据不再是难事。
第四轮:RPC,Webservice、REST、高性能通信协议
2. What is RPC?
简单理解: 可互操作的Web服务
RPC(Remote Procedure Call)
– 在某种传输协议(TCP\HTTP等)上携带信息数据,通过网络从远程计算机程序上请求服务
– 在OSI模型中,RPC跨越了传输层和应用层
– 基于请求应答模式
– 跨语言的通信标准
任何一个RPC规范和实现都包含:
– 服务层(service):RPC接口定义与实现
– 协议层(protocol):RPC报文格式和数据编码格式
– 传输层(transport):实现底层的通信(如 socket)
应用程序通信性能比较:ipc<tcp<http<soap
3. RPC
以XML-RPC为代表介绍
XML-RPC(XML Remote Procedure Call)
– 协议层:XML
– 传输层:HTTP(许多防火墙也配置为只允许HTTP连接)
一个XML-RPC消息就是一个请求体为xml的http-post请求,服务端执行后也以xml格式编码返回。
4. webservice
Webservice平台是一套标准,它定义了应用程序如何在Web上实现互操作性。标准包括:
– 描述数据的方法:XML
– 信息交换的协议:SOAP
– 传输协议:HTTP
– Web服务描述语言:WSDL
– 发布注册:UDDI
– 服务具体的实现技术:Java,C,Ptyhon…
SOAP介绍
– 可以看做是XML-RPC的高级版本
– SOAP是一种轻量的、简单的、基于XML的协议,允许应用程序通过HTTP来交换信息。或者更简单地讲,SOAP是用于访问Web服务的协议。
– 一个SOAP请求实际上也是一个http-post请求
更多了解参考"Webservice/SOAP/WSDL释疑篇"
5. REST
REST介绍
– 具象状态传输(Representational State Transfer)
– 业界开放服务新标准
– 面向资源开开发
– 公开目录结构式的 URI(http://twitter.com/statuses/user/zhangxu)
– 回归HTTP协议本性(GET、POST、PUT、DELETE)
6. 高性能应用程序通信协议
传统的RPC
– 不管是json还是xml传输数据,效率很低
RMI
– 效率高,仅适用于Java
直接socket连接
– 需要开发自己的协议,成本高
因此需要通过二进制HTTP传输的高性能通信中间件,其中高性能可以理解为:
– 对象的序列化、反序列化高性能
– 压缩算法高性能
– 传输高性能
常用于企业内部系统间的交互
常用技术
– hessian、thrift、protocol buffer
6.1 Hessian
Hessian 是开源的远程通讯协议。 Hessian 采用二进制 RPC 协议,基于 HTTP 传输,服务器端不用开放防火墙端口。 Hessian 协议的规范是公开的,可以用于任意语言。
Hessian通常通过Web应用来提供服务,因此非常类似于WebService。它不使用SOAP协议,并且按照二进制传输。
一次调用的流程:
客户端——>序列化写到输出流——>远程方法(服务器端)——>序列化写到输出流 ——>客户端读取输入流——>输出结果
6.2 Thrift
参考文章“跨平台通信中间件thrift学习【Java版本】”
6.3 protobuf
protocol buffer 是 google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现:java、c++ 和 python等,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。
Protobuf只有一种序列化和反序列化的手段,并不涉及传输层
Protobuf序列化效率业界最高!