当前位置: 首页 > news >正文

Json-Rpc框架(项目设计 —— 服务端客户端 模块功能划分简介)

阅读导航

  • 引言
  • 一、理解项目功能
    • ⭕分布式RPC服务发现/注册/订阅/创建 结构图
    • ⭕项目三大核心功能
  • 二、服务端模块划分简介
  • 三、客户端模块划分简介

引言

在上一篇文章中,我们深入探讨了Json-Rpc框架中不可或缺的序列化与反序列化利器——JsonCpp库。

在本篇文章中,我们将深入剖析Json-Rpc框架中服务端与客户端的模块划分策略,我们将从服务端的功能定位,到客户端的请求发送、响应处理,揭示每个模块背后的设计思路与技术实现。通过这一系列的探讨,我期望能为读者呈现一个清晰、完整且高效的Json-Rpc框架设计蓝图,为实际项目中的RPC应用提供有力参考。

一、理解项目功能

从本质上来说,RPC(远程过程调用)的概念相当直接且简洁。其核心思想在于,当客户端需要执行某个任务处理时,并不直接在本地完成这些处理过程,而是将请求发送给远程的服务器。服务器随后会负责完成这些处理任务,并将结果返回给客户端。客户端接收到结果后,便可以继续其后续操作。
在这里插入图片描述
尽管上图中的RPC模型通常表现为多对一或一对一的关系,这种架构在面对服务端故障时会导致客户端无法进行远程调用,同时服务端的负载也可能迅速攀升。为了克服这些局限性,RPC实现需要进一步演进,引入分布式架构以提升系统的可靠性和性能

📦分布式架构:是一个由多个节点(通常是服务器)协同工作的系统。通过将不同的业务逻辑或同一业务的不同部分分布在不同的节点上,系统能够有效应对高并发访问,显著提高扩展性和可用性。

🎯分布式RPC的实现分布式RPC的关键在于在原有模型基础上增加注册中心这一核心组件。在这一架构中,各个服务提供服务器会向注册中心进行服务注册,明确告知其可提供的服务类型。而客户端在发起远程调用之前,会先通过注册中心进行服务发现,查找并连接到能够提供所需服务的服务器,从而确保请求的正确路由和高效处理

⭕分布式RPC服务发现/注册/订阅/创建 结构图

在这里插入图片描述
在优化后的分布式RPC架构中,我们设计每个Server节点兼任备用注册中心的角色,以增强系统的健壮性。这样,即便某个注册中心出现故障下线,其他备用中心仍能继续处理服务的注册与请求,确保系统不间断运行。此外,由于客户端在请求RPC服务时拥有多个RPC提供者(rpc-provider)作为选择,因此可以轻松地实现负载均衡策略,优化资源利用和响应速度。同时,基于这一注册中心架构,我们可以更加便捷地实现服务的发布/订阅功能,为系统增加实时通信和事件驱动的能力。

⭕项目三大核心功能

该项目的三大核心功能包括:

  1. 基本RPC远程调用服务:实现远程过程调用的基本功能,支持客户端与服务器之间的高效通信。
  2. 服务的注册、发现与状态变更(服务下线/上线)通知服务:管理服务的注册与发现流程,及时通知服务的上线、下线状态变更,确保系统资源的动态调整和服务的可用性。
  3. 消息的发布订阅服务:构建基于注册中心的发布/订阅系统,支持事件驱动的通信模式,增强系统间的解耦与协作能力。

二、服务端模块划分简介

服务端的功能需求明确且多样化,涵盖了网络通信、RPC服务提供、服务注册与发现、以及消息的发布订阅等多个方面。基于这些功能需求,服务端可以合理地划分为以下几个核心模块:

  1. Network模块:负责网络通信的底层实现,包括监听客户端的连接请求、数据的接收与发送等,确保服务端与客户端之间的稳定通信。

  2. Protocol模块:定义并实现应用层的通信协议,该模块负责解析和封装网络传输中的数据,确保数据的正确性和完整性,同时提供统一的接口供上层模块调用。

  3. Dispatcher模块:作为消息分发处理中心,该模块接收来自Network模块的数据,并根据协议解析结果,将请求分发到相应的处理模块。它负责请求的路由和分发逻辑,确保每个请求都能被正确处理。

  4. RpcRouter模块:专注于RPC(远程过程调用)的路由功能,该模块接收 Dispatcher`模块分发的RPC请求,根据服务名、方法名等信息,找到对应的RPC服务提供者,并转发请求。同时,它还负责处理RPC调用的结果返回给客户端。

  5. Publish-Subscribe模块:实现消息的发布订阅功能,包括主题的创建、删除、订阅和取消订阅操作,以及消息的发布和分发。该模块允许客户端订阅感兴趣的主题,并在有消息发布时,将消息推送给所有订阅了该主题的客户端。

  6. Registry-Discovery模块:负责服务的注册、发现、上线和下线管理。该模块维护一个服务注册表,记录所有在线服务的信息。客户端可以通过该模块查询所需服务的信息,实现服务的动态发现和调用。同时,服务提供者也可以在该模块中注册和注销自己的服务。

  7. Server模块:作为服务端的整合模块,它基于以上各个模块构建而成,提供统一的服务端接口和启动逻辑。Server模块负责初始化各个子模块,并协调它们之间的协作,确保服务端能够正常运行并提供所需的服务。

三、客户端模块划分简介

在客户端的模块划分中,为了高效实现与服务端的交互及满足各种功能需求,我们可以将客户端系统划分为以下几个核心模块:

  1. Network模块:作为网络通信的基础模块,负责客户端的网络连接管理,包括建立连接、发送请求、接收响应等操作,确保客户端能够稳定地与服务端进行通信。

  2. Protocol模块:负责定义和实现应用层的通信协议,确保客户端与服务端之间能够正确解析和封装传输的数据,保证通信的准确性和高效性。

  3. Dispatcher模块:负责接收来自网络模块的数据,并根据协议解析结果,将消息分发到相应的处理模块。该模块是客户端内部消息流转的关键,确保消息能够被正确处理和响应。

  4. Requestor模块:专门用于管理客户端的请求,包括请求的创建、发送、状态跟踪和结果回收。它提供了统一的接口供上层调用,简化了请求流程的管理。

  5. RpcCaller模块:专注于实现远程过程调用的功能,封装了RPC调用的细节,客户端可以采用三种方式调用分别是:同步调⽤、异步调⽤、回调调⽤。

  6. Publish-Subscribe模块:实现消息的发布订阅机制,允许客户端订阅感兴趣的主题,并在收到对应消息时进行处理。该模块增强了客户端与服务端及其他客户端之间的实时通信能力。

  7. Registry-Discovery模块:负责服务的注册、发现、上线和下线信息的查询。客户端通过该模块可以获取到所需服务的位置信息,实现服务的动态发现和调用。

  8. Client模块:作为客户端的整合模块,它基于以上各个模块构建而成,提供了统一的客户端接口和启动逻辑。Client模块负责初始化各个子模块,并协调它们之间的协作,确保客户端能够正常运行并满足业务需求。


http://www.mrgr.cn/news/47654.html

相关文章:

  • 51单片机——中断(重点)
  • 工厂人员定位管理系统方案(二)人员精确定位系统架构设计,适用于工厂智能管理
  • ASICS亚瑟士开启“好动好生动”全球品牌主题活动
  • 转运机器人在物流仓储行业的优势特点
  • 2025年华为OD上机考试真题(Java)——整数对最小和
  • Redis 优化秒杀(异步秒杀)
  • OpenAI元老级人物Luke Metz官宣离职
  • python - 获取文件的创建/修改时间
  • 【Linux 从基础到进阶】防御DDoS攻击的策略与工具
  • 四大.NET ORM框架深度对比:EF Core、SqlSugar、FreeSql与Dapper的性能、功能与适用场景
  • 基于Springboot+Vue的线上一流课程教学辅助系统 (含源码数据库)
  • PMP--冲刺题--解题--121-130
  • 性能测试流程规范测试准备阶段
  • 《Windows PE》5.3 导出表应用
  • js 条件判断语句
  • 【动态规划】状态 dp
  • 准备进入AI第三阶段:OpenAI推出AI Agent基准MLE-bench!
  • leetcode hot100_part03_滑动窗口
  • 塔吊识别数据集 yolo格式 共5076张图片 已划分好训练验证 txt格式 yolo可直接使用
  • PMP--冲刺题--解题--101-110
  • Python酷库之旅-第三方库Pandas(143)
  • 浏览器内置文字转语音,播报功能Web Speech API - SpeechSynthesisUtterance
  • Paperless-ngx文档管理系统本地部署并实现远程使用搜索查阅文件
  • QFocusFrame Class
  • 【C# 网络编程】基本概念
  • 【MySQL】入门篇—数据库基础:关系数据库概念