RPC学习笔记【一】:概述

news2024/10/2 6:35:16

文章目录

    • 一、简介
      • 1.1 引言
      • 1.2 架构的演变过程
    • 二、RPC 的设计
      • 2.1 设计目标
      • 2.2 核心问题
        • 01 通信方式
        • 02 协议
        • 03 序列化
        • 04 远程代理类
      • 2.3 衍生方案 - 注册中心

一、简介

1.1 引言

RPC 是远程过程调用 (Remote Procedure Call)的缩写形式,是一种跨进程的方法调用形式,是目前在 Java 分布式,微服务体系过程之中,重要的一种通信方式。

在 JVM 中,启动一个项目,就意味着开启了一个线程,这里的跨进程可以理解为:有两个项目在两个虚拟机之中去跑,或者在一个虚拟机之中同时运行。

究竟是那些问题的存在,导致了这种方式的出现呢?下面我们首先来看一下系统架构的演变过程

1.2 架构的演变过程

在软件开发的时候,最早出现的就是单体架构,就是将系统中所有的功能代码耦合在一起,生成一个 jar(war),部署在一个tomcat之中,是一个JVM进程,就比如下面这个系统一样

在这里插入图片描述

那么这个架构到底存在什么问题呢?下面来进行列举

1)存在热点问题:这两部分资源都是放在一个jar包里面,跑在一个虚拟机之中,就会出现一个系统的访问量过大,占用了服务器的资源,进而就会影响到另一个系统的访问

2)扩展性比较差:新资源的分配粒度不精确

3)模块的耦合性较高:两个模块都是在一个大项目之中去写的,可能会出现,两个模块都依赖于一个Service,如果有一天门户提出了一个新的需求,需要去修改AService,但是后台管理系统不需要或者说不想要这个需求,就会产生影响

4)维护和部署的成本较高:某一次发布,只更新一部分代码,但是由于是单体架构,所以会发布整个系统

5)技术栈受限,必须要使用相同的编程语言

接下来出现的架构就是:单体式架构的水平扩展,将一个相同的项目,部署到个多个机器之上

image-20230516093753818

但是这种架构只解决了热点问题,也就是说可以解决单体架构在单台服务器之上,内存,CPU,网络连接数遇到瓶颈时的问题,但是其余的问题还是没有解决掉,

垂直结构,把一个单体架构的应用,按照子系统进行划分,每个子系统都部署在自己的 tomcat 之中,多个子系统共享数据库等存储资源,有限的解决了单体架构的问题。当我们的系统通过垂直架构来进行划分之后,比如说现在已经拆分出来两个模块,模块A 和 模块B,如果说现在模块A要实现一个功能点C,但是这个功能在模块B之中已经存在了,所以现在就有两种策略:

  • 方式一:在模块A之中,再实现一波功能C
  • 方式二:调用模块B的这个功能

对于这两种方式,使用方式二能够使得系统的内聚性更高。

模块内部的各个元素之间的关联更加紧密,即所谓的高内聚性,模块的内聚性越高,其模块化的效果就会越好,软件的可维护性、可扩展性和可重用性也会更加优秀。

而方式二,由一个模块调用另一个模块的功能,也就是所说的 RPC

到这里为止,我们就看了一下整体架构的演变过程,那么我们该如何去设计一个 RPC 框架呢?

二、RPC 的设计

2.1 设计目标

对于一个RPC框架,它的设计目标就是:让调用者像调用本地方法一样调用远端的服务方法。

为了实现这个目标,究竟需要解决那些问题?

2.2 核心问题

RPC 是 两个模块之间进行跨进程调用,首先需要解决的就是通信方式

01 通信方式

两个模块在不同的虚拟机上,就会涉及到了跨进程的调用,跨进程调用可以走网络,进行网络编程,这里就会涉及到了协议的选择,使用 Http 协议? 还是使用 TCP协议 ?

Http 底层虽然也是 TCP,但是走Http协议,会在消息头加上Http相关信息

Http 是短连接协议 (即时到后面也是有限的长连接),需要频繁的建立 和关闭连接

那么走两种协议究竟会带来哪些优点,哪些缺点?

1)如果走 HTTP 协议

  • 使用HTTP协议,最为方便的是不用开发服务器,有现成的,如Tomcat,Resin。
  • 服务器端,不能够直接通过网络进行调用Service,需要通过控制器进行暴露。
  • 客户端发起 Http 请求,可以使用HttpClient,RestTemplate,WebClient,OKHttp
  • 优势:文本类型 字符串协议,跨语言平台好
  • 问题:传输数据量大
  • 典型的技术实现方案:Spring Clout Feign ;Hessian RPC

2)如果走 TCP 协议

  • 服务器端需要自己开发 Socket 编程,接受客户端传递过来的参数,不过可以直接调用 Service 进行使用,
  • 优势:效率高,连接的复用性较好。自己定义应用协议。自己定义序列化的方式
  • 问题:开发难度增大,对使用者不友好
  • 典型的技术实现方案:Dubbo

02 协议

如果使用 TCP ,需要自定义协议。如果说我们自定义协议,将会包含两大部分:

  • 协议头
  • 协议体

03 序列化

在网络通信之中,序列化是必不可少的一环。他相当于通信双方定义的一种标准,对数据进行处理。

发送方在发送的时候,将数据通过序列化操作转换为一种格式,接受方在接受之中,在将这种格式的数据通过反序列化转为原来的样子。

根据序列化之后的数据格式,可以分为以下两种:

  • 文本格式的序列化实现方案:数据通过某种格式通过文本的格式呈现;目前最为广泛使用是JSON格式和XML格式
  • 二进制格式的序列化实现方案:数据通过某种编排规则通过二进制格式呈现;但是这种方式对于异构性语言并不友好

由于序列化的最终目的是为了进行网络传输,所以选择一种比较好的序列化方式,让内容转换之后尽可能的小,就显得尤为重要了。

04 远程代理类

RPC 的设计目标就是让调用者像调用本地方法那样调用远端方法。在设计的时候,要尽可能屏蔽细节,让适用方只关注业务接口,所以在调用者这方,需要创建远程服务类的代理类。

2.3 衍生方案 - 注册中心

当服务端有多个实例的时候,这种情况之下就需要考虑注册中心了,在注册中心之中,有所有服务的注册的信息。

image-20230527003122309

那个这个注册中心究竟有哪些功能呢?

1)进行负载均衡,基于轮训或者加权的一些策略,将请求达到对应的服务上

2)进行服务的管理:定期的发送心跳,看那些服务是可以使用的

3)解耦合:客户端不需要写死服务端的地址,而是从注册中心去获取服务

4)熔断:如果服务端的这个实例挂了,断开这个连接

5)限流:限制某一个实例的访问量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/584928.html

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

相关文章

一文搞懂Python时间序列预测(步骤,模板,python代码)

预测包括,数值拟合,线性回归,多元回归,时间序列,神经网络等等 对于单变量的时间序列预测:模型有AR,MA,ARMA,ARIMA,综合来说用ARIMA即可表示全部。 数据和代码链接:数据和Jupyter文…

ArcGIS10.8下载及安装教程(附安装步骤)

谷歌云: https://drive.google.com/drive/folders/10igu7ZSMaR0v0WD7-2W-7ADJGMUFc2ze?uspsharing ArcGIS10.8 百度网盘: https://pan.baidu.com/s/1s5bL3QsCP5sgcftCPxc88w 提取码:kw4j 阿里云: https://www.aliyundriv…

Linux—实操篇:远程登录到linux服务器

远程登录客户端工具有 Xshell7(远程登录),Xftp7(文件传输),这里介绍Xshell和Xftp,其他的远程工具大同小异 1、远程登录Linux—Xshell 介绍:Xshell是目前最好的远程登录到Linux的软件,流畅的速度并且完美解…

如何制作污水处理流程图?简单方式说明

污水处理是指对污水进行处理,以使其能够满足环境保护和人类生产生活用水的需要。污水处理流程图是整个污水处理过程的图解,能够直观地展现污水处理的步骤和流程。 有很多方式可以制作流程图,比如一些站点可以在线制作,还兼具了思维…

chatgpt赋能python:Python下载代码:探索更快、更简单的方式

Python下载代码:探索更快、更简单的方式 Python是一个功能强大的编程语言,可以用来开发各种应用程序,从Web应用程序到数据科学和机器学习。作为一个高级语言,它通常看起来更易于理解和编写,相比其他编程语言更容易维护…

现阶段检验检测认证行业到底是一个什么样的行业?

为企业创造不一样的价值! TIC行业研究先行者、行业信息送水人! 内容摘要 此文章重点讲述了现阶段检验检测认证行业到底是一个什么样的行业,以及分析这个行业好与不好的明显特点。 此文章重点分析了现阶段检验检测认证行业的驱动力、竞争格…

Socket通信讲解及C/S结构实现UDP协议通信

Sokcet 一. Socket套接字 1.1 什么是套接字 所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制,是支持TCP/IP协议的路通…

java:map集合的应用,含代码以及输出样例

目录 1.Map集合 创建 基本的map使用方法 添加数据&#xff0c;打印数据 获取长度&#xff0c;删除元素&#xff0c;判断元素是否存在 map中常用的函数 1.Map集合 创建 Map<String,String> map new HashMap<>(); 基本的map使用方法 添加数据&#xff0c;打…

五.Glide

文章目录 前言1.with方法1.1 如何监听Glide的生命周期1.2 生命周期作用域Application、Activity、Fragment1.3 生命周期的绑定1.4 生命周期的监听1.5生命周期的回调 2.load方法3.into方法3.1 into方法的源码中流程走向3.2 Glide活动缓存的由来 4.Glide缓存机制4.1 资源封装4.2 …

(一)、Arcgis Server等一系列软件安装前准备

文章目录 &#xff08;一&#xff09;、win10修改机器名&#xff08;1&#xff09;、打开&#xff1a;设置->重命名这台电脑&#xff08;2&#xff09;、在弹出的系统属性框点击 "更改按钮"&#xff08;3&#xff09;、在弹出的计算机名/域更改点击 "其他&qu…

赋能数字化!企企通荣获“中国企业服务产业最佳投资案例TOP10”

近日&#xff0c;国内投资行业权威机构「投中信息」发布的投中2022年度中国创业投资机构暨私募股权投资机构系列榜单&#xff08;“投中2022年度榜单”&#xff09;隆重揭晓&#xff0c;企企通作为国内一站式采购数字化管理平台领军者&#xff0c;成功入选“2022年度企业服务产…

体积小、无广告、超实用的5款小工具

大家好&#xff0c;我又来啦&#xff0c;今天给大家带来的5款软件&#xff0c;共同特点都是体积小、无广告、超实用&#xff0c;大家观看完可以自行搜索下载哦。 1.动态桌面——WinDynamicDesktop WinDynamicDesktop是一款用于根据时间和地点自动更换桌面壁纸的工具。它可以让…

从零搭建微服务-认证中心(四)

写在最前 如果这个项目让你有所收获&#xff0c;记得 Star 关注哦&#xff0c;这对我是非常不错的鼓励与支持。 源码地址&#xff1a;https://gitee.com/csps/mingyue 文档地址&#xff1a;https://gitee.com/csps/mingyue/wikis 搭建前端框架 感谢开源项目【vue-next-adm…

TDengine 启动 taosAdapter,提供基于6041端口的RESTful 接口,建立REST 连接

一、前文 TDengine 入门教程——导读 二、开发指南 TDengine 完整的软件包包括&#xff1a; 服务端&#xff08;taosd&#xff09;&#xff1b;命令行程序 (CLI&#xff0c;taos) 和一些工具软件&#xff1b;用于与第三方系统对接并提供 RESTful 接口的 taosAdapter&#xff1…

evpn route抓包

EVPN路由的种类比较多&#xff0c;每个类型抓一个包在此留存&#xff0c;以备不时之需。 与君共勉。 每种EVPN路由的具体作用及工作方式可以参见VXLAN专栏中其它文章。 Type1 当各网关设备之间的BGP EVPN邻居关系建立成功后&#xff0c;网关设备之间会传递以太自动发现路由。…

Pod生命周期

Pod生命周期 Pod创建过程运行初始化容器过程运行主容器过程 容器启动后钩子&#xff0c;容器终止前钩子容器存活性&#xff0c;就绪性探测 Pod终止过程 在整个Pod生命周期&#xff0c;会出现5中状态&#xff1a; 取值描述Pending&#xff08;悬决&#xff09;Pod 已被 Kubern…

聚数成峰,共赢未来,openGauss Developer Day 2023在京举行

[2023年5月26日 中国 北京]5月25日-26日&#xff0c;以“聚数成峰&#xff0c;共赢未来”为主题的 openGauss Developer Day 2023&#xff08;openGauss开发者大会2023&#xff09;在北京举办。本届大会在中国计算机学会、国家工业信息安全发展研究中心指导下&#xff0c;由ope…

Springboot +spring security,认证方式---Form表单认证的实现(一)

一.简介 这篇文章来学习下security的认证方式其中的Form表单认证 二.Spring Security的认证方式 2.1什么是认证 认证: 就是用来判断系统中是否存在某用户&#xff0c;并判断该用户的身份是否合法的过程&#xff0c;解决的其实是用户登录的问题。认证的存在&#xff0c;是为…

数据挖掘实战(以kaggle为例)

第一课 主要分为以下内容进行讲述 机器学习工业应用领域 机器学习常用算法 机器学习常用工具 解决问题流程 数据的处理比模型更为重要 老师的博客&#xff0c;内容很详细 数据预处理 有时候可以一个feature一个feature去做 特征工程 模型选择 模型状态评估 模型融合 B…

消息通知配置-shorp

消息通知配置 注意事项&#xff1a; 消息均采用异步发送&#xff0c;请提前配置好队列&#xff0c;点这里配置队列配置完之后请别忘记在列表切换消息为启用状态 模板消息配置方式 (以订单发货通知为例) 准备工作 查看后台 消息通知 -》 消息配置 -》 订单发货通知编辑 微信公…