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

news2024/11/21 1:43:20

阅读导航

  • 引言
  • 一、理解项目功能
    • ⭕分布式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.coloradmin.cn/o/2213783.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python酷玩之旅_如何正确使用pipreqs完成依赖导出(解决UnicodeDecodeError)

导览 前言Q:如何正确使用pipreqs1. 安装库2. 命令详解2.1 options2.2 path 3. 实践与问题 结语系列回顾 前言 使用python开发的应用在迁移部署的时候,你一定会使用pipreqs(当然也有其他选择)吧?这是一款强大的依赖管理…

【STM32CubeMX开发】-2.1-TIM_生成一个定时器中断

目录 1 Tim定时器的时钟源 2 Tim定时器的配置 2.1 中断配置 3 生成代码 4 测试结果 结尾 1 Tim定时器的时钟源 TIM1的时钟来源自APB1 Timer clocks,时钟树上所有总线频率均设置为了STM32F0能达到的最高频率,此时APB1 Timer clocks 48MHz。 2 Tim…

pdf加密怎么弄?8款热门pdf加密工具大盘点,速来收藏!(2024)

在如今,分享pdf文件时确保敏感信息的安全显得尤为重要。如果没有适当的保护措施,这些文件可能会被不法人士访问,从而对您的数据和声誉造成风险。为了避免这种潜在的问题,在Windows操作系统上加密pdf文件就显得非常有必要。如果您不…

vue3 使用 Vue Router实现前端路由控制

vue3 使用 Vue Router实现前端路由控制 **在现代Web应用中,前端路由控制是非常重要的一部分。它可以帮助我们将不同的页面内容展示给用户,同时保持用户在浏览不同页面时的连贯性。本文将介绍如何使用Vue Router来实现前端路由控制。 首先,我…

在Oxygen编辑器中支持数学公式

在编写文档时,经常需要插入公式。虽然将公式作为图片插入到文档中是可以的,但这会使后续的修改变得非常不便。目前,MathML (Mathematical Markup Language) 和 LaTeX 是两种常用的数学公式描述语言,它们各自具有不同的特点和适用场…

Protobuf:消息更新

Protobuf:消息更新 更新字段保留字段未知字段option选项 在开发中,需要对产品进行版本迭代。迭代前后,类的成员可能就会有所改动,一旦类成员改动,那么老版本的对象,新版本可能就无法解析,此时就…

ubuntu中多cuda版本兼容问题

当ubuntu中已经有老版本的cuda时,按正常步骤直接下载新的cuda和cudnn,只需要注意在下载新的cuda版本时,出现“A symlink already exists at /usr/local/cuda. Update to this installation?”,选择“no”,之后按如下的…

【华为HCIP实战课程十二】OSPF网络中1类2类LSA SPF详解,网络工程师

一、OSPF 1类LSA详解 1、通告者(产生LSA的设备):任何一台设备都会产生1类LSA 2、通告的范围:区域内部 3、功能和内容:产生拓扑信息和路由信息 LSA是OSPF链路状态信息的载体 4、每台OSPF路由器使用一条Router-LSA描述本区域内的链路状态信息 Type :LSA类型,Router-L…

Java学习Day45:兰喜村(Redis)

1.redis概念 1.是什么 redis(c语言开发的高并发键值对数据库)是nosql的一种,是键值存储数据库; 其核心概念是三高:高并发,高可用性和高扩展性; 优点:快速存取高并发 缺点&#…

Echart自定义饼图

const chartOption computed(() > {return {//与容器边距// grid: {// left: 3%,// right: 4%,// bottom: 3%,// containLabel: true// },// 自定义鼠标悬浮显示内容tooltip: {trigger: item,formatter: function (params: any) {return ${params.value} 个},textS…

新手铲屎官提问,如何在双十一选到性价比高的宠物空气净化器

不知不觉就已经迎来了双十一,这一年即将到头了,意味着我养猫已经是第五个年头了。 当初养猫的时候,就看中了长毛类型的猫,因为感觉摸起来会更舒服,美型到舒服确实是舒服了,但是面临的挑战也不少。其中浮毛…

电脑显示d3dcompiler_47.dll缺失如何修复,马上教你6个修复方法

在用电脑的时候,很多人就遇到过一个叫“计算机缺失d3dcompiler47.dll”的错误提示。在详细解读计算机缺失d3dcompiler_47.dll问题时,我们首先需要了解这个文件的作用,以及缺失d3dcompiler_47.dll对系统的影响和解决方法。 一,d3dc…

『网络游戏』数据库增加主角属性【27】

打开数据库设计表 添加字段 修改服务器脚本:GameMsg.cs 修改服务器脚本:DBMgr.cs 运行服务端 运行客户端 - 点击创建角色进入游戏后左上角的主角UI被打开暂未设计 刷新查看数据库信息 本章结束

VHDL基本结构和逻辑示例

VHDL基本结构和逻辑示例 1.VHDL的基本结构 VHDL的基本结构包含了三段: -- library and package -- entity -- architecturelibrary and package:相关库和软件包(相当与c语言的头文件) entity:实体(描述输…

三、Anaconda 的使用

Anaconda 的使用 前言一、Anaconda 环境使用1.1 虚拟环境操作1.2 使用镜像源 二、PyCharm配置Anaconda环境2.1 第一步2.2 第二步2.3 第三步2.4 第四步2.5 第五步2.6 第六步2.7 第七步2.8 第八步 总结 前言 如果在一个环境中,我们做了多个项目的话,那么后…

SHAP 依赖图

SHAP 依赖图 SHAP 依赖图用于可视化单个特征对机器学习模型预测结果的影响,具体来说,x 轴是特征值,y 轴是 SHAP 值(度量特征对预测结果的重要性),这些图可以直观地显示出某个特征是对模型预测起正向还是负…

web前端-----html5----用户注册

以改图为例 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>用户注册</title> </hea…

计算机网络:数据链路层 —— 扩展共享式以太网

文章目录 共享式以太网共享式以太网存在的问题在物理层扩展以太网扩展站点与集线器之间的距离扩展共享式以太网的覆盖范围和站点数量 在链路层扩展以太网网桥的主要结构网桥的基本工作原理透明网桥自学习和转发帧生成树协议STP 共享式以太网 共享式以太网是当今局域网中广泛采…

uni-app基础语法(一)

我们今天的学习目标 基础语法1. 创建新页面2.pages配置页面3.tabbar配置4.condition 启动模式配置 基础语法 1. 创建新页面 2.pages配置页面 属性类型默认值描述pathString配置页面路径styleObject配置页面窗口表现&#xff0c;配置项参考pageStyle 我们来通过style修改页面的…

CASA(Carnegie-Ames-Stanford Approach) 模型原理及实践技术

植被作为陆地生态系统的重要组成部分对于生态环境功能的维持具有关键作用。植被净初级生产力&#xff08;Net Primary Productivity, NPP&#xff09;是指单位面积上绿色植被在单位时间内由光合作用生产的有机质总量扣除自养呼吸的剩余部分。植被NPP是表征陆地生态系统功能及可…