什么是 RPC?RPC原理是什么?

什么是 RPC?

RPC(Remote Procedure Call)—近程过程调用,它是一种通过网络从近程计算机程序上申请服务,而不须要理解底层网络技术的协定。比方两个不同的服务 A、B 部署在两台不同的机器上,那么服务 A 如果想要调用服务 B 中的某个办法该怎么办呢?应用 HTTP申请 当然能够,然而可能会比较慢而且一些优化做的并不好。 RPC 的呈现就是为了解决这个问题。

RPC原理是什么?

我这里这是简略的提一下,具体内容能够查看上面这篇文章:

http://www.importnew.com/22003.html

  1. 服务生产方(client)调用以本地调用形式调用服务;
  2. client stub接管到调用后负责将办法、参数等组装成可能进行网络传输的音讯体;
  3. client stub找到服务地址,并将音讯发送到服务端;
  4. server stub收到音讯后进行解码;
  5. server stub依据解码后果调用本地的服务;
  6. 本地服务执行并将后果返回给server stub;
  7. server stub将返回后果打包成音讯并发送至生产方;
  8. client stub接管到音讯,并进行解码;
  9. 服务生产方失去最终后果。

上面再贴一个网上的时序图:

RPC 解决了什么问题?

从上面对 RPC 介绍的内容中,概括来讲RPC 次要解决了:让分布式或者微服务零碎中不同服务之间的调用像本地调用一样简略。

常见的 RPC 框架总结?

  • RMI(JDK自带): JDK自带的RPC,有很多局限性,不举荐应用。
  • Dubbo: Dubbo是 阿里巴巴公司开源的一个高性能优良的服务框架,使得利用可通过高性能的 RPC 实现服务的输入和输出性能,能够和 Spring框架无缝集成。目前 Dubbo 曾经成为 Spring Cloud Alibaba 中的官网组件。
  • gRPC :gRPC是能够在任何环境中运行的古代开源高性能RPC框架。它能够通过可插拔的反对来无效地连贯数据中心内和跨数据中心的服务,以实现负载平衡,跟踪,运行状况检查和身份验证。它也实用于分布式计算的最初一英里,以将设施,挪动应用程序和浏览器连贯到后端服务。
  • Hessian: Hessian是一个轻量级的remotingonhttp工具,应用简略的办法提供了RMI的性能。 相比WebService,Hessian更简略、快捷。采纳的是二进制RPC协定,因为采纳的是二进制协定,所以它很适宜于发送二进制数据。
  • Thrift: Apache Thrift是Facebook开源的跨语言的RPC通信框架,目前曾经募捐给Apache基金会治理,因为其跨语言个性和杰出的性能,在很多互联网公司失去利用,有能力的公司甚至会基于thrift研发一套分布式服务框架,减少诸如服务注册、服务发现等性能。

既有 HTTP ,为啥用 RPC 进行服务调用?

RPC 只是一种设计而已

RPC 只是一种概念、一种设计,就是为了解决 不同服务之间的调用问题, 它个别会蕴含有 传输协定 和 序列化协定 这两个。

然而,HTTP 是一种协定,RPC框架能够应用 HTTP协定作为传输协定或者间接应用TCP作为传输协定,应用不同的协定个别也是为了适应不同的场景。

HTTP 和 TCP

可能当初很多对计算机网络不太熟悉的敌人曾经被搞蒙了,要想真正搞懂,还须要来简略温习一下计算机网络基础知识:

咱们通常谈计算机网络的五层协定的体系结构是指:应用层、传输层、网络层、数据链路层、物理层。

应用层(application-layer)的工作是通过利用过程间的交互来实现特定网络应用。HTTP 属于应用层协定,它会基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查问后果等)。HTTP协定工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过 URL 向HTTP服务端即WEB服务器发送所有申请。Web服务器依据接管到的申请后,向客户端发送响应信息。HTTP协定建设在 TCP 协定之上。

运输层(transport layer)的次要工作就是负责向两台主机过程之间的通信提供通用的数据传输服务。TCP是传输层协定,次要解决数据如何在网络中传输。相比于UDP,TCP 提供的是面向连贯的,牢靠的数据传输服务。

RPC框架性能更齐全

成熟的 RPC框架还提供好了“服务主动注册与发现”、"智能负载平衡"、“可视化的服务治理和运维”、“运行期流量调度”等等性能,这些也算是抉择 RPC 进行服务注册和发现的一方面起因吧!

相干浏览:

  • HTTP 协定入门 (阮一峰)

一个常见的错误观点

很多文章中还会提到说 HTTP 协定相较于自定义 TCP 报文协定,减少的开销在于连贯的建设与断开,然而这个观点曾经被否定,上面截取自知乎中一个答复,原答复地址:既然有 HTTP 申请,为什么还要用 RPC 调用?

首先要否定一点 HTTP 协定相较于自定义 TCP 报文协定,减少的开销在于连贯的建设与断开。HTTP 协定是反对连接池复用的,也就是建设肯定数量的连接不断开,并不会频繁的创立和销毁连贯。二一要说的是 HTTP 也能够应用 Protobuf 这种二进制编码协定对内容进行编码,因而二者最大的区别还是在传输协定上。