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

浅谈Redis和分布式系统

浅谈Redis

Redis用于存储数据,且在内存当中进行存储。

但是在日常编写代码中,定义一个变量也就属于在内存当中存储一个数据。

Redis主要会在分布式系统当中发挥重要作用,如果只是单机程序,直接通过变量存储数据的方式会比使用Redis更优。=

为什么会使用Redis?

主要原因是:当今的系统一般是分布式系统,存在多个进程,而进程是具有隔离性的。

我们如果要在进程之间通信,就需要通过网络的方式。

所以,Redis是基于网络的,可以把自己的内存中的变量给别的进程,甚至别的主机的进程进行使用。

与MySQL进行对比

MySQL存在一个最大的问题:访问数据的速度很慢。MySQL的数据存在于硬盘当中。

很多互联网产品对于性能的要求极高。

所以Redis也可以作为数据库进行使用。

Redis虽然快,但是存储空间小。

是否能够让Redis和MySQL的优点结合起来?

把常使用数据存放在Redis当中,将不常用的数据存储在MySQL当中。

当然代价是有的,就是系统的复杂度提升。

数据发生修改,还存在Redis和MySQL的数据同步问题。

单机架构与分布式架构

单机架构,只有一台服务器,这个服务器负责所有的工作。

分布式,引入多台主机。

负载均衡器

负载均衡器(Load Balancer)是在计算机网络中常用的一种技术,用于在多个服务器之间分配负载,以实现更好的性能、可靠性和可扩展性。它可以帮助有效地处理大量的请求并确保系统的稳定运行。

负载均衡器的主要目标是将请求分发到多个服务器上,以避免单个服务器过载,并确保系统能够高效地响应用户的请求。它可以根据不同的算法和条件来决定如何分配负载,例如轮询、加权轮询、最少连接数等。


负载均衡器的工作原理


1.接收请求:负载均衡器作为系统的入口点,接收来自客户端的请求。

2.负载分发:根据预设的负载均衡算法,将请求分发到后端服务器。常见的负载均衡算法有轮询、加权轮询、最少连接数等。
3.处理请求:后端服务器接收到请求后,处理请求并返回响应给负载均衡器。
4.响应返回:负载均衡器将后端服务器返回的响应发送给客户端。

负载均衡器的好处包括:


1.提高性能:通过将负载分发到多个服务器上,负载均衡器可以减轻单个服务器的负载,从而提高整体系统的性能和响应速度。
2.提高可靠性:如果某个服务器发生故障,负载均衡器可以将请求重新分发到其他正常运行的服务器上,从而提高系统的可靠性和容错能力。
3.实现可扩展性:通过添加更多的服务器并将负载均衡器配置为将请求均匀分发到这些服务”器上,可以实现系统的可扩展性,以满足不断增长的用户需求。
4.简化管理:负载均衡器可以集中管理和监控多个服务器,简化了系统的管理和维护。

tips:负载均衡器,对于请求量的承担量,要远超过应用服务器。

负载均衡器,相当于领导,分配任务。

应用服务器,相当于员工,执行任务。

增加应用服务器,确实能够处理更高的请求量,但是随之存储服务器,要承担的请求量也就更多了。

可采取以下措施

数据库读写分离

主数据库负责写,从数据库负责读,而且主数据库会同步数据到从数据库。

读的频率会比写的频率要高很多。

一般来说,主服务器是一个,从服务器可以有多个。

同时从数据库通过负载均衡的方式,让应用服务器进行访问。

当然,数据库天然有个问题:响应速度是更慢的!

我们还可以通过以下方式来解决

Redis作为热数据缓存

把数据区分为“冷热”,热点数据放到缓存中,缓存的访问速度往往比数据库要快多了。

但是缓存要想快,就需要付出一些代价 -> 很小

所以Redis通常就是作为缓存服务器使用。

此时,缓存数据库就帮助数据库服务器负重前行。

引入分布式系统,不光要能够应对更高的请求量(并发量),同时也要能应对更大的数据量。

如果出现了一个主机装不下那么大的数据量呢?

就需要多台主机来存储。

分库分表

首先我们可以针对数据库进一步的拆分。

本来一个数据库服务器,这个数据库服务器上有多个数据库,也就是逻辑上的数据集合。

现在可以引入多个数据库服务器,每个数据库服务器存储一个或者一小部分数据库。

如下:

微服务

之前应用服务器,一个服务器程序里面做了很多的业务,这就可能会导致这一个服务器的代码变得越来越复杂。

为了更方便于代码的维护,就可以把这样的复杂的服务器拆分成更多的,功能更单一,但更小的服务器。(微服务)

以上使得服务器的种类和数量增加。

这里需要注意:微服务在本质上是解决“人”的问题。

当应用服务器复杂了,势必就需要更多的人来维护。

人多了就需要分组,再分工。

按照功能,拆分成多组微服务,就可以有利于上述 人员的组织机构的分配。

引入微服务,解决了“人”的问题,付出的代价:

1.整个系统的性能会下降。(网络通信比进程内通信慢太多了)

2.系统复杂程度提高,可用性受到影响

拆出来更多的服务,多个功能之间要更依赖网络通信。

网络通信的速度很可能是比硬盘还慢的。

要想保证性能不下降太多,只能引入更多的机器,更多的硬件资源。直白点说就是充钱呗。

服务器更多了,出现问题的概率更大了

这就需要一系列的手段来保证系统的可用性。(监控报警,配套的运维人员)

但是微服务还是有一定的优势的。

微服务的优势

1.解决了“人”的问题。

2.使用微服务可以更方便于功能的复用。

3.可以给不同的服务进行不同的部署。硬件资源的调配。

下面再来讲一些概念:

概念

分布式与集群

分布式和集群同样是引入多个主机/服务器,协同配合完成一系列的工作。

分布式是指在物理上的多个主机,而集群表示的是逻辑上的多个主机。

主从:

多个服务器节点,其中一个是主,其他为从,从节点的数据要从主节点同步过来。

中间件

和业务无关的服务(功能更通用的服务)

eg:1.数据库  2.缓存  3.消息队列

总结

1.单机架构(应用程序 + 数据库服务器)

2.数据库和应用分离

应用程序和数据库服务器 分别放到不同的主机上部署。

3.引入负载均衡,应用服务去 => 集群

通过负载均衡器,把请求均匀的分发给集群中的每个服务器。

当集群某一个主机挂了,其他的主机依然可以承担服务,提高了整个系统的可用性。

4.引入数据库读写分离,数据库主从结构

一个数据库节点作为主节点,其他的数据库节点作为从节点。

主节点负责写数据,从节点负责读数据。

主节点需要把修改后的数据同步给从节点。

5.引入缓存,冷热数据分离

进一步提升了服务器针对请求的处理能力。

Redis在一个分布式系统当中,通常扮演着缓存的角色

引入的问题:数据库和缓存的数据的一致性。

6.引入分库分表,数据库能够进一步扩展存储空间

7.引入微服务,从业务上进一步拆分应用服务器

  从业务功能的角度,把应用服务器,拆分成更多更单一,更小,更简单的服务器。

相关文章:

浅谈Redis和分布式系统

浅谈Redis Redis用于存储数据,且在内存当中进行存储。 但是在日常编写代码中,定义一个变量也就属于在内存当中存储一个数据。 Redis主要会在分布式系统当中发挥重要作用,如果只是单机程序,直接通过变量存储数据的方式会比使用Re…...

微信小程序onLoad加载定义好的函数

这里小程序开发中容易犯的错误-1 给客户做一个程序。需要在页面加载的时候在onLoad(options){}中加载定义好的函数,代码如下 onLoad(options) {get_week_()},运行时老报错 后来修改为正确的代码 onLoad(options) {this.get_week_()//必须加this},再尝试运行&#x…...

C++进阶:详细讲解继承

现在也是结束了初阶部分的内容,今天开始就进入进阶部分了。一刻也没有为初阶的结束而哀悼,立刻赶来“战场”的是进阶部分里的继承 文章目录 1.继承的概念和定义1.1继承的概念1.2继承的定义1.2.1继承的格式1.2.2再讲访问限定符(详讲protected)1.2.3**继承…...

第十一篇 - 应用于市场营销视频场景中的人工智能和机器学习技术 – Video --- 我为什么要翻译介绍美国人工智能科技巨头IAB公司(1)

IAB平台,使命和功能 IAB成立于1996年,总部位于纽约市。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司,互动广告局(IAB- the Interactive Advertising Bureau)自1996年成立以来,先后为700多家媒体…...

基于决策树实现葡萄酒分类

基于决策树实现葡萄酒分类 将葡萄酒数据集拆分成训练集和测试集,搭建tree_1和tree_2两个决策树模型,tree_1使用信息增益作为特征选择指标,B树使用基尼指数作为特征选择指标,各自对训练集进行训练,然后分别对训练集和测…...

上位机图像处理和嵌入式模块部署(qmacvisual三个特色)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 了解了qmacvisual的配置之后,正常来说,我们需要了解下不同插件的功能是什么。不过我们不用着急,可以继续学习下…...

电脑解锁后黑屏有鼠标--亲测!!不需要重装系统!!

问题:上周电脑黑屏,只有鼠标,鼠标还不能右键!! 中招:win10系统最新版火绒安全 ,那你有概率获得开机黑屏套餐一份。 原因是:火绒把我们的explorer删除了导致黑屏,这个文…...

Spring 事务的种类 ? 传播机制 ?

在Spring框架中,事务管理可以分为编程式事务和声明式事务两种主要形式。每种形式都有其特点和使用场景。以下是这两种形式的具体介绍: 编程式事务 编程式事务是通过编写代码来实现事务管理的。在Spring中,编程式事务管理通常通过Transactio…...

深入了解 Java 方法和参数的使用方法

Java 方法 简介 方法是一块仅在调用时运行的代码。您可以将数据(称为参数)传递到方法中。方法用于执行特定的操作,它们也被称为函数。 使用方法的原因 重用代码:定义一次代码,多次使用。提高代码的结构化和可读性。…...

自动驾驶技术解析与关键步骤

目录 前言1 自动驾驶主要技术流程1.1 车辆周围环境感知1.2 车辆和行人检测分析1.3 运动轨迹规划 2 关键技术概述2.1 车辆探测与图片输入2.2 行人检测2.3 运动规划2.4 电子地图2.5 轨迹预测2.6 交通灯分析2.7 故障检测 结语 前言 自动驾驶汽车作为未来交通领域的重要发展方向&a…...

[Electron]中IPC进程间通信

Electron中IPC 进程间通信 (IPC) 是在 Electron 中构建功能丰富的桌面应用程序的关键部分之一。在 Electron 中,进程使用 ipcMain 和 ipcRenderer 模块,通过开发人员定义的“通道”传递消息来进行通信。 本文介绍以下几个方面: 1-渲染进程到…...

数学建模-动态规划(美赛运用)

动态规划模型的要素是对问题解决的抽象,其可分为: 阶段。指对问题进行解决的自然划分。例如:在最短线路问题中,每进行走一步的决策就是一个阶段。 状态。指一个阶段开始时的自然状况。例如:在最短线路问题中&#xff…...

bat文件给多个Android设备安装apk

本文是安装一个apk 1、确保以下3个文件在同一个目录下 1>要安装的apk,这里是mmb.apk 2>设备名单,保存在.txt文件中,一行一个设备名,设备名通过adb devices获取,截图中是两个设备 txt文件中的样式 3>要运行…...

[数据集][目标检测]光伏板太阳能板缺陷检测数据集VOC+YOLO格式2400张3类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2400 标注数量(xml文件个数):2400 标注数量(txt文件个数):2400 标注…...

深入浅出计算机网络 day.1 概论④ 计算机网络的定义和分类

不要退却,要绽放魅力 我的心会共鸣 和你 —— 24.3.9 一、计算机网络的定义 计算机网络早期的一个最简单定义 现阶段计算机网络的一个较好的定义 二、计算机网络的分类 按交换方式分类 按使用者分类 按传输介质分类 按覆盖范围分类 按拓扑结构分类,可…...

rust引用-借用机制扩展

rust引用-借用机制还是有限制的,比如我们要在多次函数调用中修改参数、跨线程传递参数并发修改的场景,单纯使用引用-借用机制就不灵了(这种场景和引用-借用设计思想是冲突的)。这时需要借助rust提供的Rc、Arc、Cell、RefCell对机制…...

JVM的工作流程

目录 1.JVM 简介 2.JVM 执行流程 3. JVM 运行时数据区 3.1 堆(线程共享) 3.3 本地方法栈(线程私有) 3.4 程序计数器(线程私有) 3.5 方法区(线程共享) 4.JVM 类加载 ① 类…...

kibana配置 dashbord,做可视化展示

一、环境介绍 这里我使用的kibana版本为7.17版本。 语言选择为中文。 需要已经有es,已经有kibana,并且都能正常访问。 二、背景介绍 kibana的可视化界面,可以配置很多监控统计界面。非常方便,做数据的可视化展示。 这篇文章&…...

前后端分离项目Docker部署指南(下)

目录 前言: 一.安装nginx 创建目录 上传nginx.conf至/data/nginx/conf文件夹中 运行启动容器 上传静态资源文件 ​编辑 访问结果 前言: 在上一篇博客中,我们深入探讨了如何使用Docker部署一个前后端分离的项目中的后端部分。我们构建…...

算法->位运算

有关位运算的操作符 >> <<&|^~ 常见位运算操作 给定一个数&#xff0c;确定它的二进制中第x位是0还是1 (n >> x) & 1; 将一个数n的二进制中第x位修改为1 n | (1 << x) 将一个数n的二进制中第x位修改为0 n & (~(1 << x)) 提…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

Python 训练营打卡 Day 47

注意力热力图可视化 在day 46代码的基础上&#xff0c;对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...

简单介绍C++中 string与wstring

在C中&#xff0c;string和wstring是两种用于处理不同字符编码的字符串类型&#xff0c;分别基于char和wchar_t字符类型。以下是它们的详细说明和对比&#xff1a; 1. 基础定义 string 类型&#xff1a;std::string 字符类型&#xff1a;char&#xff08;通常为8位&#xff09…...

python打卡day49@浙大疏锦行

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 一、通道注意力模块复习 & CBAM实现 import torch import torch.nn as nnclass CBAM(nn.Module):def __init__…...

MyBatis-Plus 常用条件构造方法

1.常用条件方法 方法 说明eq等于 ne不等于 <>gt大于 >ge大于等于 >lt小于 <le小于等于 <betweenBETWEEN 值1 AND 值2notBetweenNOT BETWEEN 值1 AND 值2likeLIKE %值%notLikeNOT LIKE %值%likeLeftLIKE %值likeRightLIKE 值%isNull字段 IS NULLisNotNull字段…...