Redis:分布式系统

文章目录

  • 认识Redis
    • Redis和MySQL
    • Redis的场景
    • Redis的设计
  • 分布式
    • 单机架构
    • 应用数据分离架构
    • 应用服务集群架构

认识Redis

在开始Redis学习前,要先认识一下Redis

Redis的设计,是想要把它当做是一个数据库,一个缓存,或者说是一个消息中间件等,它的主要目的是可以在内存当中进行数据的存储

那么现在问题是,对于数据库来说,应该已经有MySQL这样的内容,那为什么还需要有Redis来作为一个数据库呢?

Redis和MySQL

不可否认,MySQL确实是一个很不错的数据库软件,但是它最大的问题在于,它的访问速度比较慢,这个慢是相较于在内存当中的,因为MySQL本质上是存储在磁盘上的,而如果使用Redis作为数据库,必然会比在磁盘上要快很多,因为这是在内存当中的

但是Redis就一定比MySQL要强吗?这必然也不是的,Redis和MySQL比起来最大的劣势在于,它的存储空间是有限的,这是一个很严重的问题,这就意味着,虽然有很多需要用到高性能的地方,但是终究是少数,大多数的业务其实都不需要用到特别高的性能

那么有什么特别好的方案呢?可以中和一下Redis和MySQL的优点,并且还能有一个比较好的解决方案?那就是把Redis和MySQL结合起来进行使用,也就是我们平时所说的二八原则

二八原则

所谓二八原则,说的是20%的热点数据可以满足80%数据的要求,所以一个比较好的解决方案是,如果能够把MySQL当中比较常用的数据缓存到Redis当中,这样就能对于大多数的请求都能得到数据,而对于不常用的数据再到对应的磁盘去读取,这就是一个比较不错的解决方案

Redis的场景

Redis是工作在分布式系统中的,它在这个环境中才能发挥出它应有的实力,如果只是单纯的单机程序,那么本质上来说如果使用变量来进行数据的存储其实是一个比较不错的解决方式,此时其实是比使用Redis更加优秀的选择

我们在学习操作系统的时候知道,在进行进程的通信时,不能直接进行数据的访问,这是因为进程和进程之间是可以进行数据的隔离的,数据要被进程进行隔离的,而有一种进程通信是借助网络进行通信,所以Redis本质上来说就可以把自己内存中的变量给其他的进,甚至可以直接用其他主机的进程来进行数据的访问,这样就解决了刚才所说的场景,这也是Redis的一个使用场景

Redis的设计

Redis设计的初心,是打算把它当做一个消息中间件来进行处理的,也就是所谓的消息队列,这样就可以在分布式系统下使用一个生产者消费者的模型,但是遗憾的是,现在很少有这样的使用场景,反而是有更加专业的消息中间件来取代Redis的功能,不过Redis依旧是被使用十分广泛的中间件

分布式

前面聊完了Redis的基本认识,那么下面就要简单对于分布式进行一个认识了

单机架构

在进行了解分布式之前,先了解一下什么是单机架构

在这里插入图片描述
如上所示就是一个单机架构,对于单价架构来说,就是只有一台服务器,这个服务器可以负责处理所有的工作

我们假设这是一个电商网站,那么这个应用服务其实就是我们写的一个服务器程序,比如说有前面写的一个C++的httplib这样的程序,而这样的HTTP服务器是可以和MySQL数据库的服务进行结合起来的,那么对于MySQL来说,它本质上其实是一个客户端服务端结构的高层许,本体上是一个MySQL的服务器,这个服务器来负责进行数据的存储和组织的部分

而在大多的项目中,其实使用的就是这种比较典型的单机架构,单机架构的特点其实就是简单,并且由于现在计算机的硬件已经发达到了一定的程度,所以哪怕只有一个主机,其实已经是可以有比较高的性能了,可以支持比较大的并发和数据的存储

但是事实上,当业务到达一定程度的时候,其实一个主机已经很难进行处理了,那么就需要用到的是主机,其实本质上是硬件资源

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

这句话其实很好理解,因为在一台主机上,它的硬件资源包括但不限于有CPU,内存,硬盘,网络等等,当服务器收到请求的时候,其实都是需要消耗这些资源的,在同一时刻,如果处理的请求比较多,那么就会造成此时的某个硬件资源就不够用,那这是一个比较大的问题,对应该如何进行解决呢?

开源和节流

解决方式也比较简单,开源或者节流,下面一一进行分析

对于开源来说,其实就是新增一些新的硬件资源,比如说可以引入更大的内存,或者新加一些内存条等,但是这样的设计也是有问题的,因为一个硬件的数量是有限的,这就意味着,一个主机的性能是有上限的,当我们需要的性能到达这个瓶颈的时候,本质上就需要新增主机来进行资源

从某种意义来说,如果一旦引入了多台主机,就可以把系统称之为分布式系统了

对于节流来说,就需要用到一些专业知识来对于数据进行优化,需要对于性能测试来看到底是哪个模块出现了问题,这一般需要比较高的水平

应用数据分离架构

所以就引出了下面的这种架构体系模式,可以把应用服务器和存储服务器分开,例如:

在这里插入图片描述
下面分开来看这两个模块:

应用服务器:

对于应用服务器来说,里面可能包含有很多的业务,这些业务都会需要进行CPU和内存的资源

数据库服务器:

对于这种服务器来说,它就需要更大的磁盘空间,更快的数据访问速度,因此可以搭配有对应的SSD硬盘等

把这两个服务器进行分离,就可以到达一个更高的性价比

应用服务集群架构

应用服务器通常来说比较吃CPU和内存,那么如果CPU和内存都被吃掉了,那此时应用服务器就无法满足要求了,那此时怎么办?

其实一个比较好的解决措施就是多来几个应用服务器即可,这样就可以解决这样的问题,具体的设计模式如下所示:

在这里插入图片描述
看起来是两个应用服务器,实际上也可能是多个应用服务器,而对于应用服务器来说,用户的请求实际上会优先到达负载均衡器或者是网关服务器,之后会被分配到每一个应用服务器,所以这也就使得会诞生很多种不同的算法,来进行合适的分配

假设现在有1w个请求,经过分配后就可以让每一个服务器去分担5k个,这样就实现了分配的道理

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Selenium + Pytest自动化测试框架实战(下)

前言 本文接上篇文章哟。 一、简单学习元素定位 在日常的工作中,我见过很多在浏览器中直接在浏览器中右键Copy Xpath复制元素的同学。这样获得的元素表达式放在 webdriver 中去运行往往是不够稳定的,像前端的一些微小改动,都会引起元素无法…

采油厂职工向媒体投稿的好方法找到了

作为一名采油厂的职工,我深知在媒体上定期投稿的重要性。这不仅是我们展示工作成果、传播企业文化的重要途径,更是上级考核我们工作表现的一项指标。然而,在投稿的过程中,我经历了不少心酸与困扰。 起初,我采用传统的邮箱投稿方式。每天,我都会花费大量时间在网络上搜索合适的媒…

浏览器执行渲染原理

一、事件循环 事件循环(Event Loop)是JavaScript的执行环境的核心概念之一,它负责处理JavaScript中的异步操作和执行顺序。事件循环使得JavaScript能够在单线程上有效地处理并发,同时保持编程模型的简单性。 以下是事件循环的一…

直播预告 | 明晚19:00,「低代码开放麦」6家低代码领军者线上论道

⏰5月14日晚19:00-20:30【低代码开放麦】邀请到 华为云Astro低代码产品经理高妍 得帆信息aPaaS业务线副总裁&PMO总监 李健达 上海博科Yigo平台研发部总经理、副总裁周志军 零赛云生态发展总监徐健林 普元信息事业部副总经理郝振明 致远互联高级咨询总监纪闪 线上论道…

netstat命令详解

netstat网络连接分析工具 工具说明: netstat 是一款命令行工具,主要是用于列出系统上所有的网络套接字连接情况,包括 tcp, udp 以及 unix 套接字,另外它还能列出处于监听状态(即等待接入请求)的套接字。除…

【linux-IMX6ULL-uboot初次编译及烧录

目录 1. uboot基本概念1. 1 uboot的编译 3. uboot的烧录2. uboot的烧录结果 第一次不进行原理性的探究,也不关注源码内容,只是进行一个直观的了解,对uboot进行初次编译并进烧录到IMX6ULL板卡中 1. uboot基本概念 U-Boot(Universa…

RobbitMQ基本消息队列的消息接收

1.先给工程引入依赖 父工程有了子工程就不用导了 <!--AMQP依赖&#xff0c;包含RabbitMQ--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency> 2.配置yml…

2024电商数据资料汇总

2024年跨境电商&#xff1a;连接全球市场的新纪元 随着全球数字化进程的不断推进&#xff0c;跨境电商已经成为了国际贸易的重要组成部分。2024年&#xff0c;跨境电商行业迎来了一系列挑战和机遇&#xff0c;塑造了全新的市场格局。 跨境电商市场规模的持续扩大 2024年&…

ARP中间人

文章目录 ARP中间人ARP协议介绍使用kali进行ARP毒化使用kali进行ARP中间人使用kali进行ARP钓鱼ARP攻击防御ARP总结 ARP中间人 ARP协议介绍 维基百科ARP介绍 ARP&#xff08;地址解析协议&#xff09;在网络通信中扮演着至关重要的角色&#xff0c;它通过将网络层地址&#x…

基于单片机的自动售货机系统

基于单片机的售货机系统 &#xff08;仿真&#xff0b;程序&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.货物种类一共设有8种&#xff0c;这8种商品通过选择按键进行选择确认&#xff1b; 2.通过数量选择按键确定购买数量&#xff0c;价格规定为1-8…

[ACTF新生赛2020]SoulLike

没见过的错误&#xff1a; ida /ctg目录下的hexrays.cfg文件中的MAX_FUNCSIZE64 改为 MAX_FUNCSIZE1024 然后就是一堆数据 反正就是12个字符 from pwn import * flag"actf{" k0 for n in range(12):for i in range(33,127):pprocess("./SoulLike")_flag…

宝塔纯净版 7.6.0版本无需手机登录 [稳定版本/推荐]

下载地址&#xff1a;宝塔纯净版 7.6.0版本无需手机登录.zip 宝塔纯净版介绍 无需手机登录&#xff1a;不再有手机登录提示&#xff0c;或按照提示输入任意手机号密码即可模拟绑定&#xff1b; 安全&#xff1a;剥离了所有与宝塔官方的通信、上报、下发&#xff1b;并且不与…