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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】简单模拟C语言文件标准库FILE

👦个人主页:Weraphael ✍🏻作者简介:目前正在学习c和算法 ✈️专栏:Linux 🐋 希望大家多多支持,咱一起进步!😁 如果文章有啥瑕疵,希望大佬指点一二 如果文章对…

Java进阶学习笔记10——子类构造器

子类构造器的特点: 子类的全部构造器,都会先调用父类的构造器,再执行自己。 子类会继承父类的数据,可能还会使用父类的数据。所以,子类初始化之前,一定先要完成父类数据的初始化,原因在于&…

【Java面试】一、Redis篇(上)

文章目录 0、准备1、缓存穿透:不存在的key2、缓存击穿:热点key过期3、缓存雪崩:大批key同时过期4、双写一致性4.1 要求高一致性4.2 允许一定的一致延迟 5、面试 0、准备 Redis相关概览: 以简历上所列的项目为切入点,展…

C语言/数据结构——队列的实现

一.前言 今天我们来聊一聊数据结构的一部分——队列。今天我们主要涉及队列的基本概念结构,以及队列的基本实现。 二.正文 1.1队列 1.12队列的概念及结构 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表&#xf…

ue5 中ps使用记录贴

一、快捷键记录 放大图形 ctrlalt空格 放大图形 缩小视口 ctrl空格 ctrlD 取消选区 ctrlt缩小文字 w魔棒工具 选择魔棒的时候把容差打开的多一点 二、案例 移动文字 在相应的图层选择 移动文字 修改图片里的颜色 在通道里拷贝红色通道,复制红色通道粘贴给正常图…

【ELK日志收集过程】

文章目录 为什么要使用ELK收集日志ELK具体应用场景ELK日志收集的流程 为什么要使用ELK收集日志 使用 ELK(Elasticsearch, Logstash, Kibana)进行日志收集和分析有多种原因。ELK 堆栈提供了强大、灵活且可扩展的工具集,能够满足现代 IT 系统对…

CIM模型

CIM 是 Esri 制图信息模型。 它是一个地图内容规范,用于记录在保存、读取、引用或打开时如何永久保留描述不同项目组件的信息。 该规范以 JSON 表示,适用于 ArcGIS 应用程序和 API 中的地图、场景、布局、图层、符号和样式。 CIM 不仅限于制图设置。 要了解属性的组织方式以及…

使用vue3实现右侧瀑布流滑动时左侧菜单的固定与取消固定

实现效果 实现方法 下面展示的为关键代码,想要查看完整流程及代码可参考https://blog.csdn.net/weixin_43312391/article/details/139197550 isMenuBarFixed为控制左侧菜单是否固定的参数 // 监听滚动事件 const handleScroll () > {const scrollTopThreshol…

数据库系统基础知识

一、基本概念 二、数据库三级模式两级映像 三、数据库的分析与设计过程 四、数据模型 五、关系代数 六、数据库完整性约束 七、关系型数据库SQL简介 八、关系数据库的规范化 九、数据库的控制功能 十、数据仓库与数据挖掘基础 十一、大数据基本概念 数据库基本概念 1、数据库…

Spring 对于事务上的应用的详细说明

1. Spring 对于事务上的应用的详细说明 文章目录 1. Spring 对于事务上的应用的详细说明每博一文案2. 事务概述3. 引入事务场景3.1 第一步:准备数据库表3.2 第二步:创建包结构3.3 第三步:准备对应数据库映射的 Bean 类3.4 第四步:…

hcia datacom学习(10):交换机基础

1.二层交换机工作原理 1.1交换机的5种行为 查看mac地址表的命令为 dis mac-address *一个MAC只能关联在一个接口上,一个接口上可以学习多个MAC *mac地址漂移:mac表中,mac地址的出接口从一个端口变为另一个端口的现象。 造成mac漂移的原因…

操作系统实验四 (综合实验)设计简单的Shell程序

前言 因为是一年前的实验,很多细节还有知识点我都已经遗忘了,但我还是尽可能地把各个细节讲清楚,请见谅。 1.实验目的 综合利用进程控制的相关知识,结合对shell功能的和进程间通信手段的认知,编写简易shell程序&…

轻松拿捏C语言——【字符函数】字符分类函数、字符转换函数

🥰欢迎关注 轻松拿捏C语言系列,来和 小哇 一起进步!✊ 🌈感谢大家的阅读、点赞、收藏和关注💕 🌹如有问题,欢迎指正 感谢 目录👑 一、字符分类函数🌙 二、字符转换函数…

Spring MVC/Web

1.Spring MVC 的介绍 Spring Web MVC是基于Servlet API构建的原始Web框架,也是Spring框架的一部分。它提供了灵活可扩展的MVC架构,方便开发者构建高性能的Web应用程序,并与 Spring 生态系统无缝集成。 2.MVC 设计模式 MVC(Model…

【游戏引擎】Unity脚本基础 开启游戏开发之旅

持续更新。。。。。。。。。。。。。。。 【游戏引擎】Unity脚本基础 Unity脚本基础C#语言简介C#基础 Unity脚本基础创建和附加脚本MonoBehaviour生命周期生命周期方法 示例脚本 Unity特有的API常用Unity API 实践示例:制作一个简单的移动脚本步骤1:创建…

SpringCloud系列(30)--准备使用Hystrix的前期工作,创建服务消费者模块

前言:在上一章节中我们创建了服务提供者模块,而本节内容则是创建服务消费者模块。 1、创建一个服务提供者模块,命名为cloud-consumer-feign-hystrix-order80 (1)在父工程下新建模块 (2)选择模块的项目类型为Maven并选择模块要使用的JDK版本 …

Ansible自动化运维中的Setup收集模块应用详解

作者主页:点击! Ansible专栏:点击! 创作时间:2024年5月22日13点14分 💯趣站推荐💯 前些天发现了一个巨牛的🤖人工智能学习网站,通俗易懂,风趣幽默&#xf…

分享:怎么才能保证大数据查询的准确性?

随着大数据应用到金融风控领域,大数据越来越重要了,很多朋友在查大数据的时候都会遇到一个问题,那就是自己查询的大数据什么信息都没有,要么就是很少,这是什么原因呢?要怎么才能保证大数据查询的准确性呢?下面小编就…

WordPress搭建流程

1. 简介 WordPress 是一个 PHP 编写的网站制作平台。WordPress 本身免费,并且拥有众多的主题可以使用,适合用于搭建个人博客、公司官网、独立站等。 2. 环境准备 2.1 WordPress 下载 WordPress 可以在 Worpress中文官网 下载(如果后续要将后台调成中文的话,一定要从中文…

如何通过软件SPI读写W25Q64

STM32F1之SPI通信软件SPI代码编写-CSDN博客 目录 1. W25Qxx系列简介 2. W25Q64硬件电路 3. W25Q64框图 4. Flash操作注意事项 5. 代码编写 5.1 初始化 5.2 W25Q64读取ID号 5.3 W25Q64写使能 5.4 W25Q64等待忙 5.5 W25Q64页编程 5.6 W25Q64扇区擦除&#x…