Redis -- 前置知识

目录

简要

分布式系统

负载均衡

引入缓存

数据库分表

微服务                        

小结


简要

        redis是存储数据在内存中, 定义变量就是在内存中, 但是redis是在分布式系统中, 才能真正发挥威力, 如果只是单机程序, 那么直接通过变量来存储数据的方式将是最优的选择.

        redis是如何发挥威力的? 首先进程之间是具有隔离性的, 一个进程想要获取另外一个进程的变量, 由于隔离性是无法直接获取的, 需要进程之间的通信, 也就是通过网络的形式进行通信的, redis就是利用这一点进行了一个封装, 将内存中的变量分享给别的进程, 或者是别的主机的进程进行使用.

        redis现在已经被非常多的人使用, 他通常被当做数据库, 缓存流引擎, 中间件等等.

        不是有mysql吗? 为什么还需要redis? MySQL最主要的问题就是慢, 很多互联网多产品的性能要求是很高的. 如果要性能, 就需要使用除了MySQL的其他更高性能的技术, redis就是其中之一, redis是使用内存的作为数据库使用, 内存的速度是比外存的速度是快很多的.

        下面是各种存储器性能对比: 

         Redis是很快的, 因为内存的原因, 但是正是因为如此, 他们使用的场景和条件还是有限制的.

        它的劣势也很显然, 既然是内存存储的形式, 那么内存的成本肯定是被硬盘等存储的成本高的. MySQL相比来说具有更大的存储空间和更低的成本, mysql也提供了更多的增删改查的功能.

        那么有没有一种又快成本又低的存储方式? 最简单的方法就是将两者结合, 典型的方案: Redis和Mysql结合, 也就是将最常用的数据存储在redis, 全部数据存储在mysql, 那么redis就相当于mysql的一个缓存,但是代价就是系统的复杂程度就大大提升了, 且如果数据发生修改, 那么就涉及到redis和mysql的数据同步问题. 这些都是我们接下来要学习的内容.

分布式系统

        我们之前的学习都是基于单机架构, 所谓单机架构, 就是只有这一台服务器:

        假设为一个电商网站, 其实这里的应用服务就是一个http服务器, 用户发送http请求, 然后应用服务提交请求, 提供数据库服务, 完成服务. 公司绝大部分公司的产品, 都是这种单机架构. 

        但是当用户量, 数据量非常大的时候, 一台主机的硬件资源(cpu,内存, 硬盘, 网络)是有限的, 一台主机不够用了, 就需要多个这样的单机架构, 引入更多的硬件资源, 构成一个分布式系统.

        除了连接多台主机, 还可以在程序上进行优化, 也就是节流, 通过各种性能测试, 找出是哪个环节出现了瓶颈, 然后做出对应的优化. 但是这种方法对于程序员的水平要求较高.

        更简单粗暴的方法那就是在硬件上面解决性能问题. 你可以换一个能处理更多线程的cpu, 更好的网卡, 更快的内存, 但是一个主机的极限性能仍然是存在上限的, 还不够的话那么就可以引入更多的主机.

        当然不是新的机器买来就可以直接使用的, 在软件上还需要做出代码上的调整. 整体系统的复杂度就更高了, 复杂程度可能呈现一个指数级别增长, bug出现的概率可能更高. (也是属于很无奈了)

         下面这个模型是应用服务和数据库服务分离:

        应用服务器里面需要处理业务逻辑, 对cpu和内存有更高的要求, 存储服务器则需要更大的存储空间(硬盘空间>> 固态硬盘, 机械硬盘),  以此达到一个更高的性价比

        引入更多的服务器:

        应用服务器会消耗cpu, 但是如果cpu性能被消耗完了. 服务器就顶不住了, 此时引入另外一个服务器主机(也可能是多个), 就可以解决上述问题.  用户的请求先到达负载均衡器, 假设有1w个请求, 按照负载均衡的机制, 就让每个主机负责5000个请求(根据性能调节)

        负载均衡器(就像一个公司领导负责员工的任务), 有很多个均衡的方法, 具体使用哪个方法, 需要根据场景来进行选择

负载均衡

         负载均衡器对于请求量的承担能力, 要远超应用服务器的, 就比如我们刚才那个例子, 负载均衡负责分配工作.

软件负载均衡解决方案是指在一台或多台服务器相应的操作系统上安装一个或多个附加软件来实现负载均衡,如DNS Load Balance,CheckPoint Firewall-1 ConnectControl等,它的优点是基于特定环境,配置简单,使用灵活,成本低廉,可以满足一般的负载均衡需求。

软件解决方案缺点也较多,因为每台服务器上安装额外的软件运行会消耗系统不定量的资源,越是功能强大的模块,消耗得越多,所以当连接请求特别大的时候,软件本身会成为服务器工作成败的一个关键;软件可扩展性并不是很好,受到操作系统的限制;由于操作系统本身的Bug,往往会引起安全问题。

硬件负载均衡解决方案是直接在服务器和外部网络间安装负载均衡设备,这种设备通常称之为负载均衡器,由于专门的设备完成专门的任务,独立于操作系统,整体性能得到大量提高,加上多样化的负载均衡策略,智能化的流量管理,可达到最佳的负载均衡需求。

负载均衡器有多种多样的形式,除了作为独立意义上的负载均衡器外,有些负载均衡器集成在交换设备中,置于服务器与Internet链接之间,有些则以两块网络适配器将这一功能集成到PC中,一块连接到Internet上,一块连接到后端服务器群的内部网络上。一般而言,硬件负载均衡在功能、性能上优于软件方式,不过成本昂贵。

 

        既然是有更多的web服务, 那么就意味着更多的web请求, 这么多的web请求, 对于存储服务器来说肯定是会带来更大的压力的. 数据库对于这个请求压力时更加敏感的. 

        为了解决这个问题, 使用节流的方法, 将数据库的读写进行分离:

        此时的存储服务器变成量两台了, 一台是主(master)数据库, 一台从(slave)数据库. 写数据就往主数据库中写, 读取数据就从从数据库中读取, 同时我们定时的将主数据库中的数据同步到从数据库中(实际情况上, 读的操作是比写的操作多的) (因此主服务器一般是一个,从数据库可以有多个).

引入缓存

        使用的存储服务器大多部分都是进行读取操作, 但是读取的内容化中又有冷热之分, 所谓冷热, 也就是经常要查的数据和不是很频繁需要读取的数据. 对于需要频繁读取的部分, 我们将其放入缓存之中, 访问的速度就会比直接从数据库中访问快多了:

         这个缓存服务器(redis)只是存放少部分数据, 这个数据被称为热点数据, 他们通常会执行二八原则, 也就是20%的数据能够支持80%的访问量(缓存服务器中存储着总数据量的20%的数据, 80%的请求都是访问这个缓存服务器中的数据).

        为什么不把所有的数据都放入缓存?  因为是内存中存储, 内存中存储就要考虑成本!!

        此时缓存服务器就帮助数据库服务器负重前行!! 

数据库分表

        引入分布式系统,不光要能够去应对更高的请求量,同时也要能应对更大的数据量。是否可能会出现一台服务器已经存不下数据了呢?就需要多台主机来存储。

        上面这张图就是讲的对数据库进行分库分表。首先对数据库进行分库,讲一个数据库分为多个数据库, 可以讲引入多个数据库服务,每个数据库服务器存储一个或者一部分。比如现在要访问用户表, 那么就到对应的存储用户信息的存储集群中去请求, 如果是写,就使用主数据库,如果是读取就是用从数据库。

        当然如果某个表特别大, 大到一个主机存不下,那么也可以针对表进行拆分。

微服务                        

         之前的应用服务器, 一个服务器程序里面做了很多个业务,这可能会导致一个服务器的代码会越来越复杂, 为了方便代码的维护,可以将服务器拆分为更多的更小的,功能更加单一的小服务器。与此同时,服务器的种类和数量增加了。

        他们各自有各自的应用服务器,缓存和存储集群。微服务本质上是在解决人的问题,当服务器变得复杂,就需要更多的人来维护,但是人也是需要成本和管理的。将这些人进行分组来管理每一个子系统,将更加方便管理代码。

        啥时候涉及到人的问题?当然是大公司,拥有一定开发者基数的公司一般会有微服务的项目。

        解决问题的技术肯定是有代价的。那代价是什么?

  1. 系统性能下降 -- 拆分出来的更多的服务,多个功能之间要依赖网络通信,网络通信的速度是非常慢的,是比硬盘还要慢的。想要保证性能,就得引入更多的硬件资源。(幸运的是现在的硬件是非常先进的
  2. 系统的复杂程度提高了不少,可用性降低,出现问题的概率也会变大。这需要更加完善的监控系统和运维人员

        微服务有哪些优势?

  1. 解决了人的问题
  2. 方便功能的服用
  3. 可以给不同的服务进行不同的部署

小结

  • 单机架构: 应用程序 +数据库服务器 
  • 数据库和应用分离(应用和数据库部署在不同主机
  • 负载均衡器:将请求均匀的,合理的分发给集群中的应用服务器,提高服务器的可用性
  • 读写分离,主从式数据库:一个数据库作为主节点,n个数据库作为从节点,主负责写,从负责读(主数据库需要给从服务器进行同步操作
  • 缓存,冷热数据分离:进一步提高服务器请求的处理能力(引入的问题:缓存同步问题
  • 分库分表:进一步扩展存储空间
  • 引入微服务:从业务上拆分应用服务器

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

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

相关文章

(bean的创建图)学习Spring的第十天(很重要)

大致框架按如下 第一次细分 bean对象还未创建 操作第一个map 引入BeanFactoryPostProcessor , 即Bean工厂后处理器 , 为Spring很重要的扩展点 BeanFactoryPostProcessor内部的方法 可以对BeaDefinition进行修改 , 也可进行BeanDefinition的注册 ( 原有在xml文件配置的bean…

大模型学习与实践笔记(十四)

使用 OpenCompass 评测 InternLM2-Chat-7B 模型使用 LMDeploy 0.2.0 部署后在 C-Eval 数据集上的性能 步骤1:下载internLM2-Chat-7B 模型,并进行挂载 以下命令将internlm2-7b模型挂载到当前目录下: ln -s /share/model_repos/internlm2-7b/ ./ 步骤2&…

idea docker 内网应用实践

文章目录 前言一、服务器端1.1 离线安装docker1.2 开启docker远程访问1.3 制作对应jdk镜像1.3.1 下载jdk171.3.2 Dockerfile 制作jdk17镜像1.3.3 镜像导出1.3.4 服务器引入镜像 二、Idea 配置2.1 Dockerfile2.2 pom 引入docker插件2.3 idea docker插件配置2.4 打包镜像上传2.5 …

UE5在VisualStudio升级后产生C++无法编译的问题

往期的虚幻引擎项目在VS更新后,编译时会报错,这一般出现在VS升级之后,UE对于VC的编译器定位没有更新导致; 有出现如下问题: 问题1: Running I:/EPCI/Epic Games/UE_5.3/Engine/Build/BatchFiles/Build.ba…

Python采集微博评论数据,让评论告诉我们最近热议话题

嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 环境使用: Python 3.10 Pycharm 模块使用: import requests >>> pip install requests import csv 模块安装: win R 输入cmd 输入安…

echarts option series smooth

echarts option series smooth 平滑处理 smooth&#xff1a;0.3 echarts_04_line.html <!DOCTYPE html> <html lang"en"><head> <meta charset"utf-8"> <title></title> </head><body><div id&quo…

蓝桥杯省赛无忧 课件51 第6次学长直播带练配套课件

01 最小的或运算 02 简单的异或难题 03 出列 04 异或森林 05 位移 06 笨笨的机器人 07 迷失的数 08 最大通过数

0128-2-keep-alive组件

&#x1f4bb;1、keep-alive是什么&#xff1f; keep-alive是Vue内置的一个组件&#xff0c;可以使被包含的组件保留状态&#xff0c;避免被重新渲染&#xff01;可以理解成防弹衣&#x1f9e5;; 包含在keep-alive里面的组件&#xff0c;所有路径匹配到的视图都会被缓存。 <…

Python字符串常用操作

在Python编程中&#xff0c;字符串是一种非常重要的数据类型&#xff0c;常常用于存储文本数据、处理文件内容以及进行各种文本处理操作。本文将介绍Python中字符串的常用操作&#xff0c;包括字符串的创建、连接、切片、查找、替换等操作&#xff0c;希望能够帮助读者更好地理…

探索ESP32 C++ OOP开发:与传统面向过程编程的比较

探索ESP32 OOP开发&#xff1a;与传统面向过程编程的比较 在嵌入式系统开发中&#xff0c;ESP32是一个强大的平台&#xff0c;可以应用于各种项目和应用场景。在编写ESP32代码时&#xff0c;我们可以选择使用面向对象编程&#xff08;OOP&#xff09;的方法&#xff0c;将代码…

学术交流、论文检索;2024年土木工程与城市建设国际会议(ICCEUC 2024)

2024年土木工程与城市建设国际会议(ICCEUC 2024) 2024 International Conference on Civil Engineering and Urban Construction(ICCEUC 2024) 数据库&#xff1a;EI,CPCI,CNKI,Google Scholar等检索 一、【会议简介】 2024年土木工程与城市建设国际会议(ICCEUC 2024)将在上海盛…

防御保护--智能选路

目录 就近选路 策略选路--PBR DSCP优先级 智能选路--全局路由策略 1.基于链路带宽的负载分担 2.基于链路质量进行负载分担 3.基于链路权重进行负载分担 4.基于链路优先级的主备备份 ​编辑 DNS透明代理 就近选路 我们希望在访问不同运营商服务器时&#xff0c;通过对…

堆和堆排序【数据结构】

目录 一、堆1. 堆的存储定义2. 初始化堆3. 销毁堆4. 堆的插入向上调整算法 5. 堆的删除向下调整算法 6. 获取堆顶数据7. 获取堆的数据个数8. 堆的判空 二、Gif演示三、 堆排序1. 堆排序(1) 建大堆(2) 排序 2.Topk问题 四、完整代码1.堆的代码Heap.cHeap.htest.c 2. 堆排序的代码…

Flink Checkpoint 超时问题详解

第一种、计算量大&#xff0c;CPU密集性&#xff0c;导致TM内线程一直在processElement&#xff0c;而没有时间做CP【过滤掉部分数据&#xff1b;增大并行度】 代表性作业为算法指标-用户偏好的计算&#xff0c;需要对用户在商城的曝光、点击、订单、出价、上下滑等所有事件进…

监听项目中指定属性数据,点击或模块显示时

当项目中&#xff0c;需要获取某个页面上、某个标签上、有指定自定义属性时&#xff0c;需要在点击该元素时进行公共逻辑处理&#xff0c;或该元素在显示的时候进行逻辑处理&#xff0c;这时可以定义一个公共的方法&#xff0c;在每个页面引用&#xff0c;并写入数据即可 &…

SOME/IP SD 协议介绍(一)

概述 服务发现用于定位服务实例并检测服务实例是否正在运行。在车载网络中&#xff0c;服务实例的位置通常是已知的&#xff1b;因此&#xff0c;服务实例的状态是首要关注的。服务的位置&#xff08;即IP地址、传输协议和端口号&#xff09;是次要关注的内容。 术语和定义 S…

防御保护--防火墙的可靠性

目录 前提&#xff1a; VGMP 接口故障切换场景 状态切换备份的过程 HRP 第一种备份方式 --- 自动备份 第二种备份方式 --- 手工备份 第三种备份方式 --- 快速备份 各备份场景过程分析 1&#xff0c;主备形成场景 2&#xff0c;主备模式下&#xff0c;接口故障切…

防火墙用户认证、NAT、策略路由、DNS透明代理以及双机热备笔记

用户认证 防火墙管理员登录认证 --- 检验身份的合法性&#xff0c;划分身份权限 用户认证 --- 上网行为管理的一部分 用户&#xff0c;行为&#xff0c;流量 --- 上网行为管理三要素 用户认证的分类 上网用户认证 --- 三层认证 --- 所有的跨网段的通信都可以属于上网行为。…

redis-主从复制

1.主从复制 1.1简介 主机数据更新后根据配置和策略&#xff0c; 自动同步到备机的master/slaver机制&#xff0c;Master以写为主&#xff0c;Slave以读为主 1.2作用 1、数据冗余&#xff1a;主从复制实现了数据的热备份&#xff0c;是持久化之外的一种数据冗余方式。 2、故…

群辉开启WebDav服务+cpolar内网穿透实现移动端ES文件浏览器远程访问本地NAS文件

文章目录 1. 安装启用WebDAV2. 安装cpolar3. 配置公网访问地址4. 公网测试连接5. 固定连接公网地址6. 使用固定地址测试连接 本文主要介绍如何在群辉中开启WebDav服务&#xff0c;并结合cpolar内网穿透工具生成的公网地址&#xff0c;通过移动客户端ES文件浏览器即可实现移动设…