一、RCP概念
RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。
二、实现方式
JDK动态代理
三、消息数据结构
客户端请求参数数据结构:
1、接口名称
2、方法名
3、参数类型&参数值
4、超时时间
5、requestID,标识唯一请求id。
服务端返回参数数据结构:
1、返回值
2、状态code
3、requestID,标识唯一请求id。
requestID作用:在多线程请求中,每一个线程的唯一标识。
四、序列化和反序列化
RPC选择序列化方法时需要考虑的点:
1、通用性,比如是否能支持Map等复杂的数据结构;
2、性能,包括时间复杂度和空间复杂度,由于RPC框架将会被公司几乎所有服务使用,如果序列化上能节约一点时间,对整个公司的收益都将非常可观,同理如果序列化上能节约一点内存,网络带宽也能省下不少;
3、可扩展性,对互联网公司而言,业务变化快,如果序列化协议具有良好的可扩展性,支持自动增加新的业务字段,删除老的字段,而不影响老的服务,这将大大提供系统的健壮性。
五、网络通信
一般RPC框架都要支持BIO,NIO两种IO通信模式。
一般都基于netty实现RPC的IO通信框架。
六、发布服务
使用zookeeper实现服务自动注册与发现功能。