RPC和HTTP的区别?
RPC(即Remote Procedure Call,远程过程调用)和HTTP(HyperText Transfer Protocol,超文本传输协议)他们最本质的区别,就是RPC主要工作在TCP协议之上,而HTTP服务主要是工作在HTTP协议之上,我们都知道HTTP协议是在传输层协议TCP之上的,所以效率来看的话,RPC当然是要更胜一筹。
RPC主要是用在大型网站里面,HTTP主要是用在中小型企业里面。
rpc是远程过程调用,http超文本协议,rpc主要工作在http协议之上,效率要高于http协议
rpc架构包含四个核心组件:Client、Server、Client Stub、Server Stub
客户端:服务调用方
服务器:服务提供者
根客户端:存放服务器地址信息,再将客户端的请求参数打包成网络信息,然后通过网络远程给服务器
根服务器:接收客户端发送过来的消息,将消息解包,并调用本地方法
根客户端调用客户端传递的消息,然后处理后返回消息给客户端,服务器类似
客户端和服务器之间通过网络消息进行交互
rpc主要使用在大型项目中,实际开发中,项目一般是使用maven来管理,首先声明该项目的所有接口,然后打包成一个jar包,服务端引入这个接口库,实现接口的具体功能,客户端只需引入这个接口库即可调用。主要是减少客户端这边jar包的大小,每次打包发布会非常影响效率;另外为了将客户端和服务器解耦,提高代码的可移植性
同步调用和异步调用
同步调用:客户端等待调用执行完成并返回结果
异步调用:客户端不用等待调用执行完成返回结果,只需通过回调函数接收返回结果的通知。如果客户端不关心结果,则可以变成一个单向的调用。这个过程类似于Java中的Callable和Runnable接口,我们进行异步执行的时候,如果只需知道执行的结果,就可以使用Callable接口
为什么需要RPC,而不是简单的HTTP接口
http接口是在接口不多、系统与系统交互较少的情况下,解决信息孤岛初期常使用的一种通信手段;优点就是简单、直接、开发方便。利用现成的http协议 进行传输
但是如果是一个大型的网站,内部子系统较多、接口非常多的情况下,RPC框架的好处就显示出来了,首先就是长链接,不必每次通信都要像http 一样去3次握手什么的,减少了网络开销;其次就是RPC框架一般都有注册中心,有丰富的监控管理;发布、下线接口、动态扩展等,对调用方来说是无感知、统 一化的操作。第三个来说就是安全性
最后就是最近流行的服务化架构、服务化治理,RPC框架是一个强力的支撑
论复杂度,RPC框架肯定是高于简单的HTTP接口的。但毋庸置疑,HTTP接口由于受限于HTTP协议,需要带HTTP请求头,导致传输起来效率或者说安全性不如RPC
技术不应该是为了使用新技术而去使用,而应该是旧技术存在某些瓶颈,存在难以支撑或者扩展性越老越差等问题暴露出来之后,用新技术来进行解决。