RPC协议

RPC 全称是 Remote Procedure Call ,即远程过程调用,其对应的是我们的本地调用。
远程其实指的就是需要网络通信,可以理解为调用远程机器上的方法。
那可能有人说:我用 HTTP 调用不就是远程调用了,那不也叫 RPC 了?
不是的,RPC 的目的是:让我们调用远程方法像调用本地方法一样无差别,解决分布式系统中服务之间的调用问题。


一、RPC是一种技术的概念名词

HTTP是一种协议,RPC可以通过 HTTP 来实现,也可以通过Socket自己实现一套协议来实现。

二、RPC框架的好处

简单、直接、开发方便。

如果是一个大型的网站,内部子系统较多、接口非常多的情况下,RPC框架的好处就显示出来了:

  1. 首先就是长链接,不必每次通信都要像http一样去3次握手,减少了网络开销;
  2. 其次就是RPC框架一般都有注册中心,有丰富的监控管理;发布、下线接口、动态扩展等,对调用方来说是无感知、统一化的操作;
  3. 最后是安全性。

三、RPC是一种概念,http也是RPC实现的一种方式

论复杂度,dubbo/hessian用起来是超级简单的。至于为什么用dubbo/hessian,有几点:

  1. 调用简单,真正提供了类似于调用本地方法一样调用接口的功能 。
  2. 参数返回值简单明了 参数和返回值都是直接定义在jar包里的,不需要二次解析。
  3. 轻量,没有多余的信息。
  4. 便于管理,基于dubbo的注册中心。

四、RPC的特点

  1. RPC是协议。只是协议,而非实现。RPC实现包括:Dubbo、Thrift、GRPC、Hetty等。
  2. 网络协议和网络IO模型对其透明。RPC的客户端认为自己是在调用本地对象,因此其对使用的网络协议(HTTP协议等)以及网络IO模型,是不关心的。
  3. 信息格式对其透明。调用方法是需要传递参数的,对于远程调用来说,传递过程中参数的信息格式是怎样构成,以及提供者如何使用这些参数,都是不用关心的。
  4. 有跨语言能力。因为调用方实际上也不清楚远程服务器的应用程序是使用什么语言运行的。那么对于调用方来说,无论服务器方使用的是什么语言,本次调用都应该成功,并且返回值也应该按照调用方程序语言所能理解的形式进行描述。

五、常用的RPC框架

  1. Thrift:thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发,包括 C++, Java, Python等多种编程语言。
  2. Dubbo:Dubbo是一个分布式服务框架,以及SOA治理方案。其功能主要包括:高性能NIO通讯及多协议集成,服务动态寻址与路由,软负载均衡与容错,依赖分析与降级等。
  3. Spring Cloud:提供了搭建分布式系统及微服务常用的工具,满足了构建微服务所需的所有解决方案。
  4. gRPC: 一开始由 google 开发,是一款语言中立、平台中立、开源的远程过程调用(RPC)系统。

六、RPC接口与HTTP对比

  1. 传输协议。RPC:可以基于TCP协议,也可以基于HTTP协议;HTTP:基于HTTP协议。
  2. 传输效率。RPC:使用自定义的TCP协议,可以让请求报文体积更小,或者使用HTTP2协议,也可以很好的减少报文的体积,提高传输效率;HTTP:如果是基于HTTP1.1的协议,请求中会包含很多无用的内容,如果是基于HTTP2.0,那么简单的封装下是可以作为一个RPC来使用的。
  3. 性能消耗。RPC:可以基于thrift实现高效的二进制传输;HTTP:大部分是通过json来实现的,字节大小和序列化耗时都比thrift要更消耗性能。
  4. 负载均衡。RPC:基本都自带了负载均衡策略;HTTP:需要配置Nginx,HAProxy来实现。
  5. 服务治理。RPC:能做到自动通知,不影响上游;HTTP:需要事先通知,修改Nginx/HAProxy配置。

 

 RPC调用过程 :  https://www.cnblogs.com/FG123/p/10261676.html

 

 

 

 

人不知而不愠;不念旧恶,怨是用希。薄责于人,则远怨矣。
posted @ 2022-08-07 17:19  心如__止水  阅读(930)  评论(0编辑  收藏  举报