RPC

一. RPC 技术和框架有:

  • 应用级的服务框架:阿里的 Dubbo/Dubbox、Google gRPC、Spring Boot/Spring Cloud。
  • 远程通信协议:RMI、Socket、SOAP(HTTP XML)、REST(HTTP JSON)。
  • 通信框架:MINA 和 Netty

二. RPC 核心功能:

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

三. RPC 调用流程:

  • 服务消费者(Client 客户端)通过本地调用的方式调用服务。
  • 客户端存根(Client Stub)接收到调用请求后负责将方法、入参等信息序列化(组装)成能够进行网络传输的消息体。
  • 客户端存根(Client Stub)找到远程的服务地址,并且将消息通过网络发送给服务端。
  • 服务端存根(Server Stub)收到消息后进行解码(反序列化操作)。
  • 服务端存根(Server Stub)根据解码结果调用本地的服务进行相关处理
  • 服务端(Server)本地服务业务处理。
  • 处理结果返回给服务端存根(Server Stub)。
  • 服务端存根(Server Stub)序列化结果。
  • 服务端存根(Server Stub)将结果通过网络发送至消费方。
  • 客户端存根(Client Stub)接收到消息,并进行解码(反序列化)。
  • 服务消费方得到最终结果。

四. RPC 核心之功能实现:

  1. 服务寻址
  2. 数据流的序列化和反序列化
  3. 网络传输
  • RPC 框架实现
  1. Call ID 映射:可以直接使用函数字符串,也可以使用整数 ID。映射表一般就是一个哈希表。
  2. 序列化反序列化:可以自己写,也可以使用 Protobuf 或者 FlatBuffers 之类的。
  3. 网络传输库:可以自己写 Socket,或者用 Asio,ZeroMQ,Netty 之类。

五. RPC 核心之网络传输协议:

  • 基于 TCP 协议的 RPC 调用
  • 基于 HTTP 协议的 RPC 调

六. 使用 RabbitMQ 的 RPC 架构:

七. 简单对比 RPC 和 Restful API

 

### 关于RPC(远程过程调用) #### 定义与基本概念 远程过程调用是一种让客户端应用程序能够透明地调用服务器端子程序的技术,使得开发人员无需关注底层通信细节。通过这种方式,在不同计算机上的进程之间可以像在同一地址空间内一样相互协作[^3]。 #### 协议基础 为了使这种跨机器的过程调用成为可能,RPC依赖某些传输层协议来建立可靠的双向通讯链路。虽然最初的设计大多基于TCP/IP栈中的可靠流导向型服务——即面向连接的TCP协议;但也存在利用无连接的数据报UDP的情况,以及更复杂的场景下采用如VMTP这样的特殊目的协议来进行查询应答操作[^1]。 #### HTTP作为潜在载体 值得注意的是,随着Web的发展及其广泛应用,超文本传输协议(HTTP),作为一个运行在TCP之上的应用层协议,也被用来承载部分形式的RPC交互。尽管HTTP并非专门为RPC设计,但由于其简单性和普遍接受度,特别是在互联网环境中,它成为了RESTful风格API背后的事实标准之一[^2]。 #### 高性能计算环境下的挑战与发展 然而,在高性能计算(HPC)领域,传统的RPC框架面临着新的难题。由于这类系统往往配备有定制化的高速互连硬件,并且对于低延迟和高吞吐量有着严格的要求,因此传统基于套接字编程模型构建起来的标准库难以充分发挥潜力。为此,研究者们正在探索更加贴合实际需求的新一代解决方案,比如引入异步I/O模式和支持大容量数据集高效传递的能力,旨在克服现有局限性的同时保持良好的可移植性和灵活性。 ```python import xmlrpc.client def rpc_call(): proxy = xmlrpc.client.ServerProxy("http://localhost:8000/") result = proxy.add(7, 9) print(f"The sum is {result}") ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值