Rpc分布式网络通信框架(1)

理论准备

单机聊天服务器的缺点 :

  • 受限于硬件资源, 并发量有限制 -> 集群服务器解决
  • 任意模块的修改都会导致整体的编译部署 -> 分布式解决
  • 有些模块是CPU密集型, 有些是IO密集型, 对硬件资源不一样 -> 分布式解决

集群与分布式 :

  • 集群 : 每个里面都运行了一个独立系统, 有全套的服务.
  • 分布式 : 将不同服务搭载在不同的服务器上, 还可以对单个分布式节点集群.

分布式面临问题 :

  • 模块如何划分?
  • 各模块之间如何访问? -> 涉及网络传输

RPC(remote procedure call 远程过程调用)通信原理

  • 将请求序列化, 经由服务发现将请求通过网络发送到目标服务器, 对端接收并反序列化, 调用目标函数并返回, 返回也要经历上述过程.

RPC分布式网络通信框架

这只是一个框架, 可以帮助我们将自己的服务发布为rpc节点, 或帮助我们调用其他发布者发布的rpc节点中的方法, 接下来让我们深入了解.

服务与方法

这只是一个标准的概念, 服务包含方法, 一个服务可以有很多方法, 一个方法就对应一个函数, 其实服务就是起到一个分类的作用, 在rpc中通常以此作为分类标准.

具体框架

  • 假如我们要调用一个远程服务, 也就是调用一个远程服务器上的函数并将参数传入, 获取该函数返回的内容, 在这之中函数发布者和函数调用者都会有一些特定的操作.

  • Provider(发布者)

    将自己想发布的方法包装进服务中, 发布该服务, 意味着自己作为服务器持续接收远端通过网络发送来的调用请求, 接收请求的处理逻辑如下 :

    • 利用muduo库进行网络消息的接收 -> 反序列化取出请求的服务/方法/参数 -> 调用对应函数并产生返回值 -> 将返回值序列化 -> 通过muduo库将返回值发送回去
  • Consumer(调用者)

    只要知道了发布rpc服务节点的地址, 就可以通过接近普通方法的调用方式调用到远程方法.

    • 直接获知目标rpc的地址或通过服务发现获取地址 -> 将服务/方法/参数序列化发送给目标地址 -> 等待接收返回值并反序列化.

这其中我们有两大工具必不可少 :

  • Protobuf

    类似于json用于网络通信的序列化和反序列化的工具, 不过其支持对rpc服务的序列化和反序列化, 可以使框架的构建更加简便.

  • Zookeeper

    服务发现工具, 帮助客户端找到目标服务方法的地址.

Zookeeper分布式协调服务

服务发现 / 分布式锁

一个注册中心, 保存了所有可获得的服务和其对应的URL(ip / port).

znode节点

zookeeper服务专属的数据存储节点, 类似一个树, 用来存储服务, 一个节点最多存储1兆数据

Watcher

在节点变化时使用Watcher的客户端会得到通知.


Rpc分布式网络通信框架(1)
http://example.com/2025/04/27/Rpc分布式网络通信框架(1)/
作者
天目中云
发布于
2025年4月27日
许可协议