初识 Redis 浅谈分布式

目 录

  • 一.认识 Redis
  • 二.浅谈分布式
    • 单机架构
    • 分布式是什么
    • 数据库分离和负载均衡
    • 理解负载均衡
    • 数据库读写分离
    • 引入缓存
    • 数据库分库分表
    • 引入微服务
  • 三.概念补充
  • 四.分布式小结

一.认识 Redis

在 Redis 官网我们可以看到介绍
在这里插入图片描述

翻译过来就是:数以百万计的开发人员用作缓存、矢量数据库、文档数据库、流引擎和消息代理的内存数据存储。

  1. 存储数据:在内存中存储。那我们可以想到 定义变量也是在内存中存储数据的,但是 Redis 是在分布式系统中才能发挥力量的,如果只是单机程序,直接通过变量存储数据的方式,是比使用 Redis 更优的选择。我们知道进程之间有隔离性,进程之间通过网络进行通信,Redis 就是基于网络,可以把自己内存中的变量给别的进程,甚至别的主机的进程进行使用。
  2. 数据库:一谈及数据库我们可以想到 MySQL,MySQL 最大的问题在于,访问速度比较慢,很多互联网产品中,对于性能要求是很高。Redis 也可以作为数据库使用,访问速度快!!定性的角度,可以知道 Redis 快很多,但是很难定量衡量。Redis 和 MySQL 相比,最大的劣势,存储空间是有限的。虽然有不少的互联网产品,对于性能要求比较高的,但是也有很多互联网产品对于性能要求没那么高。那如何内存又大访问速度又快呢??典型的方案,可以把 Redis 和 MySQL 结合起来使用。"二八原则”,20%的热点数据,能满足 80% 的访问需求,于是把 20% 的数据存储到 Redis 中,80% 的数据存储到MySQL 中,但是系统的复杂程度大大提升了,而且,如果数据发生修改,还涉及到 Redis 和 MySQL 之间的数据同步问题。

二.浅谈分布式

单机架构

只有一台服务器,这个服务器负责所有的工作

在这里插入图片描述

应用程序中保存了我们个人编辑的代码写的那些 HTTP 服务器,数据库服务就是我们的数据库,例如 MySQL等,MySQL 是一个客户端服务器结构的程序!!本体是 MySQL 服务器(存储和组织数据的部分)。当我们用户发送一个请求之后,经过应用服务发送HTTP 请求,HTTP 请求转成增删改查等动作转发给数据库,数据库再进行操作。

单机程序中,能不能把数据库服务器也去掉,光一个应用服务器又负责业务,又负责数据存储?(也不是不可以,但是就是会比较麻烦)

千万不要瞧不上这个东西,绝大部分的公司的产品都是这种单机架构!!现在计算机硬件,发展速度非常之快,哪怕只有一台主机,这一台主机的性能也是很高的,可以支持非常高的并发&非常大的数据存储

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


分布式是什么

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

包括不限于以下几种

  1. CPU
  2. 内存
  3. 硬盘
  4. 网络

服务器每次收到一个请求,都是需要消耗上述的一些资源的

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

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

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

  2. 节流:软件上优化(各凭本事了,需要通过性能测试,找到是哪个环节出现了瓶颈,再去对症下药)

一个主机上面能增加的硬件资源也是有限的,取决于主板的扩展能力。一台主机扩展到极限了,但是还不够就只能引入多台主机了。不是说新的机器买来就直接可以解决问题了,也需要软件上做出对应的调整和适配,一旦引入多台主机了,咱们的系统就可以称为是 “分布式系统”。引入分布式,这是万不得已,系统的复杂程度会大大提高,出现bug的概率也越高。


数据库分离和负载均衡

在这里插入图片描述

  1. 应用服务器,里面可能会包含很多的业务逻辑,可能会吃 CPU 和内存.

  2. 数据库服务器,需要更大的硬盘空间,更快的数据访问速度,可以配置更大硬盘的服务器,甚至还可以上 SSD(固态) 硬盘

1.机械硬盘,便宜,慢;2.固态硬盘,贵,快

通过上面的操作就达到更高的性价比了

应用服务器可能会比较吃 CPU 和内存,如果把 CPU 或者内存吃没了,此时应用服务器就顶不住了

引入更多的应用服务器,就可以有效解决上述问题

在这里插入图片描述

看起来是两个应用服务器,实际上可能是多个。

用户的请求,先到达 负载均衡器/网关服务器(单独的服务器)

假设有 1w 个用户请求,有 2 个应用服务器:此时按照负载均衡的方式,就可以让每个应用服务器承担 5k 的访问量

负载均衡:就像公司的一个组的领导一样,要负责管理,要负责把任务分配给每个组员(对于负载均衡器来说,有很多的负载均衡具体的算法)


理解负载均衡

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

负载均衡器,对于请求量的承担能力,要远超过应用服务器的.

  • 负载均衡器,是领导,分配工作.
  • 应用服务器,是组员,执行任务.

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

于是就可以引入更多的负载均衡器(引入多个机房)


数据库读写分离

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

在这里插入图片描述

对数据库进行读写分离

在实际的应用场景中,读的频率是比写要高的

所以主服务器一般是一个,从服务器可以有多个(一主多从)

同时从数据库通过负载均衡的方式,让应用服务器进行访问


引入缓存

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

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

在这里插入图片描述

缓存只是放一小部分热点数据.(会频繁被访问到的数据),根据二八原则:20% 的数据能够支持 80% 的访问量

此时我们右边存储服务器存储的仍然是完整的全量数据

缓存要想快就要付出代价 => 小 => Redis

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


数据库分库分表

引入分布式系统,不光要能够去应对更高的请求量(并发量),同时也要能应对更大的数据量

是否可能会出现,一台服务器已经存不下数据了呢??当然会存在

虽然一个服务器,存储的数据量可以达到几十个TB,即使如此也可能会存不下

一台主机存不下,就需要多台主机来存储

在这里插入图片描述

针对数据库进行进一步的拆分,分库分表

本来一个数据库服务器,这个数据库服务器上有多个数据库(指的是逻辑上的数据集合, create database 创建的那个东西)

现在就可以引入多个数据库服务器,每个数据库服务器存储一个或者一部分数据库

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

具体分库分表如何实践?还是要结合实际的业务场景来展开


引入微服务

微服务架构:

在这里插入图片描述

之前应用服务器,一个服务器程序里面做了很多的业务,这就可能会导致这一个服务器的代码变的越来越复杂

为了更方便于代码的维护,就可以把这样的一个复杂的服务器,拆分成更多的,功能更单一,但是更小的服务器 —> 微服务

因此服务器的种类和数量就增加了

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

注意,微服务本质上是在解决 "人” 的问题

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

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

  1. 系统的性能下降:拆出来更多的服务,多个功能之间要更依赖网络通信,网络通信的速度很可能是比硬盘还慢的。(要想保证性能不下降太多,只能引入更多的机器,更多的硬件资源)(幸运的是,硬件技术的发展,网卡现在有万兆网卡,读写速度已经能过超过硬盘读写了)
  2. 系统复杂程度提高,可用性受到影响:服务器更多了,出现问题的概率就更大了。这就需要一系列的手段,来保证系统的可用性(更丰富的监控报警,以及配套的运维人员)

微服务的优势:

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

三.概念补充

应用(Application)/ 系统(System)

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

模块(Module)/ 组件(Component)

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

分布式(Distributed)

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

集群(Cluster)

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

主(Master)/ 从(Slave)

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

中间件(Middleware)

和业务无关的服务(功能更通用的服务)

  1. 数据库
  2. 缓存
  3. 消息队列

可用性(Availability)

系统整体可用的时间 / 总的时间

响应时长(Response Time RT)

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

吞吐(Throughput)vs 并发(Concurrent)

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


四.分布式小结

  1. 单机架构(应用程序+数据库服务器)
  2. 数据库和应用分离
    应用程序和数据库服务器分别放到不同主机上部署了.
  3. 引入负载均衡,应用服务器=>集群
    通过负载均衡器,把请求比较均匀的分发给集群中的每个应用服务器.(当集群中的某个主机挂了,其他的主机仍然可以承担服务提高了整个系统的可用性)
  4. 引入读写分离,数据库主从结构
    一个数据库节点作为主节点,其他N个数据库节点作为从节点,主节点负责写数据,从节点负责读数据,主节点需要把修改过的数据同步给从节点
  5. 引入缓存,冷热数据分离
    进一步的提升了服务器针对请求的处理能力(二八原则),Redis在一个分布式系统中,通常就扮演着缓存这样的角色,引入的问题:数据库和缓存的数据一致性问题
  6. 引入分库分表,数据库能够进一步扩展存储空间
  7. 引入微服务,从业务上进一步拆分应用服务器
    从业务功能的角度,把应用服务器,拆分成更多的功能更单一,更简单,更小的服务器

上述这样的几个演化的步骤,只是一个粗略的过程

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

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

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

相关文章

nodejs+vue高校社团管理小程序的设计与实现python-flask-django-php

相比于以前的传统手工管理方式,智能化的管理方式可以大幅降低学校的运营人员成本,实现了高校社团管理的标准化、制度化、程序化的管理,有效地防止了高校社团管理的随意管理,提高了信息的处理速度和精确度,能够及时、准…

t-rex2开放集目标检测

论文链接:http://arxiv.org/abs/2403.14610v1 项目链接:https://github.com/IDEA-Research/T-Rex 这篇文章的工作是基于t-rex1的工作继续做的,核心亮点: 是支持图片/文本两种模态的prompt进行输入,甚至进一步利用两…

CCF-CSP认证考试 202303-5 施肥 35/60/75/100分题解

更多 CSP 认证考试题目题解可以前往:CSP-CCF 认证考试真题题解 原题链接: 202303-5 施肥 时间限制: 2.0s 内存限制: 1.0GB 问题描述 春天到了,西西艾弗岛上的 n n n 块田地需要施肥了。 n n n 块田地编号为 1 , 2…

基于Google云原生工程师的kubernetes最佳实践(二)

目录 二、应用部署篇 为deployment打上丰富的label,以便selecting 使用sidecar容器部署agent、proxy等组件 使用init container处理依赖关系,而不要用sidecar 镜像tag使用版本号,不要用latest或空tag 为pod设置readiness和liveness探针 不要给所有服务都使用LoadBalance…

【微服务】以模块化单体架构开发微服务应用

目录 推荐超级课程: Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战我们知道,起初,单体应用有显著的优势:它们更容易开发和部署。从开发人员的角度来看,这种简单性是有益的。一切都是集中的,可以快速更新任何部分的业务逻辑并立即看到结果。这种开…

竞赛 python opencv 深度学习 指纹识别算法实现

1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 python opencv 深度学习 指纹识别算法实现 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分工作量:4分创新点:4分 该项目较为新颖…

ETL数据倾斜与资源优化

1.数据倾斜实例 数据倾斜在MapReduce编程模型中比较常见,由于key值分布不均,大量的相同key被存储分配到一个分区里,出现只有少量的机器在计算,其他机器等待的情况。主要分为JOIN数据倾斜和GROUP BY数据倾斜。 1.1GROUP BY数据倾…

【短接笔记本或者台式机的CMOS针脚解决电脑开机无法启动BIOS无法进入问题】

为什么要执行短接笔记本或者台式机的CMOS针脚操作? 问题:可以解决如下图所示,技嘉小雕主板开机时按delete键无法进入BIOS主板界面,长时间等待之后依然无法进入BIOS主板界面,则判定为主板问题。此时短接CMOS针脚可清空…

nodejs+vue高校工作室管理系统python-flask-django-php

系统根据现有的管理模块进行开发和扩展,采用面向对象的开发的思想和结构化的开发方法对高校工作室管理的现状进行系统调查。采用结构化的分析设计,该方法要求结合一定的图表,在模块化的基础上进行系统的开发工作。在设计中采用“自下而上”的…

python(django(自动化))之流程接口展示功能前端开发

1、创建模板代码如下&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>测试平台</title> </head> <body role"document"> <nav class "navbar n…

Redis - list 列表

前言 列表类似于 Java 中的数组或者顺序表&#xff0c;在 Redis 中&#xff0c;可以对列表两端插⼊&#xff08;push&#xff09;和弹出&#xff08;pop&#xff09;&#xff0c;还可以获取指定范围的元素列表、 获取指定索引下标的元素等。列表是⼀种⽐较灵活的数据结构&#…

(一)基于IDEA的JAVA基础7

关系运算符 运算符 含义 范例 结果 等于 12 false &#xff01; 不等于 1&#xff01;2 true > 大于 1>2 false < 小于 …

微服务(基础篇-001-介绍、Eureka)

目录 认识微服务&#xff08;1&#xff09; 服务架构演变&#xff08;1.1&#xff09; 单体架构&#xff08;1.1.1&#xff09; 分布式架构&#xff08;1.1.2&#xff09; 微服务&#xff08;1.1.3&#xff09; 微服务结构 微服务技术对比 企业需求 SpringCloud(1.2) …

思科网络中DHCP中继的配置

一、什么是DHCP中继&#xff1f;DHCP中继有什么用? &#xff08;1&#xff09;DHCP中继是指一种网络设备或服务&#xff0c;用于在不同的子网之间传递DHCP&#xff08;动态主机配置协议&#xff09;消息。DHCP中继的作用是帮助客户端设备获取IP地址和其他网络配置信息&#x…

jvm底层

逐步细化 静态链接&#xff1a;静态方法(符号引用)替换为内存指针或者句柄直接引用) 动态链接&#xff1a;程序期间将符号引用替换为直接引用 对象头&#xff1a; 指针压缩&#xff1a; -XX:UseCompressedOops 开启指针压缩 减少内存消耗&#xff1b;大指针在主内存 缓存间移…

6.3 BP神经网络

在多层感知器被引入的同时&#xff0c;也引入了一个新的问题&#xff1a;由于隐藏层的预期输出并没有在训练样例中给出&#xff0c;隐藏层结点的误差无法像单层感知器那样直接计算得到。 为了解决这个问题&#xff0c;反向传播&#xff08;BP&#xff09;算法被引入&#xff0…

centos glibc 升级导致系统崩溃

centos 7.9默认的glibc为2.17&#xff0c;因为要安装一些软件&#xff0c;需要升级到glibc 2.18&#xff0c;而从源码进行编译和安装&#xff0c;安装失败&#xff0c;导致系统崩溃。 系统崩溃首先想到的是利用启动盘进行救援&#xff0c;而利用centos 7.9的启动盘始终无法挂载…

【PHP + 代码审计】数组排序算法

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收…

银行监管报送系统介绍(五):金融统计数据大集中自动化报送系统——PBOC Report

人民银行金融统计数据大集中自动化报送系统&#xff08;简称PBOC Report&#xff09;&#xff0c;是基于现代计算机网络技术应用基础上&#xff0c;由人行总行设置金融统计数据服务器&#xff0c;建立的一个全国统一的金融统计数据库。 人行针对各银行存贷款、中间业务、网点人…

信号处理--基于FBCSP滤波方法的运动想象分类

目录 理论 工具 方法 代码获取 理论 通用空间模式 (CSP) 算法可以用来有效构建最佳空间滤波器区分&#xff0c;然后实现运动想象的数据中的脑电信号的区分。然而&#xff0c;空间滤波器性能的好坏主要取决于其工作频带。如果脑电信号没有经过滤波或者滤波的频带范围不合适…