如何设计一个RPC框架?

首先,我们需要知道什么是RPC框架?

RPC(Remote Procedure Call)叫作远程过程调用,它是利用网络从远程计算机上请求服务,可以理解为把程序的一部分放在其他远程计算机上执行。通过网络通信将调用请求发送至远程计算机后,利用远程计算机的系统资源执行这部分程序,最终返回远程计算机上的执行结果。

然后,我们考虑设计他需要考虑哪些因素?

作为一个RPC框架,最核心的就是网络调用了,如何高效的调用远程方法就成了最大的考虑因素。

1、通过网络,要发送哪些数据,比如至少得发送类名或者接口名,要调用的方法名、调用方法时传入的参数等。

2、方法参数如果是对象,那么如果要考虑网络发送对象的问题,就需要考虑序列化和反序列化的问题了,使用何种序列化机制,也是要考虑的问题。

3、确定好了要发送的数据后,那通过什么方式发出去呢,是直接通过Socket发送,或者是http发送呢。

4、如果利用http来发,那就是用http1.1,或者是http2呢,请求头放什么数据,请求体放什么数据,都是问题。

5、如何直接通过socket来发,那就需要自己设计一个数据格式了,类似于htp协议,不然服务器接收到字节流之后无法解析字节流。

6、确定好数据格式和网络传输方式之后,就需要考虑是否支持异步功能了,是否支持回调功能。

7、另外想负载均衡、服务容错、服务路由、服务重试等功能也要逐一考虑。

所以,设计一个RPC框架,大体思路是先设计一个最小可用的远程调用框架然后不断优化性能,使其逐渐功能丰富。

你可能感兴趣的:(rpc,java,网络协议)