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.xdnf.cn/news/1560625.html

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

相关文章

Github 2024-10-11 Java开源项目日报 Top9

根据Github Trendings的统计,今日(2024-10-11统计)共有9个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目9TypeScript项目1Vue项目1C++项目1JeecgBoot 企业级低代码开发平台 创建周期:2062 天开发语言:Java, Vue协议类型:Apache License 2.…

性能测试流程规范测试准备阶段

目录 1.目的 2.工作内容 3.材料 1)《性能测试脚本规范》。 2)《性能测试参数文件检查备份指南》。 3)《性能测试资源监控操作指南》。 4)《脚本开发参数化》。 5)《脚本开发异常捕获处理》。 6)测试脚本文件。 7)模拟器代码文件。 8)生产环境参数配置文件。 9)《XX…

解决 IntelliJ IDEA 运行时 “Command line is too long“ 问题

文章目录 文章标题:解决 IntelliJ IDEA 运行时 "Command line is too long" 问题简介问题描述解决方案代码示例代码示例1:使用JAR Manifest代码示例2:使用Classpath File代码示例3:优化项目依赖 结论进一步的资源 文章标…

【C++入门篇 - 1】:C++编程等演示环境介绍

文章目录 C编程等演示环境介绍VS2022的下载创建项目运行一个基本程序 Visual Studio中程序的调试方法普通的断点调试调试时查看内存中的内容调试中查看反汇编窗口 开启isual Studio 2019对C最新标准的编译支持 C编程等演示环境介绍 VS2022的下载 官网:VS下载官网 …

ProtoBuf 安装

一、ProtoBuf 在 window 下的安装 1.1、下载 ProtoBuf 编译器 下载地址:https://github.com/protocolbuffers/protobuf/releases 可以不⽤下载最新版本,具体的下载根据电脑情况选择。 下载之后将压缩包解压到本地⽬录下。解压后的⽂件内包含 bin、in…

利用网络流量分析仪进行网络故障排除:提升IT运维效率的关键工具

目录 一、什么是网络流量分析仪? 主要功能: 二、为什么网络流量分析仪在网络故障排除中如此重要? 三、实际案例:使用网络流量分析仪快速排查网络故障 案例一:流量拥塞导致的带宽不足 案例二:服务器响…

【Kubernets】容器网络基础二:通讲CNI(Container Network Interface)容器网络接口实现方案

文章目录 背景知识Underlay网络Overlay网络一、基本概念二、工作原理三、实现方案四、应用场景 两者对比示意图 CNI实现有哪些?FlannelFlannel 的工作原理Flannel 的主要组件数据传输机制总结 Calico一、架构基础二、核心组件与功能三、路由与数据包转发四、安全策略…

精华版80页PPT | 智能工厂数字化顶层架构

项目背景及需求理解 随着科技的飞速发展,智能工厂的概念逐渐从理论走向实践,成为制造业转型升级的重要方向。方案对智能工厂数字化顶层架构进行全面介绍。在当前的市场环境下,消费者需求日益多样化、个性化,对产品质量、价格、环…

PMP--冲刺题--解题--121-130

文章目录 9.资源管理--1.规划资源管理--可以直接使用排除法,A和C的做法都是逃避了组织和参与这个会议,D组织多次会议的做法明显不够高效。121、 [单选] 项目经理被指派与技术和运营团队一起负责现有产品新版本的设计。项目经理组织一次联合需求会议&…

【拥抱AIGC】应该如何衡量AI辅助编程带来的收益

本文主要介绍了如何度量研发效能,以及AI辅助编程是如何影响效能的,进而阐述如何衡量AI辅助编程带来的收益。 理解度量:有效区分度量指标 为了帮助研发团队更好地理解和度量研发效能,可以将指标分为三类:能力和行为指…

【C++入门篇 - 3】:从C到C++第二篇

文章目录 从C到C第二篇new和delete命名空间命名空间的访问 cin和coutstring的基本使用 从C到C第二篇 new和delete 在C中用来向系统申请堆区的内存空间 New的作用相当于C语言中的malloc Delete的作用相当于C语言中的free 注意:在C语言中,如果内存不够…

【数学分析笔记】第5章第1节 微分中值定理(1)

5. 微分中值定理及其应用 5.1 微分中值定理 5.1.1 极值与极值点 【定义5.1.1】 f ( x ) f(x) f(x)定义域为 ( a , b ) (a,b) (a,b), x 0 ∈ ( a , b ) x_0\in(a,b) x0​∈(a,b),若 ∃ O ( x 0 , ρ ) ⊂ ( a , b ) \exists O(x_0,\rho)\subset(a,b) ∃…

web基础-攻防世界

get-post 一、WP (题目本质:get与post传参方法) 用 GET 给后端传参的方法是:在?后跟变量名字,不同的变量之间用&隔开。例如,在 url 后添加/?a1 即可发送 get 请求。 利用 hackbar 进行…

岩石分类检测数据集 4700张 岩石检测 带标注 voc yolo 9类

岩石分类检测数据集 4700张 岩石检测 带标注 voc yolo 9类 岩石分类检测数据集 (Rock Classification and Detection Dataset) 描述: 本数据集旨在支持对不同类型的岩石进行自动分类和检测,特别适用于地质勘探、矿物识别、环境监测等领域。通过使用该数据集训练的模…

Python画图|多图共享X轴和Y轴

【1】引言 在python画图的众多场景中,存在多图对应X轴和Y轴可能一致的情形。 为此,尝试找到相关方法,不仅可以将代码写得更简洁,也更节省电脑内存,是提升工作效率的可选之路。 【2】官网教程 点击下方链接&#xf…

制造已然走出国门,数据如何走向全球?

1 行业趋势和背景 1.1 海外全球化——由中国制造到中国品牌全球造的全球化布局 为实现资源的最优配置、效率的最大化,现在越来越多的制造业企业,凭借着自己的品牌力和技术能力,进行全球化布局,加速从原来的“中国制造”到“中国…

EISS_2024企业信息安全峰会:《货拉拉信息安全实践》学习笔记

EISS_2024企业信息安全峰会:《货拉拉信息安全实践》 企业安全目标设定和安全框架企业信息安全组织和机制技术体系建设方法信息安全指标建设构建安全数据和体系技术体系支撑合规治理安全融入企业体系内建文化,外建生态 企业安全目标设定和安全框架 要点&a…

门店展台客流量摄像机功能:准确计数、行为分析、客流趋势预测

在车展展厅中,门店展台客流量摄像机发挥着至关重要的作用,其功能涵盖准确计数、行为分析和客流趋势预测等多个方面。 一、车展展厅应用客流统计方案原因 1. 评估展会效果:准确了解每个展台的客流量,判断展会的吸引力和热度&#…

Linux相关概念和易错知识点(14)(进程终止、进程退出、退出信息)

1.进程终止 &#xff08;1&#xff09;错误码 对于程序常见错误信息&#xff0c;C/C提供了信息解释&#xff0c;保存在<string.h>&#xff0c;使用strerror(错误码)就可以查询 错误信息成立的前提是错误码要和错误信息匹配&#xff0c;我们需要结合C/C给我们的错误码来…

极狐GitLab X 某轨道交通控制系统龙头企业,助力业务研发敏捷化

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料&#xff1a; 极狐GitLab 60天专业…