RPC协议学习指南

什么是RPC?

RPC(Remote Procedure Call),即远程过程调用它允许像调用本地服务一样调用远程服务。而无需了解网络的细节(不需要直接处理Socket通讯或Http通讯)。

RPC是一种服务器-客户端(Client/Server)模式,经典实现是一个请求响应模型。客户端发起请求,服务器返回响应。

RPC可以分为两部分:用户调用接口 + 具体网络协议。前者为开发者需要关心的,后者由框架来实现。

大白话理解RPC就是:RPC让你用别人家的东西就像自己家的一样。

RPC 是1984年由 Andrew D. Birrell & Bruce Jay Nelson 提出的(二位大佬的论文《Implementing Remote Procedure Calls》),目的就是让分布式系统更加简单,让开发人员把精力放到业务上,并且提供高效安全的通信。

RFC:1831 RFC:5531 RPC: Remote Procedure Call Protocol Specification Version 2

RPC的优缺点

优点:

  • 帮助客户端通过高级语言中的传统过程调用与服务器通信。

  • 可在分布式环境和本地环境中使用。

  • 支持面向进程和面向线程的模型。

  • 隐藏了用户对内部消息传递机制的了解。

  • 重新编写和重新开发代码所需的工作量很小。

  • 提供抽象,即网络通信的消息传递性质对用户而言是隐藏的。

  • 省略了许多协议层以提高性能。

  • 提升系统高可用,可扩展性、可维护性和持续交付能力。

缺点:

  • 客户端和服务器使用不同的执行环境进行各自的例程,资源的使用更加复杂,因此RPC系统并不总是适用于大量数据的传输。

  • 由于涉及通信系统、另一台机器和另一个进程,RPC非常容易出现故障。

  • RPC没有统一的标准,可以以多种方式实现。

  • RPC只是基于交互的,因此在硬件架构方面缺乏灵活性。

RPC典型系统架构及应用场景

在一个典型 RPC 的使用场景中,包含了服务发现、负载、容错、网络传输、序列化等组件,其中“RPC协议”就指明了程序如何进行网络传输和序列化。

RPC协议学习指南

RPC的主要使用场景:

RPC 主要用于公司内部的服务调用(准确地说是大型系统内部各模块、子系统间的调用,而不是提供给外界调用),性能消耗低,传输效率高,实现复杂。

相对而言,HTTP 主要用于对外的异构环境,比如:浏览器接口调用、App 接口调用、第三方接口调用等。
RPC 的主要使用场景尤其是大型的网站的情况下,内部子系统较多、接口非常多的情况下适合使用 RPC。

RPC 的使用场景一般来说有以下特点:

1)长链接:不必每次通信都要像 HTTP 一样去 3 次握手,减少了网络开销;

2)注册发布机制:RPC 框架一般都有注册中心,有丰富的监控管理;发布、下线接口、动态扩展等,对调用方来说是无感知、统一化的操作;

3)安全性:没有暴露资源操作;

4)微服务支持:就是最近流行的服务化架构、服务化治理,RPC 框架是一个强力的支撑。

常见 RPC 技术和框架:

1)应用级的服务框架:阿里的 Dubbo/Dubbox、Google gRPC、Spring Boot/Spring Cloud。

2)远程通信协议:RMI、Socket、SOAP(HTTP XML)、REST(HTTP JSON)。

3)通信框架:MINA 和 Netty。

目前流行的开源 RPC 框架还是比较多的,有阿里巴巴的 Dubbo、Facebook 的 Thrift、Google 的 gRPC、Twitter 的 Finagle 等。

当前最流行的三种RPC框架主要特点:

1)gRPC:是 Google 公布的开源软件,基于最新的 HTTP 2.0 协议,并支持常见的众多编程语言。RPC 框架是基于 HTTP 协议实现的,底层使用到了 Netty 框架的支持;

2)Thrift:是 Facebook 的开源 RPC 框架,主要是一个跨语言的服务开发框架。用户只要在其之上进行二次开发就行,应用对于底层的 RPC 通讯等都是透明的。不过这个对于用户来说需要学习特定领域语言这个特性,还是有一定成本的;

3)Dubbo:是阿里集团开源的一个极为出名的 RPC 框架,在很多互联网公司和企业应用中广泛使用。协议和序列化框架都可以插拔是极其鲜明的特色。

RPC原理

一个 RPC 的核心功能主要有 5 个部分组成,分别是:客户端、客户端 Stub、网络传输模块、服务端 Stub、服务端等。

RPC协议学习指南

1)客户端(Client):服务调用方;

2)客户端存根(Client Stub):存放服务端地址信息,将客户端的请求参数数据信息打包成网络消息,再通过网络传输发送给服务端;

3)服务端存根(Server Stub):接收客户端发送过来的请求消息并进行解包,然后再调用本地服务进行处理;

4)服务端(Server):服务的真正提供者;

5)Network Service:底层传输,可以是 TCP 或 HTTP。

RPC调用过程:

① 服务调用方(client)以本地调用方式调用服务;

② client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体;

③ client stub找到服务地址,并将消息发送到服务端;

④ server 端接收到消息;

⑤ server stub收到消息后进行解码;

⑥ server stub根据解码结果调用本地的服务;

⑦ 本地服务执行并将结果返回给server stub;

⑧ server stub将返回结果打包成能够进行网络传输的消息体;

⑨ 按地址将消息发送至调用方;

⑩ client 端接收到消息;

⑪ client stub收到消息并进行解码;

⑫ 调用方得到最终结果。

RPC的生命周期

RPC协议学习指南

RPC学习指南

图文整理自网络

anzhihe 安志合个人博客,版权所有 丨 如未注明,均为原创 丨 转载请注明转自:https://chegva.com/6016.html | ☆★★每天进步一点点,加油!★★☆ | 

您可能还感兴趣的文章!

发表评论

电子邮件地址不会被公开。 必填项已用*标注