常见RPC框架:
- XML-RPC 1).xml格式通用性好,但是数据量大,性能比较差。
- json-RPC 1).json通用性也很好,但是数据量比xml小,性能一般。
- Hessian 1).一个采用二进制格式传输的服务框架,相对传统soap web service,更轻量,更快速。
- Burlap 1). 它和hessian的不同在于,它是基于XML-RPC协议的,数据流大一些。
- dubbo 1).不仅仅是一个rpc框架,还提供了集群容错,注册中心,服务监控等功能。支持多种协议,支持多方面扩展,灵活度高,性能好。
- spring-http-invoker 1). 集成在spring框架的简单rpc,基于http协议
- thrift 1). facebook贡献,多语言支持,数据量小,性能高。
- finagle 1).Twitter基于Netty开发的支持容错的、协议无关的RPC框架,性能高,目前只支持jvm上的语言。
- Gaea 1).58贡献,支持java,不支持多协议
- java RMI 1).java原生态的rpc,java跨版本或防火墙时存在问题,性能比较低。
- GRPC 1).GRPC是google开源的一个rpc框架,目前有C,java和go几个语言的实现版本,GRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特。
- QiuRPC 1).QiuRPC是我写的一个采用JAVA实现的小巧的RPC框架,已在github开源,一共3K多行代码,实现了RPC的基本功能,可以一起学习探讨或者在小项目中使用
一般来讲RPC主要分为四个部分,分别是序列化层、函数调用层、网络传输层和服务器端处理框架,具体实现机制如下:
序列化层:序列化主要作用是将结构化对象转为字节流以便于通过网络进行传输或写入持久存储,在RPC框架中,它主要用于将用户请求中的参数或者应答转化成字节流以便跨机器传输。常用的序列化方式有xml,json,hessian,pb等。
函数调用层:函数调用层主要功能是定位要调用的函数并执行该函数,可以采用Java反射机制与动态代理实现了函数调用。
网络传输层:网络传输层描述了Client与Server之间消息传输的方式。
服务器端处理框架:服务器端处理框架可被抽象为网络I/O模型,它描述了客户端与服务器端间信息交互方式,它的设计直接决定着服务器端的并发处理能力,常见的网络I/O模型有阻塞式I/O、非阻塞式I/O、事件驱动I/O等,而Hadoop RPC采用了基于Reactor设计模式的事件驱动I/O模型。