rpc:远程过程调用 · 物联网平台-威尼斯人最新

lifeontrip · 2020年03月19日 · 最后由 回复于 2022年08月19日 · 537 次阅读

rpc 即 remote procedure call,是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想。

rpc 架构

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

rpc 核心功能

一个 rpc 的核心功能主要有由客户端、客户端 stub、网络传输模块、服务端 stub、服务端 5 个部分组成。

  • 客户端 (client):服务调用方。
  • 客户端存根 (client stub):存放服务端地址信息,将客户端的请求参数数据信息打包成网络消息,再通过网络传输发送给服务端。
  • 服务端存根 (server stub):接收客户端发送过来的请求消息并进行解包,然后再调用本地服务进行处理。
  • 服务端 (server):服务的真正提供者。
  • network service:底层传输,可以是 tcp 或 http。

rpc 功能实现

服务寻址

在 rpc 中,所有的函数都必须有自己的一个 id 并且在客户端和服务端分别维护一张函数和 call id 的映射表,这样在客户端和服务端的进程中 call id 才是一致的的。

客户端在做远程过程调用时,必须附上这个 id。当客户端需要进行远程调用时,它就查一下这个表,找出相应的 call id,然后把它传给服务端,服务端也通过查表,来确定客户端需要调用的函数,然后执行相应函数的代码。

数据流的序列化和反序列化

网络协议只能传输二进制数据,所以我们需要客户端把参数先转成一个字节流,传给服务端后,再把字节流转成自己能读取的格式。

网络传输

在 rpc 中可选的网络传输方式有多种,可以选择 tcp 协议、udp 协议、http 协议。每一种协议对整体的性能和效率都有不同的影响,如何选择一个正确的网络传输协议呢?首先要搞明白各种传输协议在 rpc 中的工作方式。

1.基于 tcp 协议的 rpc 调用

由服务的调用方与服务的提供方建立 socket 连接,并由服务的调用方通过 socket 将需要调用的接口名称、方法名称和参数序列化后传递给服务的提供方,服务的提供方反序列化后再利用反射调用相关的方法 *** 将结果返回给服务的调用方,整个基于 tcp 协议的 rpc 调用大致如此。但是在实例应用中则会进行一系列的封装,如 rmi 便是在 tcp 协议上传递可序列化的 java 对象。

2.基于 http 协议的 rpc 调用

该方法更像是访问网页一样,只是它的返回结果更加单一简单。

其大致流程为:由服务的调用者向服务的提供者发送请求(get、post、put、delete 等中的一种),服务的提供者根据 url 进行方法调用,而方法所需要的参数可能是对服务调用方传输过去的 xml 数据或者 json 数据解析后的结果,最终返回 josn 或者 xml 的数据结果。

常见 rpc 技术和框架

  • 应用级的服务框架:阿里的 dubbo/dubbox、google grpc、spring boot/spring cloud、facebook thrift、twitter finagle 。
  • 远程通信协议:rmi、socket、soap(http xml)、rest(http json)。
  • 通信框架:mina 和 netty。
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册
网站地图