浅谈Redis和分布式系统

news2025/9/17 12:58:47

浅谈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.引入微服务,从业务上进一步拆分应用服务器

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

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

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

相关文章

域名交易系统已测试可正常使用免授权带后台

域名交易系统已测试可正常使用免授权带后台 下载地址:迅雷云盘

CSS中元素的层叠顺序

层叠顺序,英文称作 stacking order,表示元素发生层叠时有着特定的垂直显示顺序。下面是盒模型的层叠规则: 对于上图,由上到下分别是: (1)背景和边框:建立当前层叠上下文元素的背景…

首屏性能优化:提升用户体验的秘籍

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

动态规划(算法竞赛、蓝桥杯)--数位DP--Windy树

1、B站视频链接&#xff1a;E37 数位DP Windy数_哔哩哔哩_bilibili 题目链接&#xff1a;[SCOI2009] windy 数 - 洛谷 #include <bits/stdc.h> using namespace std; const int N 12; int a[N]; //把整数的每一位数字抠出来&#xff0c;存入数组 int f[N][10]; /…

Unity L屏幕实现方式(已抛弃)

效果 右侧主要的参数&#xff1a;Line参数能够调整中间线的高度&#xff0c;PointXY能够调整整个下方弯曲图像的比例。 使用的是RenderTexture填充RawImage显示的方式&#xff0c;需要将一张RenderTexture设置位摄像机的输出内容。 ShaderGraph 由于这个采用了一定的数学模型…

linux多线程编程使用互斥量的原理分析和应用实例

目录 概述 1 保护对共享变量的访问&#xff1a;互斥量 1.1 认识互斥量 1.2 互斥锁API 1.2.1 互斥锁初始化函数 1.2.2 互斥锁函数 1.2.3 互斥锁变体函数 1.3 互斥锁使用方法 1.4 互斥锁死锁 2 互斥量的应用介绍 2.1 创建与销毁 2.1.1 创建互斥量 2.1.2 销毁互斥量 …

Python图像处理:1.插值、频域变换与对比度增强

一、几何变换 7.图像的插值 (1)原理介绍 下面对比三种插值方法&#xff0c;分别是最近邻插值法、双线性插值法、卷积插值法&#xff0c;三种方法的前提和特点、优缺点、适用场景如下&#xff1a; 最近邻插值&#xff08;Nearest Neighbor Interpolation&#xff09;&#xf…

简单认识Linux

今天带大家简单认识一下Linux&#xff0c;它和我们日常用的Windows有什么不同呢&#xff1f; Linux介绍 Linux内核&发行版 Linux内核版本 内核(kernel)是系统的心脏&#xff0c;是运行程序和管理像磁盘和打印机等硬件设备的核心程序&#xff0c;它提供了一个在裸设备与…

线上应用部署了两台load为1四核服务器

线上应用部署了两台服务器。 项目发布后&#xff0c;我对线上服务器的性能进行了跟踪&#xff0c;发现一台负载为3&#xff0c;另一台负载为1&#xff0c;其中一台四核服务器已经快到瓶颈了&#xff0c;所以我们紧急排查原因。 1、使用TOP命令查看占用CPU较大的负载和进程&…

鸿蒙OpenHarmony HDF 驱动开发

目录 序一、概述二、HDF驱动框架三、驱动程序四、驱动配置坚持就有收获 序 最近忙于适配OpenHarmonyOS LiteOS-M 平台&#xff0c;已经成功实践适配平台GD32F407、STM32F407、STM32G474板卡&#xff0c;LiteOS适配已经算是有实际经验了。 但是&#xff0c;鸿蒙代码学习进度慢下…

Kotlin dist downloading failed

现象&#xff1a; 在使用AndroidStudio编写Flutter项目时总是在工具的右下角提示错误信息 该问题通常在刚刚打开AndroidStudio时报出&#xff0c;但可以正常编译和运行flutter项目即Android项目 分析&#xff1a;Flutter项目组认为这是AndroidStudio工具平台本身的问题非Flut…

AI智能应用百科立即落地实操课

该课程旨在教授学员如何将AI智能应用于实际场景。通过深入的案例研究和实操练习&#xff0c;学员将学会应用机器学习、自然语言处理等技术&#xff0c;快速解决现实问题。课程强调实际操作&#xff0c;帮助学员快速运用AI技术解决工作中的挑战。 课程大小&#xff1a;3.3G 课…

pytorch安装记录

pytorch安装记录 1 安装anconda2 安装pycharm3 安装显卡驱动4 根据显卡驱动版本下载CUDA5 cudnn安装6 根据CUDA版本安装pytorch7 pytorch卸载 1 安装anconda 下载地址: https://www.anaconda.com/download#downloads 验证是否安装成功&#xff1a;打开cmd, 输入 conda 验证环…

复盘-excel

excel-选列没有用&#xff0c;选小标题才可以 将簇状柱形图放置在一个新表上##### excel: 添加数据模型时&#xff0c;要通过套用表格格式与外部断开连接 透视分析2010年人数未解决(第四套&#xff09; 通过日期显示星期几 判断星期几 因为前面已经通过星期六&#xff0c…

贪心算法(蓝桥杯 C++ 题目 代表 注解)

介绍&#xff1a; 贪心算法&#xff08;Greedy Algorithm&#xff09;是一种在每一步选择中都采取当前状态下最好或最优&#xff08;即最有利&#xff09;的选择&#xff0c;从而希望最终能够得到全局最好或最优的结果的算法。它通常用来解决一些最优化问题&#xff0c;如最小生…

sentinel prometheus指标收集及资源规则正则表达式实现

sentinel 支持 prometheus 收集指标 实现原理 在 sentinel-extension 模块下&#xff0c;新增 sentinel-prometheus-metric-exporter 模块。依赖Prometheus 提供的 simpleclient 和 simpleclient_httpserver 来实现 exporter。 依赖 simpleclient 主要是为了实现自定义Collect…

Chrome中如何导出和导入书签

导出书签 如下图所示&#xff1a; 右上角三点->书签和清单->书签管理器->右上角三点->导出书签 然后你选择保存地址即可。打开后如下&#xff1a; 导入书签 如下图所示&#xff1a; 右上角三点->书签和清单->导入书签和设置->选择以前导出的书签&…

贪吃蛇(C语言实现)

贪食蛇&#xff08;也叫贪吃蛇&#xff09;是一款经典的小游戏。 —————————————————————— 本博客实现使用C语言在Windows环境的控制台中模拟实现贪吃蛇小游戏。 实行的基本功能&#xff1a; • 贪吃蛇地图的绘制 • 蛇吃食物的功能&#xff08;上、…

Pytorch学习 day08(最大池化层、非线性激活层、正则化层、循环层、Transformer层、线性层、Dropout层)

最大池化层 最大池化&#xff0c;也叫上采样&#xff0c;是池化核在输入图像上不断移动&#xff0c;并取对应区域中的最大值&#xff0c;目的是&#xff1a;在保留输入特征的同时&#xff0c;减小输入数据量&#xff0c;加快训练。参数设置如下&#xff1a; kernel_size&#…

四、DMSP/OLS等夜间灯光数据贫困地区识别——相对误差相关折线图制作

一、前言 前文对于MPI和灯光指数拟合、误差分析&#xff0c;本文重点介绍地理加权分析&#xff0c;但是在此之前给大家介绍一下专业表格制作&#xff0c;其实专业的软件有很多像Orgin、棱镜等&#xff0c;到我们熟知的Excel&#xff0c;其实各有千秋&#xff0c;Excel入手容易…