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

RPC编程:RPC概述和架构演变

RPC编程系列文章第一篇

    • 一:引言
      • 1:本系列文章的目标
      • 2:RPC的概念
    • 二:架构的演变过程
      • 1:单体架构
        • 1):概念
        • 2):特点
        • 3):优缺点
      • 2:单体架构水平扩展
        • 1):水平拓展的含义
        • 2):水平拓展的意义
      • 3:垂直架构
        • 1):概念
        • 2):如何操作
        • 3):优缺点
      • 4:RPC架构
        • 1:跨进程调用是走HTTP还是TCP?
        • 2:优缺点比较

一:引言

1:本系列文章的目标

  1. RPC的架构理解
  1. 设计RPC的核心技术难点
    通信+协议+序列化方式+方便调用
  1. 多种序列化方式(Hession、Thirft、Prototype)
    掌握这些常用的序列化方式,JSON和JDK自己的序列化方式,都算。
  1. 多种RPC解决方案(HessionRPC,Grpc)
    一整套通信+协议+序列化方式+方便调用的解决方案,对既有技术的掌握,HessionRPC的RPC是使用的Hession的序列化方案,这种方案是在Dubbo广泛使用的,但是有点过时了。
  1. 注册中心,熔断,限流等设计思想
    RPC最核心的过程,为了当前的RPC原始的解决方案增加了新的功能,在我们的微服务领域见怪不怪了,此时RPC已经不单单是RPC,已经往SOA架构过度。
  1. 自研RPC

2:RPC的概念

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

Java体系中的进程就是指的JVM,在Java体系中的跨进程,我们可以简单的理解为跨虚拟机之间的访问。

二:架构的演变过程

1:单体架构

1):概念

也叫做单体应用:就是系统中所有的功能(代码)合在了一起。并且生成一个jar或者war。部署在一个tomcat中(JVM一个进程)

首页门户和后台管理系统在同一个web服务当中:
在这里插入图片描述
在这里插入图片描述

2):特点

一个jar,一个war包含所有子系统,在一个服务中。

3):优缺点

随着互联网的发展,客户群体和访问量的增加,很多问题暴露了出来:

1:热点问题 (某个子系统访问量大,导致其他子系统的访问出现问题)
2:扩展性差,新资源的分配力度不精确(门户系统访问量,增加机器,增加服务器tomcat。但是新增的资源,不能精确给到门户)
:3:模块(子系统)合度高、相互影响(修改某一个子系统的代码,产生了问题,影响其他的子系统)
4:维护部署成本高(某次发布,只更新了后台管理的(订单模块),但是因为是单体架构,所以会发布整个系统。
5:技术栈受限,必须使用相同的编程语言开发不同的子系统。

2:单体架构水平扩展

1):水平拓展的含义

在这里插入图片描述
LB是我们的负载均衡器

2):水平拓展的意义

解决不了单体架构的问题,但是可以解决单体架构在单个服务计算机资源特别是内存、CPU、网络连接数遇到瓶颈时的问题。

3:垂直架构

1):概念

把一个单体架构的应用,按照子系统进行了划分,每个子系统都独立部署在自己的tomcat中。多个子系统共享数据库等存储资源

2):如何操作

门户和后台管理系统一人一个jar包,当前分割粒度是基于子系统进行分割(还没有达到模块的粒度)

3):优缺点

1:把一个单体架构的应用,按照子系统进行了划分,每个子系统都独立部署在自己的tomcat(JVM 进程)中。多个子系统共享数据库等存储资源.
2:垂直架构做水平扩展。
3:有限的解决了单体架构的部分问题。
热点问题 (子系统级别的热点问题解决了,但是模块的热点问题没有解决)。
扩展性差 (子系统级别,增加机器,资源分配 相对精确)
技术栈也不要求统一语言 (门户 PHP,后台管理 Java)

4:RPC架构

1:跨进程调用是走HTTP还是TCP?

都可以,各有利弊。这里解释一下,Http底层也是TCP但是做了封装,Http是端连协议,及时是Http1.1也是有限长连接,时长上比Tcp协议短多了。

2:优缺点比较

在这里插入图片描述

相关文章:

RPC编程:RPC概述和架构演变

RPC编程系列文章第一篇一:引言1:本系列文章的目标2:RPC的概念二:架构的演变过程1:单体架构1):概念2):特点3):优缺点2:单体架构水平扩展1):水平拓展的含义2)&a…...

神经网络训练时只对指定的边更新参数

在神经网络中,通常采用反向传播算法来计算网络中各个参数的梯度,从而进行参数更新。在反向传播过程中,所有的参数都会被更新。因此,如果想要只更新指定的边,需要采用特殊的方法。 一种可能的方法是使用掩码&#xff0…...

Python列表list操作-遍历、查找、增加、删除、修改、排序

在使用列表的时候需要用到很多方法,例如遍历列表、查找元素、增加元素、删除元素、改变元素、插入元素、列表排序、逆序列表等操作。 1、遍历列表 遍历列表通常采用for循环的方式以及for循环和enumerate()函数搭配的方式去实现。 1&#xff…...

Python开发-学生管理系统

文章目录1、需求分析2、系统设计3、系统开发必备4、主函数设计5、 学生信息维护模块设计6、 查询/统计模块设计7、排序模块设计8、 项目打包1、需求分析 学生管理系统应具备的功能: ●添加学生及成绩信息 ●将学生信息保存到文件中 ●修改和删除学生信息 ●查询学生…...

大数据处理 - Trie树/数据库/倒排索引

Trie树Trie树的介绍和实现请参考 树 - 前缀树(Trie)适用范围: 数据量大,重复多,但是数据种类小可以放入内存基本原理及要点: 实现方式,节点孩子的表示方式扩展: 压缩实现。一些适用场景:寻找热门查询: 查询串的重复度比较高&#…...

jjava企业级开发-01

一、Spring容器演示 采用Spring配置文件管理Bean 1、创建Maven项目 修改项目的Maven配置 2、添加Spring依赖 在Maven仓库里查找Spring框架&#xff08;https://mvnrepository.com&#xff09; 同上添加其他依赖 <?xml version"1.0" encoding"UTF-8…...

「事务一致性」事务afterCommit

在事务还没有执行完消息就已经发出去了, 导致后续的一些数据或逻辑上的问题产生。场景如下&#xff1a;异步-记录日志&#xff1a;当事务提交后&#xff0c;再记录日志。发送mq消息&#xff1a;只有业务数据都存入表后&#xff0c;再发mq消息。方案1. 利用TransactionSynchroni…...

【深度学习编译器系列】2. 深度学习编译器的通用设计架构

在【深度学习编译器系列】1. 为什么需要深度学习编译器&#xff1f;中我们了解到了为什么需要深度学习编译器&#xff0c;和什么是深度学习编译器&#xff0c;接下来我们把深度学习编译器这个小黑盒打开&#xff0c;看看里面有什么东西。 1. 深度学习编译器的通用设计架构 与…...

图解操作系统

硬件结构 CPU是如何执行程序的&#xff1f; 图灵机的工作方式 图灵机的基本思想&#xff1a;用机器来模拟人们用纸笔进行数学运算的过程&#xff0c;还定义了由计算机的那些部分组成&#xff0c;程序又是如何执行的。 图灵机的基本组成如下&#xff1a; 有一条「纸带」&am…...

【发版或上线项目保姆级心得】

第一步&#xff1a;先在正式环境创建数据库/新增表格或者字段 在数据库表中增加字段/表格&#xff0c;不会报错。 但是切记不要过早数据库字段/表格或者删除字段/表格 第二步&#xff1a;修改配置文件 先将正式环境需要的配置给写好&#xff0c;包括但不仅限于数据库配置、…...

Python数据分析-pandas库入门

pandas 库概述pandas 提供了快速便捷处理结构化数据的大量数据结构和函数。自从2010年出现以来&#xff0c;它助使 Python 成为强大而高效的数据分析环境。pandas使用最多的数据结构对象是 DataFrame&#xff0c;它是一个面向列&#xff08;column-oriented&#xff09;的二维表…...

MacBook Pro 恢复出厂设置

目录1.恢复出厂设置1.1 按Command-R 键1.2 macOS 实用工具1.3 从 macOS 恢复功能的实用工具窗口中选择“磁盘工具”&#xff0c;然后点按“继续”1.4 在“磁盘工具”边栏中选择您的设备或宗卷。1.5 点按“抹掉”按钮或标签页1.6 抹掉OS X HD - 数据 完成1.7 抹掉 OS X HD1.8 查…...

googletest 笔记

什么是一个好的测试 1 测试应该是独立的和可重复的。调试一个由于其他测试而成功或 失败的测试是一件痛苦的事情。googletest 通过在不同的对象上 运行测试来隔离测试。当测试失败时&#xff0c;googletest 允许您单独运 行它以快速调试。 2 测试应该很好地“组织”&#xff0c…...

MySQL修改密码的几种方式?

第一种方式&#xff1a; 最简单的方法就是借助第三方工具Navicat for MySQL来修改。方法如下&#xff1a; 1、登录mysql到指定库&#xff0c;如&#xff1a;登录到test库。 2、然后点击上方"用户"按钮。 3、选择要更改的用户名&#xff0c;然后点击上方的"编辑用…...

关于画一个句号--基于2022年终总结的反思与分享

没有平台鼓风造势&#xff0c;今年各大平台没有涌现出一批总结&#xff0c;非常清爽 正如同人发明了抽屉&#xff0c;将杂物进行整理、丢弃、收纳&#xff0c;才能对空间进行更合理地使用。我们也需要对知识、过往经历进行整理、丢弃、收纳&#xff0c;才能对大脑进行更合理地…...

学习Flask之三、模板

学习Flask之三、模板 书写易于维护的应用的关键是书写整洁和良构的代码。到目前为止你所见的例子过于简单而不能体现这点。把两个目的完全独立的Flask view 函数当作一个来写&#xff0c;会产生问题。view函数的一个显然的任务是对请求作出响应&#xff0c;如前面的例子所示。对…...

2023-02-20干活小计:

所以我今天的活开始了&#xff1a; In this paper, the authors target the problem of Multimodal Name Entity Recognition(MNER) as an improvement on NER(text only) The paper proposes a multimodal fusion based on a heterogeneous graph of texts and images to mak…...

LeetCode_动态规划_困难_1326.灌溉花园的最少水龙头数目

目录1.题目2.思路3.代码实现&#xff08;Java&#xff09;1.题目 在 x 轴上有一个一维的花园。花园长度为 n&#xff0c;从点 0 开始&#xff0c;到点 n 结束。 花园里总共有 n 1 个水龙头&#xff0c;分别位于 [0, 1, …, n] 。 给你一个整数 n 和一个长度为 n 1 的整数数…...

mac tcpdump学习

学习原因 工作上遇到了重启wifi后无法发出mDNS packet的情况&#xff0c;琢磨一下用tcpdump用的命令如下 sudo tcpdump -n -k -s 0 -i en0 -w VENDOR-DUT-INTERFACE.pcapng是在测airplay BCT认证时&#xff0c;官方文档的解决方法。对tcpdump很不了解&#xff0c;现汇总如下的学…...

【跟我一起读《视觉惯性SLAM理论与源码解析》】第二章 编程及编译工具

23.2.21终于拿到六哥的新书 感觉很是不错&#xff0c;打算近期写一写心得之类的 废话不多说&#xff0c;直接开啃 PS&#xff1a;我的建议是阅读完十四讲后再来看这本书&#xff0c;效果应该会很不错。 因为第一章都是介绍之类的我觉得没什么整理的必要&#xff0c;所以直接来…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...