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.支持很多种语言。