当前位置: 首页 > 后端技术 > Java

使用HTTP,为什么要使用RPC?

时间:2023-04-01 23:43:17 Java

好久没搞清楚RPC(RemoteProcedureCall)和HTTP调用的区别。不就是写个服务端,在客户端调用吗?在这里,请允许我微笑~天真!本文简要介绍C/S架构师的两种形态。先说说它们最本质的区别,就是RPC主要是基于TCP/IP协议,而HTTP服务主要是基于HTTP协议。我们都知道HTTP协议是在传输层协议TCP之上的,所以在效率上,RPC当然更胜一筹!下面详细说一下RPC服务和HTTP服务。OSI网络七层模型在说RPC和HTTP的区别之前,我觉得有必要了解一下OSI七层网络结构模型(虽然在实际应用中基本都是五层)。它可以分为以下几层:(从上到下)第一层:应用层。定义用于在网络中通信和传输数据的接口。第二层:表现层。定义不同系统中的数据传输格式、编解码规范等。第三层:会话层。管理用户会话,控制用户之间逻辑连接的建立和终止。第四层:传输层。管理网络中端到端的数据传输。第五层:网络层。定义数据如何在网络设备之间传输。第六层:链路层。将上层网络层的数据包封装成数据帧,方便物理层传输。第七层:物理层。这一层主要是传输这些二进制数据。在实际应用过程中,五层协议结构中没有表示层和会话层。应该说是和应用层合并了。我们应该重点关注应用层和传输层这两个层次。因为HTTP是应用层协议,而TCP是传输层协议。好了,了解了网络的分层模型之后,我们就更能理解为什么RPC服务比HTTP服务更好了!RPC服务从三个角度介绍RPC服务,分别是:RPC架构同步和异步调用流行的RPC框架RPC架构先说说RPC服务的基本架构。我们可以清楚地看到一个完整的RPC架构包含四个核心组件。它们是:ClientServerClientStubServerStub(这个Stub可以理解为存根)说说这几个组件:客户端(Client),服务的调用者。服务器(Server),真正的服务提供者。客户端存根存储服务器的地址信息,然后将客户端的请求参数打包成网络报文,再通过网络远程发送给服务器。服务器存根接收客户端发送的消息,解包消息,调用本地方法。RPC主要用于大型企业,因为大型企业系统多,业务线复杂,效率优势非常重要。这时候RPC的优势就更加明显了。实际开发中是这样做的,一般都是使用Maven来管理项目。比如我们有一个处理订单的系统服务,首先声明它的所有接口(这里特指Java中的Interface),然后将整个工程打包成一个jar包,在服务端导入这个二方库,然后实现对应的功能,客户端只需要引入这个二方库就可以调用了。你为什么这么做?主要是为了减少客户端jar包的大小,因为jar包太多,每次打包发布的时候总会影响效率。此外,它还解耦了客户端和服务端,提高了代码的可移植性。同步调用和异步调用什么是同步调用?什么是异步调用?同步调用意味着客户端等待调用完成并返回结果。异步调用是指客户端不等待调用执行完成并返回结果,但仍然可以通过回调函数接收到返回结果的通知。如果客户端不关心结果,就可以变成单向调用。这个过程有点类似于Java中的Callable和Runnable。接下来我们在进行异步执行的时候,如果需要知道执行的结果,可以使用Callable接口,我们可以通过Future类获取异步执行的结果信息。如果不关心执行结果,可以直接使用Runnable接口,因为它不返回结果。当然Callable也是可以的,我们不需要获取Future。流行的RPC框架仍然有许多流行的开源RPC框架。下面重点介绍三种:①gRPC是谷歌最近公布的一款开源软件,基于最新的HTTP2.0协议,支持多种常见的编程语言。我们知道HTTP2.0是基于二进制的HTTP协议的升级版本,目前各大浏览器都在加紧支持。这个RPC框架是基于HTTP协议实现的,底层使用了Netty框架的支持。②Thrift是Facebook的一个开源项目,主要是一个跨语言的服务开发框架。它有一个代码生成器,可以为它定义的IDL定义文件自动生成服务代码框架。用户只需要在它之前进行二次开发,对底层RPC通信是透明的。但是,对于用户来说,需要学习领域特定语言的特性,这还是有一定成本的。③Dubbo是阿里集团开源的一款极其知名的RPC框架,广泛应用于众多互联网公司和企业应用。协议和序列化框架都是可插拔的,具有鲜明的特点。同样的远程接口基于JavaInterface,依赖Spring框架方便开发。可以很方便的打包成一个文件,运行在一个独立的进程中,这与现在微服务的理念是一致的。HTTP服务其实很久以前,我的企业开发模式一直被定义为HTTP接口开发,也就是我们常说的RESTful风格的服务接口。确实,在接口不多,系统与系统之间交互较少的情况下,是解决信息孤岛初期经常使用的通信方式;优点是简单、直接、开发方便。使用现成的HTTP协议进行传输。我们还记得本科实习的时候在公司做后台开发,主要是开发接口,还写了一个很大的接口文档严格写明输入输出是什么?解释清楚各个接口的请求方式和请求参数的注意事项。例如下面的例子:POSThttp://www.httpexample.com/re...接口可能返回一个JSON字符串或者一个XML文档。然后客户端对返回的信息进行处理,这样就可以比较快速的进行开发。但是对于大型企业来说,当内部子系统很多,接口很多的时候,RPC框架的好处就体现出来了。首先是长链接。没必要每次都像HTTP一样握三次手。减少网络开销。二是RPC框架一般都有注册中心,监控管理丰富;发布、下线接口、动态扩展等,对于调用者来说都是无感知的统一操作。综上所述,RPC服务和HTTP服务还是有很多区别的。一般来说,RPC服务主要针对大型企业,而HTTP服务主要针对小型企业,因为RPC效率更高,HTTP服务开发迭代效率会更高。快的。总之,选择什么样的框架,并不是由市场流行什么来决定的,而是要对整个项目进行完整的评估,从而仔细比较两种开发框架对整个项目的影响,最终决定什么最适合这个项目。一定不要为了每个项目都使用RPC而使用RPC,而是要因地制宜,具体情况具体分析。