RPC通讯机制

Download Report

Transcript RPC通讯机制

RPC通信原理
技术研发部
2011-09-29
更新历史
制作人
林帆
参与人
更新时间
2011-09-29
更新内容
文档创建
什么是RPC
RPC(Remote Procedure Call)远程过程调用,在分布式环
境中,客户机和服务器在不同的机器上运行,客户端调用在服务器
端运行的服务,并把结果发送回客户机,这称为远程过程调用
(RPC)。
使用RPC能使得在分布式环境中运行的客户机和服务器应用程
序之间进行通信就好像调用本地方法一样简单。
序例化
序列化是干什么的
简单说就是为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来。
虽然你可以用你自己的各种各样的方法来保存Object States,但是Java给你提供一种应该
比你自己好的保存对象状态的机制,那就是序列化。
什么情况下需要序列化
1.当你想把的内存中的对象保存到一个文件中或者数据库中时候;
2.当你想用套接字在网络上传送对象的时候;
3.当你想通过RMI传输对象的时候;
MessagePack介绍
什么是messagepack
1.MessagePack是一个基于二进制高效的对象序列化Library用于跨语言通信。
2.它可以像JSON那样,在许多种语言之间交换结构对象;但是它比JSON更快速也更轻巧。
3.支持Python、Ruby、Java、C/C++、Javascript 等众多语言。
4.比Google Protocol Buffers还要快4倍
数据交换协议
什么是数据交换
在很多地方都有“数据交换”这个概念,本文所说的“数据交换” 是指在计算机网络中,
一个系统把数据传递给另外一个系统。这非常类似于一个人要告诉另外一个人一件事情。
数据交换的目的
数据交换协议的目的是让两个系统进行正确的数据交互。所以几乎各种开发语言都提供了
方便使用的数据交换功能。比如说使用JAVA语言的开发的系统使用 MySQL数据库存储数据,
就是通过MySQL数据交换协议跟MySQL做数据交换;通过JAVA的RMI可以方便的做跨机器
的分布式数据交换,RMI也就是一种数据交换协议。
一般我们在不同的系统、不同的语言之间交换数据的时候,我们会选择一种通用的交换
协议或者自己定义一种容易使用的交换协议。
选择数据交换协议
1.数据交换协议的性能
2.是否需要跨语言支持
3.数据交换协议的消息体大小
4.持久化存储
数据交换协议的各种通用开源实现非常多,数据交换协议只是一个非常宽泛的说法,
其实只要实现了数据的序列化和反序列化 ,那么就可以说是一个可以交换数据的协议。
数据交换协议的性能其实就是序列化和反序列化的性能,如果加上RPC,那么跟RPC实
现本身的性能也有非常大的关系。
为什么选择MessagePack
通常web上做rpc通讯或者结构化数据存储,通常会采用json,但是缺点就是占用空间相比
会比较大。google的protobuf是个不错的序列化替代方案。
系统用json来存储非常浪费空间。拿新浪微博来说,一条微博用json数据结构来存所有字段,
包括作者信息,需要2~5k字节左右,用xml需要10k左右,用protobuf序列化后只有500字节。
虽然protobuf的压缩性能比较好,但是要实现定义message的结构体,不如json这么方便和
容易更改。
而msgpack相比之下就有这些优点:
1.序列化速度快。
2.兼容json的数据格式。
3.比json的序列化更省时间和空间。
4.支持很多种语言。