当前位置: 首页 > 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)) 提…...

好写作AI的AIPPT秘籍:让论文变身炫酷学术秀的魔法棒

在学术的浩瀚宇宙中&#xff0c;每一篇论文都是一颗独特的星辰&#xff0c;蕴含着研究者的智慧与心血。然而&#xff0c;如何让这些星辰在学术会议的舞台上璀璨夺目&#xff0c;吸引众人的目光&#xff1f;答案或许就藏在好写作AI的AIPPT功能里——这根神奇的魔法棒&#xff0c…...

从原理到实战:用Qt和C++手搓一个带容错的二维码生成器

从原理到实战&#xff1a;用Qt和C手搓一个带容错的二维码生成器 二维码技术早已渗透到我们生活的方方面面&#xff0c;从支付扫码到产品溯源&#xff0c;这项诞生于1994年的技术因其高密度编码和容错能力成为移动互联网时代的重要入口。但你是否想过抛开现成的库&#xff0c;亲…...

终极音乐解锁指南:5种方法解决主流音乐平台加密格式限制

终极音乐解锁指南&#xff1a;5种方法解决主流音乐平台加密格式限制 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库&#xff1a; 1. https://github.com/unlock-music/unlock-music &#xff1b;2. https://git.unlock-music.dev/um/web 项目地址: htt…...

C#进阶-特性全知识点总结

前言&#xff1a;特性就像是给代码贴上的**“标签”或“注释”。但它不仅仅是给程序员看的注释&#xff0c;它还是给编译器或程序本身**看的。通过这些标签&#xff0c;你可以告诉程序&#xff1a;“这个方法已经过时了”或者“这个类在保存到数据库时叫另一个名字一什么是特性…...

华硕笔记本性能调控终极方案:G-Helper轻量级工具完全指南

华硕笔记本性能调控终极方案&#xff1a;G-Helper轻量级工具完全指南 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix,…...

收藏!程序员必看:AI冲击下,如何不被大厂裁员和低薪offer淘汰?

文章指出当前IT市场因大厂降本增效、AI编程工具发展、供过于求及业务增长放缓等因素&#xff0c;导致程序员求职难度加大、薪资增长空间缩小。文章强调AI并未完全取代程序员&#xff0c;而是提高了对程序员的能力要求&#xff0c;如业务理解、架构能力等。建议程序员积极拥抱AI…...

EdgeRemover深度解析:如何优雅解决Windows Edge卸载难题?

EdgeRemover深度解析&#xff1a;如何优雅解决Windows Edge卸载难题&#xff1f; 【免费下载链接】EdgeRemover A PowerShell script that correctly uninstalls or reinstalls Microsoft Edge on Windows 10 & 11. 项目地址: https://gitcode.com/gh_mirrors/ed/EdgeRem…...

终极Dell G15散热控制指南:从新手到专家的完整解决方案

终极Dell G15散热控制指南&#xff1a;从新手到专家的完整解决方案 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 还在为Dell G15游戏本的过热问题而烦恼吗&a…...

Source Insight阅读Linux内核源码时结构体跳转失败的3种修复方法(附详细步骤)

Source Insight高效阅读Linux内核源码的深度实践指南 作为一名长期与Linux内核打交道的开发者&#xff0c;我深知代码导航工具的重要性。Source Insight作为老牌代码阅读利器&#xff0c;在大型项目如Linux内核中偶尔会出现结构体跳转失效的情况。本文将分享几种经过验证的解决…...

Python实战研招网数据采集:从反爬策略到数据可视化的完整指南

1. 项目背景与核心挑战 最近在帮朋友分析考研数据时&#xff0c;发现研招网的信息虽然全面但查询起来特别麻烦。手动收集不同学校、专业的招生信息简直是个噩梦&#xff0c;这让我萌生了用Python自动化采集数据的想法。不过实际操作起来才发现&#xff0c;研招网的反爬机制比想…...