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

1.Redis之初识Redis分布式系统

1.初识Redis

1.1 官网

Redis中文网

Redis 教程 | 菜鸟教程 (runoob.com)

1.2 解释

在内存中存储数据

定义变量,不就是在内存中存储数据嘛??

Redis 是在分布式系统(进程的隔离性:Redis 就是基于网络,可以把自己内存中的变量给别的进程甚至别的主机的进程进行使用。)中,才能发挥威力的~~

如果只是单机程序,直接通过变量存储数据的方式是比使用 Redis 更优的选择

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

1.3 用途

可用作数据库,高速缓存和消息队列代理(Redis的初心:最初就是用来作为一个"消息中间件"的(消息队列)分布式系统下的生产者消费者模型,但现在很少用)

1.数据库

优势:Redis速度快,因为Redis在内存中存储,而Mysql在硬盘中存储。

劣势:存储空间有限

  • 如何做到又大又快???
  • Redis和Mysql结合起来->(会导致系统的复杂程度大大提升)

2.分布式系统 

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

如果业务进一步增长,用户量和数据量都水涨船高,,一台主机难以应付的时候,就需要引入更多的主机, 引入更多的硬件资源~~ 

  • 为什么难以应付???

一台主机的硬件资源是有上限的!!! 

包括不限于以下几种:
1. CPU
2.内存
3.硬盘
4. 网络
5......

服务器每次收到一个请求,都是需要消耗上述的一些资源的~~
如果同一时刻,处理的请求多了,此时就可能会导致某个硬件资源不够用了!!!
无论是哪个方面不够用了,都可能会导致服务器处理请求的时间变长~甚至于处理出错~~

  • 如果我们真的遇到了这样的服务器不够用的场景,怎么处理呢?

1.开源
简单粗暴,增加更多的硬件资源~

一个主机上面能增加的硬件资源也是有限的,取决于主板的扩展能力~~
2.节流-软件上优化.

(各凭本事了,需要通过性能测试,找到是哪个环节出现了瓶颈,再去对症下药)

->一台主机扩展到极限了,但是还不够~~就只能引入多台主机了!!!

->不是说新的机器买来就直接可以解决问题了.也需要软件上做出对应的调整和适配~~

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

引入分布式,这是万不得已~~无奈之举~~系统的复杂程度会大大提高~~出现 bug 的概率越高

  • 应用服务(第一个服务器)和数据库服务(第二个服务器)分离 

 

  • 引入更多的应用服务器节点

负载均衡器:公平公正的“平均分配”(涉及很多的算法)

  • 负载均衡器,看起来不是承担了所有的请求嘛?这个东西能顶住嘛??

负载均衡器,对于请求量的承担能力,要远超过应用服务器的.
负载均衡器,是领导, 分配工作,
应用服务器,是组员,执行任务

引入更多机器->请求量太大

  • 是否可能会出现,请求量大到负载均衡器也扛不住了呢??

也是有可能的!!!引入更多的负载均衡器~~(引入多个机房)

当机器变多了,管理成本也会提高~~ 出现问题的概率也会提高

  • 如上面讨论,增加应用服务器,确实能够处理更高的请求量但是随之存储服务器,要承担的请求量也就更多了!!!咋办?

主要进行开源

开源(引入更多的机器)+节流(门槛高, 更复杂)
引入更多的机器->读写分离~

主服务器一般是一个.

从服务器可以有多个~~(一主多从)
同时从数据库通过负载均衡的方式,让应用服务器进行访问~~

数据冷热区分->响应速度慢

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

  • 如何解决???

把数据区分"冷热",热点数据放到缓存中~缓存的访问速度往往比数据库要快很多了!!

要想得到一个效果,就要付出一定的代价~~~
欲戴其冠,必承其重!!!

分库分表->存储空间不足 

  • 引入分布式系统,不光要能够去应对更高的请求量(并发量),同时也要能应对更大的数据量~~是否可能会出现,一台服务器已经存不下数据了呢??

当然会存在!!!短视频~~虽然一个服务器,存储的数据量可以达到 几十个 TB,即使如此也可能会存不下~~台主机存不下,就需要多台主机来存储~~ 

微服务架构-解决人的问题

之前应用服务器,一个服务器程序里面做了很多的业务这就可能会导致这一个服务器的代码变的越来越复杂~~
为了更方便于代码的维护,就可以把这样的一个复杂的服务器,拆分成更多的,功能更单一,但是更小的服务器~~

(微服务)->服务器的种类和数量就增加了~~

【注意】微服务本质上是在解决"人"的问题~~(大厂才会考虑此情形)

当应用服务器复杂了~~势必就需要更多的人来维护了~~当人多了,就需要配套的管理,把这些人组织好~~
划分组织结构,分成多个组,每个组分别配备领导进行管理~~(分成多个组,就需要进行分工~~)

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

  • 引入微服务,解决了人的问题,付出的代价?

1.系统的性能下降~~(要想保证性能不下降太多,只能引入更多的机器,更多的硬件资源 =>充钱~~)

拆出来更多的服务,多个功能之间要更依赖

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

幸运的是,硬件技术的发展,网卡现在有 万兆 网卡【贵】,读写速度已经能过超过硬盘读写了~~

2.系统复杂程度提高, 可用性收到影响~~
服务器更多了,出现问题的概率就更大了~~
这就需要一系列的手段,来保证系统的可用性~~
(更丰富的监控报警,以及配套的运维人员)

微服务的优势

1.解决了人的问题.
2.使用微服务,可以更方便于功能的复用
3.可以给不同的服务进行不同的部署~~

2.1 基本概念

  • 应用(Application)/系统(System)

一个应用,就是一个/组 服务器程序

  • 模块(Module)/组件(Component)

一个应用,里面有很多个功能,每个独立的功能,就可以称为是一个 模块/组件

  • 分布式(Distributed)

物理上的多个主机引入多个主机/服务器, 协同配合完成一系列的工作.

  • 集群(Cluster)

逻辑上的多个主机,引入多个主机/服务器,协同配合完成一系列的工作.

  • 主(Master)/从(Slave)

分布式系统中一种比较典型的结构~~
多个服务器节点,其中一个是主,另外的是从,从节点的数据要从主节点这里同步过来~~

  • 中间件(Middleware)

和业务无关的服务(功能更通用的服务)
1.数据库
2. 缓存
3. 消息队列

  • 中间件(Middleware)

和业务无关的服务(功能更通用的服务)
1.数据库
2.缓存
3. 消息队列

  • 可用性(Availability)(最核心)

系统整体可用的时间/总的时间
一个系统的第一要务.
360/365 =>可用性~~
4个9即系统可以提供99.99%的可用性,5个9是99.999%

  • 响应时长(Response Time RT)

衡量服务器的性能
和具体服务器要做的业务密切相关的~~
越小越好~~

  • 吞吐(Throughput)ys并发(Concurrent)

衡量系统的处理请求的能力.衡量性能的一种方式

 

3.分布式系统小节

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

2.数据库和应用分离
应用程序和数据库服务器 分别放到不同主机上部署了

3.引入负载均衡, 应用服务器 =>集群
通过负载均衡器,把请求比较均匀的分发给集群中的每个应用服务器.【当集群中的某个主机挂了,其他的主机仍然可以承担服务~~提高了整个系统的可用性~-】

4.引入读写分离,数据库主从结构
一个数据库节点作为主节点,其他N个数据库节点作为从节点,
主节点负责 写 数据. 从节点负责 读 数据.
主节点需要把修改过的数据同步给从节点~二八原则【Redis 在一个分布式系统中,通常就扮演着缓存这样的角色~.引入的问题: 数据库和缓存的数据一致性问题~~】

5.引入缓存, 冷热数据分离
进一步的提升了服务器针对请求的处理能力.

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

7.引入微服务,从业务上进一步拆分应用服务器~~~从业务功能的角度,把应用服务器,拆分成更多的功能更单一,更简单, 更小的服务器.

上述这样的几个演化的步骤,只是一个粗略的过程.实际上一个商业项目,真实的演化过程,都是和他的业务发展密切相关的,业务是更重要的,技术只是给业务提供支持的
所谓的 分布式 系统, 就是想办法引入更多的硬件资源! 

相关文章:

1.Redis之初识Redis分布式系统

1.初识Redis 1.1 官网 Redis中文网 Redis 教程 | 菜鸟教程 (runoob.com) 1.2 解释 在内存中存储数据 定义变量,不就是在内存中存储数据嘛?? Redis 是在分布式系统(进程的隔离性:Redis 就是基于网络,可以把自己内存中的变量给别的进程…...

基于SpringBoot的网盘系统设计与实现

第1章 绪论... 1 1.1 研究背景与意义... 1 1.1.1 研究背景... 1 1.1.1 研究意义... 1 1.2 国内外研究现状... 2 1.2.1 国内研究现状... 2 1.2.2 国外研究现状... 3 1.3 论文组织架构... 4 第2章 关键技术介绍... 5 2.1 SpringBoot. 5 2.2 MySQL数据库... 5 2.3 MVC架…...

【C++初阶】vector

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿&#x1…...

elasticsearch 和 RediSerch

elasticsearch 和 RediSerch 前情提要 学习文章来自Docker 安装 ElasticSearch - 知乎 (zhihu.com) docker 安装 docker pull docker.io/elasticsearch:7.1.1启动! docker run -d --name es -p 9200:9200 -p 9300:9300 -e "discovery.typesingle-node" b0e9f9f0…...

删除MySQL中所有表的外键

方法一: 原理 查询schema中所有外键名称然后拼接生成删除语句 第一步: SELECT CONCAT(ALTER TABLE ,TABLE_SCHEMA,.,TABLE_NAME, DROP FOREIGN KEY ,CONSTRAINT_NAME, ;) FROM information_schema.TABLE_CONSTRAINTS c WHERE c.TABLE_SCHEMA数据库名…...

webstorm新建vue项目相关问题

前言 这个迭代后端需求偏少,前端code的键盘都起火星子了。来了4个外包支持,1个后端3个前端,还是不够用啊。刚好趁这个机会稍微学习下vue,其实之前环境也配置过了,所以这里就不分享环境配置了,主要分享下新建…...

2024年高考考务人员网上培训参考答案

第1部分:单选题 1. 关于试卷保密室负责人职责,以下说法不正确的是(B) [2分] A. 负责试卷的接收、保管和发放工作 B. 试卷保密室内屋门锁钥匙和铁柜门锁钥匙必须由同一人保管 C. 试卷接收和发放应当当面清点试卷袋数量&#…...

JavaEE之线程(9) _定时器的实现代码

前言 定时器也是软件开发中的一个重要组件. 类似于一个 “闹钟”。 达到一个设定的时间之后,就执行某个指定好的代码,比如: 在受上述场景中,当客户端发出去请求之后, 就要等待响应,如果服务器迟迟没有响应&…...

纯前端实现将页面数据下载word文档中【包括图片,echarts图,表格,和对话 内容】

亲测真实有效 导出word步骤 在Vue中导出Word文档,可以使用第三方库file-saver和html-docx-js。首先需要安装这两个库: npm install file-saver html-docx-js --save "html-docx-js": "0.3.1","file-saver": "2.0.5…...

JavaSE——类和对象(二)~~封装

目录 一.封装 二.封装扩展之包 三.static成员 四. 代码块 五. 内部类(重要) 大家好呀,我是北纬,接着上节我们继续讲解Java中关于类和对象的相关知识,今天着重给大家介绍一下关于面向对象程序的特性之一——封装。…...

头歌OpenGauss数据库-I.复杂查询第9关:交换性别

任务描述 本关任务:给定一张 tb_Salary 表,如下所示,有 m 男性 和 f 女性的值。交换所有的 f 和 m 值(例如,将所有 f 值更改为 m,反之亦然)。 idnamesexsalary1Elonf70002Donnyf80003Careym60…...

冷干机使用中的注意事项

冷干机使用中的注意事项 使用冷干机时,以下是几个注意事项: 安装位置:选择一个通风良好、温度适宜的位置安装冷干机。确保周围环境没有过多的灰尘、腐蚀性气体或其他污染物,以免对冷干机的正常运行和寿命产生不利影响。 电源要求…...

OpenFeign微服务调用组件使用

前言:OpenFeign是可以跨服务、跨进程的调用方式。 什么是Feign Feign是Netflix开发的声明式、模版化的HTTP客户端。 优势: Feign可以做到使用 HTTP 请求远程服务时就像调用本地方法一样的体验,开发者完全感知不到这是远程方法,更感知不到这…...

文心智能体,零代码构建情感表达大师智能体

前言 随着智能体技术的突飞猛进,各行各业正迎来前所未有的变革与机遇。智能体,作为人工智能领域的重要分支,以其自主性、智能性和适应性,正逐步渗透到我们生活的每一个角落,成为推动社会进步和科技发展的新动力。 为了…...

es6

# 一、变量提升性 let和const没有变量提升性 console.log(str) 》undefined var str 你好console.log(num) 报错 let num 你好console.log(a) 报错 const a 你好function demo (){ let n 2; if(true){ let n 1; } console.log(n) //2 const 也是一样 var 是1 } demo()const…...

「贪心算法」柠檬水找零

力扣原题链接,点击跳转。 假设你的手里没有钱。你要卖柠檬水,每杯5块钱。每个顾客有可能会给你5块钱、10块钱或20块钱,你要拿手中的钱找零。如何判断你能否成功找零呢? 如果一上来就有顾客花10块钱或20块钱,你手中没…...

ssm139选课排课系统的设计与开发+vue

选课排课系统的设计与开发vue 摘 要 互联网的普及,改变了人们正常的生活学习及消费习惯,而且也大大的节省了人们的时间,由于各种管理系统都再不断的增加,更方便了用户,也改良了很多的用户习惯。对于选课排课系统查询…...

Python使用virtualenv创建虚拟环境

目录 第一步:安装virtualenv 第二步:选择一个文件夹用来放所创建的虚拟环境 第三步:创建虚拟环境 第四步:激活虚拟环境 第五步:退出虚拟环境 第六步:测试安装django 前提:你得有个python环…...

LuatOS-Air二次开发学习

LuatOS简介 在介绍LuatOS-Air之前,先介绍下LuatOS。 LuatOS是合宙自研的嵌入式操作系统。覆盖各类物联网应用场景,可运行于4G Cat.1/MCU/NB-IoT/2G/Wi-Fi/蓝牙等等不同的物联网主控芯片。通过完善的嵌入式操作系统LuatOS,使得物联网主控CPU更…...

【Linux】关于获取进程退出状态中的core dump标志补充

通过 wait/waitpid 可以获取子进程的退出状态, 从而判断其退出结果. 记录退出状态的 int 变量 status 的使用情况如下图所示: 如果是收到信号终止的话, 低 7 位为收到的终止信号, 而低第 8 位为 core dump 标志, core dump 标志有什么用呢? core dump 标志只存 0/1, 表示是否…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

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

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

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...