RPC 服务和 HTTP 服务对比,java 基础实验报告总结
在说 RPC 和 HTTP 的区别之前,我觉的有必要了解一下 OSI 的七层网络结构模型(虽然实际应用中基本上都是五层),它可以分为以下几层: (从上到下)
第一层:应用层。定义了用于在网络中进行通信和传输数据的接口;
第二层:表示层。定义不同的系统中数据的传输格式,编码和解码规范等;
第三层:会话层。管理用户的会话,控制用户间逻辑连接的建立和中断;
第四层:传输层。管理着网络中的端到端的数据传输;
第五层:网络层。定义网络设备间如何传输数据;
第六层:链路层。将上面的网络层的数据包封装成数据帧,便于物理层传输;
第七层:物理层。这一层主要就是传输这些二进制数据。
实际应用过程中,五层协议结构里面是没有表示层和会话层的。应该说它们和应用层合并了。我们应该将重点放在应用层和传输层这两个层面。因为 HTTP 是应用层协议,而 TCP 是传输层协议。好,知道了网络的分层模型以后我们可以更好的理解为什么 RPC 服务相比 HTTP 服务要好一些!
二、RPC 服务
1、RPC 架构

这个叫 RPC 啊,,恍然大悟!
RPC 主要是用在大型企业里面,因为大型企业里面系统繁多,业务线复杂,而且效率优势非常重要的一块,这个时候 RPC 的优势就比较明显了,实际的开发当中是这么做的,项目一般使用 maven 来管理。比如我们有一个处理订单的系统服
务,先声明它的所有接口(这里指的是 java 中的 interface),然后将整个项目打包为一个 jar 包,服务端这边引入这个二方库,然后实现相应的功能,客户端这边只需要引入这个二方库就可以调用了。
为什么这么做?主要是为了减少客户端这边的 jar 包大小,因为每一次打包发布的时候,jar 包太多总是会影响效率。另外也是将客户端和服务端解耦,提高代码的可移植性。
2、同步调用和异步调用
同步调用及时客户端等待执行完成并返回结果。
异步调用就是客户端不等待调用执行完成返回结果,不过依然可以通过回调函数接收到返回结果的通知。如果客户端不关心结果,则可以变成一个单向的调用。这个过程有点类似于 Java 中的 callable 和 runnable 接口,我们进行异步操作的时候,如果需要知道执行的结果就使用 callable 接口,并且可以通过 Future 类获取到异步执行的结果信息。如果不关系执行的结果,直接使用 runnable 接口就可以了,因为它不返回结果,当然啦,callable 也是可以的,我们不去获取 Future 就可以了。
3、流行的 RPC 框架
Dubbo 是阿里集团开源的一个极为出名的 RPC 框架,在很多互联网公司和企业中广泛应用。协议和序列化框架都可以插拔式。远程接口是基于 Java Interface,并且依托于 Spring 框架方便开发。可以方便的打包成单一文件,独立进程运行,和现在的微服务概念一致。
评论