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

初始Redis 分布式结构的发展演变

目录

Redis的特点和使用场景

分布式系统的引入

单机系统

分布式系统 

应用服务器的增多(处理更多的请求)

数据库读写分离(数据服务器的增多)

引入缓存

应对更大的数据量 

业务拆分:微服务


Redis的特点和使用场景

我们先来回顾下我们之前学过的MySQL

mysql的数据是存储到硬盘上的,他的读取速度比较慢,但是容量大

而Redis则是使用了内存,数据是在内存上,读取速度比较快,但是容量小。

这里补充一点:

我们一开始学习编程,所了解的变量是存储找内存中。那么既然都是存储到内存中,我们干嘛还要弄一个Redis呢?

是这样的——Redis主要是用在分布式系统上的,他可以实现各个进程间数据的通讯,共享,甚至不同主机上的进程间数据的互相访问 

分布式系统的引入

单机系统

下面是一个单机架构,只有一台服务器,这个服务器负责处理所有的事情

我们之前写的java--web类项目,属于是HTTP服务器(处理前端发来的请求)

对与数据来说

我们上面所说的web程序,springboot属于是HTTP服务器(属于Mysql的客户端), 向Mysql服务器发生请求(查询数据)

而MySQL是一个客户端服务器结构的程序,是作为数据的服务器,他的本体就是Mysql服务器(用来存储和组织数据)

分布式系统 

虽然对于现在的计算机硬件来说,哪怕只有一台主机,这一台主机也是可以支持非常高的并发 & 非常大的数据存储。

但是如果业务进一步增长,用户量和数据量继续增多,当一台主机难以应付的时候,就需要引入更多的主机,引入更多的硬件资源

一旦引入了多台主机,咱们的系统就可以称为是分布式系统

上面就是一个最简单的分布式的结构——应用服务和数据库服务分离 

应用服务器的增多(处理更多的请求)

但是因为应用服务器可能会比较吃CPU和内存。

比如要同时要处理的应用请求过多,把CPU和内存给吃没了,就会出现相应的问题

这个时候,我们就需要引入更多的应用服务器,来解决上述问题

这里的应用服务器,可能是两个,也可能是多个。用户的请求先到达负载均衡器/网关服务器,将任务分配给下面的多个应用服务器

这里我们介绍下负载均衡器

负载均衡器的请求承受能力,大大高于应用服务器。(负载均衡服务器主要用于任务的分配,分配任务一般不会消耗太多的资源,任务的执行——也就是应用服务器消耗的资源会多一些)

当然如果系统的请求实在太多,负载均衡器的压力也过大的时候,我们这里可以引入更多的负载均衡服务器来承受这增多的访问量

这里需要注意的是,当我们的服务器增多了后,管理成本也会变高,系统也变得越来越复杂,出现问题的概率也随之提升 

数据库读写分离(数据服务器的增多)

这里面有一个主从结构

在实际应用场景中,读的频率是比写的频率要高的 

那么我们就可以有多个从服务器——一主多从

引入缓存

数据库天然有一个问题,相应速度是相对更慢的

为了解决这个问题,我们可以把数据区分 ”冷热“, 热点数据(使用频繁的数据)放到缓存中,缓存的访问速度往往要比数据库要快很多!!!

 

我们的redis主要就是应用在缓存中,虽然存的数据少,但速度快(存的也都是热点数据)

另外因为二八原则, 缓存服务器中的热点数据可以应对80%以上的请求。因此缓存服务器的使用,不仅提高了访问速度,还缓解了其他数据服务器的压力。

 虽然引入缓存这样的好处,但同时也会带来一些问题,比如数据一致性(数据同步)问题。

应对更大的数据量 

我们上面不管是引入更多的应用服务器,还是数据库读写分离、引入缓存,都是为了应对更高的请求量。但是对于一个完善的系统来说我们不光要能够去应对更高的请求量,也还要能够应对更大的数据量

业务拆分:微服务

随着⼈员增加,业务发展,我们将业务分给不同的开发团队去维护,每个团队独⽴实现⾃⼰的微服务,然后互相之间对数据的直接访问进⾏隔离,可以利⽤Gateway、消息总线等技术,实现相互之间的调⽤关联。甚⾄可以把⼀些类似⽤⼾管理、安全管理、数据采集等业务提成公共服务
 

相关文章:

初始Redis 分布式结构的发展演变

目录 Redis的特点和使用场景 分布式系统的引入 单机系统 分布式系统 应用服务器的增多(处理更多的请求) 数据库读写分离(数据服务器的增多) 引入缓存 应对更大的数据量 业务拆分:微服务 Redis的特点和使用场景 我们先来…...

关于动态内存管理中的常见练习题

文章目录 前言练习1:练习2:练习3:练习4: 前言 学习完C语言中的动态内存管理,大家开始利用动态内存管理来去开辟空间,经过一顿狂敲代码后,发现了问题,程序要么崩掉,要么运…...

冒泡排序、插入排序、选择排序和快速排序的原理

下面是对冒泡排序、插入排序、选择排序和快速排序的原理的简要解释: 冒泡排序(Bubble Sort):冒泡排序是一种简单的排序算法。它通过多次迭代比较相邻的元素,并交换它们的位置,使得较大(或较小&…...

VB.NET之SqlCommand详解

目录 一.前言 二.SqlCommand的背景方法 1.构造函数 2.属性 3.方法 三.SqlCommand的使用实例 1.创建SqlCommand对象 2.执行SQL查询语句 3.执行存储过程 四.总结 一.前言 VB.NET的SqlCommand是ADO.NET的一部分,主要用于执行SQL语句并返回受影响的行数、查询…...

.NET主流的ORM框架 2023年

1. Entity Framework Entity Framework是Microsoft开发的一款强大的ORM框架。适用于.NET开发,支持多种数据库,并提供了广泛的文档和教程。Entity Framework基于面向对象的数据模型,使用LINQ进行查询。它的强大功能和易用性使得它成为.NET开发…...

第三节——Vue 基础语法

vue语法分为选项是API(Option api)和组合式api(Composition Api),我们以选项式Api入门 一、基本构成 template、script、style三部分构成。template可以理解成编写html的地方,script编写逻辑js的地方,sty…...

PR BeatEdit 节奏卡点神器 的报错 beat detection error: IBT failed 和解决路径

环境:DELL Latitude 笔记本 16G内衬,Win10,PR 2021,BeatEdit Pr 2.1.003 安装PR BeatEdit 节奏卡点神器没有问题,可以调出。 导入音频时报错:beat detection error: IBT failed 根据 BeatEdit for Premi…...

LeetCode75——Day13

文章目录 一、题目二、题解 一、题目 1679. Max Number of K-Sum Pairs You are given an integer array nums and an integer k. In one operation, you can pick two numbers from the array whose sum equals k and remove them from the array. Return the maximum num…...

【单元测试】--测试驱动开发(TDD)

一、什么是测试驱动开发 测试驱动开发(Test-Driven Development,TDD)是一种软件开发方法,其核心思想是在编写实际代码之前,首先编写测试用例。TDD 的主要步骤如下: 编写测试用例:首先&#xf…...

【计算机网络】UDP的报文结构和注意事项

UDP(User Datagram Protocol,用户数据报协议)是一种无连接的协议,它在传输层中提供了简单、不可靠的数据传输服务。与TCP(Transmission Control Protocol,传输控制协议)不同,UDP不需要建立连接&…...

【网络编程】基于epoll的ET模式下的Reactor

需要云服务器等云产品来学习Linux的同学可以移步/-->腾讯云<--/-->阿里云<--/-->华为云<--/官网&#xff0c;轻量型云服务器低至112元/年&#xff0c;新用户首次下单享超低折扣。 目录 一、Reactor介绍 二、基于epoll的ET模式下的Reactor计算器代码 1、Tcp…...

位操作符^以及正负数在计算机中的存储

(数据是怎么在计算机中存储的)​ 正数和负数在内存中都是以补码的形式存储的&#xff0c;但不同的是正数的原码&#xff0c;补码&#xff0c;反码都是相同的&#xff0c;而负数的原码&#xff0c;补码和反码是不同的。 负数的原码&#xff0c;补码&#xff0c;反码之间存在什么…...

Linux系统管理:虚拟机Kylin OS安装

目录 一、理论 1.Kylin OS 二、实验 1.虚拟机Kylin OS安装准备阶段 2.安装Kylin OS 3.进入系统 一、理论 1.Kylin OS &#xff08;1&#xff09;简介 麒麟操作系统&#xff08;Kylin OS&#xff09;亦称银河麒麟&#xff0c;是由中国国防科技大学、中软公司、联想公司…...

Nvidia显卡L40S学习:产品规格,常用名词解释

L40S 1 产品形态 构建NVIDIA OVX服务器&#xff0c;面向数据中心&#xff0c;用于加速AI训练和推理、3D设计和可视化、视频处理和工业数字化等复杂的计算密集型应用每个OVX服务器上8个L40S GPU&#xff0c;每个GPU配备48GB GDDR6超快内存 2 产品发展 具有许多与之前的 NVID…...

【safetensor】介绍和基础代码

Hugging Face, EleutherAI, StabilityAI 用的多 介绍 文件形式 header&#xff0c;体现其特性。如果强行将pickle或者空软连接 打开&#xff0c;会出现报错。解决详见&#xff1a;debug 连接到其他教程结构和参数 安装 with pip:Copied pip install safetensors with con…...

【STM32】--PZ6860L,STM32F4,ARM3.0开发板

一、ARM3.0开发板详细介绍 1.开发板整体介绍 &#xff08;1&#xff09;各种外设和主板原理图 &#xff08;2&#xff09;主板供电部分5V和3.3V兼容设计 注意跳线帽 2.STM32核心板介绍 3.核心板原理图 STM32和51的IO对应关系 下载电路 二、ARM3.0开发板ISP下载原理分析 1.I…...

百分点科技再度亮相GITEX全球大会

10月16-20日&#xff0c;全球最大科技信息展会之一 GITEX Global 2023在迪拜世贸中心开展&#xff0c;本届展会是历年来最大的一届&#xff0c;吸引了来自180个国家的6,000家参展商和180,000名技术高管参会。 百分点科技作为华为生态合作伙伴&#xff0c;继去年之后再度参展&a…...

机器学习笔记 - 深度学习中跳跃连接的直观解释

一、概述 如今人们利用深度学习做无数的应用。然而,为了理解在许多作品中看到的大量设计选择(例如跳过连接),了解一点反向传播机制至关重要。 如果你在 2014 年尝试训练神经网络,你肯定会观察到所谓的梯度消失问题。简单来说:你在屏幕后面检查网络的训练过程,你看到的只…...

利用python中if函数判断三角形的形状

1 问题 如何利用python中if函数判断三角形形状。 2 方法 给以一个三角形的三边长a,b和c(边长是浮点数),根据三角形三边关系定理以及勾股定理为基础&#xff0c;使用if函数判断三角形的形状。若是锐角三角形&#xff0c;输出R, 若是直角三角形&#xff0c;输出Z&#xff0c; 若是…...

分布式共识算法及落地

摘要 本文介绍常见的分布式共识算法&#xff0c;使用场景&#xff0c;以及相关已经落地了的程序或框架 1. 为什么要分布式共识算法 在分布式系统中&#xff0c;不同节点之间可能存在网络延迟、故障等原因导致彼此之间存在数据不一致的情况&#xff0c;为了保证分布式系统中的…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库&#xff0c;提供了高效、安全的文本格式化功能&#xff0c;是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...

【WebSocket】SpringBoot项目中使用WebSocket

1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖&#xff0c;添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...

如何把工业通信协议转换成http websocket

1.现状 工业通信协议多数工作在边缘设备上&#xff0c;比如&#xff1a;PLC、IOT盒子等。上层业务系统需要根据不同的工业协议做对应开发&#xff0c;当设备上用的是modbus从站时&#xff0c;采集设备数据需要开发modbus主站&#xff1b;当设备上用的是西门子PN协议时&#xf…...