Redis—分布式系统

Redis—分布式系统

  • 🔎理解分布式
  • 🔎分布式—应用服务与数据库服务分离
    • 引入更多的应用服务节点
      • 理解负载均衡
    • 引入更多的数据库服务节点
      • 缓存
      • 分库分表
    • 微服务
  • 🔎常见概念
    • 应用(Application) / 系统(System)
    • 模块(Module) / 组件(Component)
    • 分布式(Distributed)
    • 集群(Cluster)
    • 主(Master) / 从(Slave)
    • 中间件(Middleware)
    • 可用性(Availability)
    • 响应时长(Response Time RT)
    • 吞吐(Throughput) / 并发(Concurrent)

🔎理解分布式


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

包括但不限于:

  1. CPU
  2. 内存
  3. 硬盘
  4. 主板
  5. 网络适配器

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

如果同一时刻处理的请求过多, 可能导致某个硬件资源的性能陷入瓶颈

如果遇到这种场景, 应对方式有 2 种

  1. 开源(针对硬件 → 增加更多的硬件资源)
  2. 节流(针对软件 → 对软件进行优化, 通过性能测试找到性能瓶颈)

对于开源的具体解释🍭

一台主机上所能增加的硬件资源是有限的(取决于主板的扩展能力), 当一台主机扩展到极限时, 资源还是不够, 就需要引入多台主机

引入多台主机之后, 系统就可以称为是分布式系统(此时响应的代码也需要做出调整)

题外话🍭

引入分布式, 相对于程序员, 并不是一件好事
这是因为分布式的引入, 所带来的复杂程度大大提高 → 从而导致出 BUG 的概率提高 → 年终奖丢失的概率与加班的概率大大提高

🔎分布式—应用服务与数据库服务分离


单机服务器 → 应用服务与数据库服务未分离

在这里插入图片描述

应用服务器 + 数据库服务器 → 应用服务与数据库服务分离(分布式)

针对不同服务器涉及的不同场景, 分配不同但更合理的硬件资源

对于应用服务器, 可能包含更多的业务操作. CPU, 内存的利用率更高 → 于是选择较好的 CPU, 内存
对于数据库服务器, 可能需要更多的硬盘空间, 更快的访问速度 → 于是选择更大的固态硬盘

在这里插入图片描述

引入更多的应用服务节点


应用服务可能会消耗较多的 CPU 和内存, 如果 CPU 和内存耗光, 此时的应用服务器就会宕机

为了解决上述问题, 于是引入更多的应用服务器

通过负载均衡, 合理的分配应用服务器的工作

在这里插入图片描述

理解负载均衡


假设有 1 万个请求, 有 4 台应用服务器
此时按照负载均衡的方式, 就可以让每台服务器承担 2.5k 的访问量

举个栗子🌰

将负载均衡器看作是一个小组的领导, 应用服务器看作是小组的组员

领导(负载均衡器)分配工作, 组员(应用服务器)执行工作

其中负载均衡器的承担能力要远远大于应用服务器

你可以将其理解为领导负责分配工作, 而不是执行工作. 分配工作要比执行工作轻松

如果出现请求量过多, 从而导致负载均衡器宕机, 怎么办?
引入更多的负载均衡器

引入更多的数据库服务节点


当应用服务器过多时, 确实能够处理更高的请求量, 但是随之数据库服务器要承担的请求量也就更多了

针对上述情况, 解决办法是引入更多的数据库服务器

在实际应用场景中, 向数据库中读取数据的频率 > 向数据库中写入数据

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

主(Master) / 从(Slave)

通常向主数据库中写入数据, 向从数据库中读取数据

主从数据库之间会进行周期性的数据同步

在这里插入图片描述

缓存


数据库的响应速度较慢(从硬盘中读取数据)

于是有了 “冷热” 数据的区别
将热点数据放入至缓存中, 缓存的响应速度 > 数据库的响应速度

根据二八原则, 20% 的数据能够支持 80% 的访问(实际场景的不同会有所差异), 即缓存中的热点数据能够支持绝大多数的访问场景
从数据库依旧存储全部数据
(读取数据时先去访问缓存, 如果缓存中不存在, 再去访问从数据库 → 提升了响应速度)

Redis 在分布式系统中通常作为缓存

在这里插入图片描述

分库分表


分布式系统的引入, 不仅要求能够处理更高的请求量, 还要求能应对更大的数据量

虽然一台服务器存储的数据可以达到几十个 TB, 但即便如此也可能会出现存不下的情况

当一台服务器存不下时, 就需要多台服务器进行存储, 即针对数据库进行拆分(分库)

分库, 将一台数据库服务器上的多个数据库拆分. 变成多台数据库服务器存储一个或一部分数据库

如果数据库中的某个表特别大, 一台主机存不下, 也可以针对数据表进行拆分(分表)

在这里插入图片描述

微服务


一个应用服务器程序可能包含很多的业务, 从而导致服务器的代码变的越来越复杂
为了便于代码的维护, 就将这样的复杂服务器拆分成更多的, 功能更单一, 但是更小的服务器(微服务)

微服务 → 增加了服务器的种类和数量

微服务的本质是解决 “人” 的问题🍂

当应用服务器变的复杂, 就需要更多的人来进行维护. 当人变的多了, 就需要增加配套的管理, 将这些人组织好
按照功能拆分成多组微服务, 有利于人员的组织结构划分

引入微服务的代价🍂

  1. 系统的性能下降
    拆分出更多的服务, 多个功能之间依靠网络进行通信, 网络通信的速度较慢
    (想要保证性能下降不至于太多, 解决办法是引入更多的硬件资源)
  2. 系统的复杂程度增加了, 可用性受到影响
    服务器更多, 也就意味着出现问题的概率更大

引入微服务的优势🍂

  1. 解决了 “人” 的问题
  2. 使用微服务的方式, 更方便功能的复用
  3. 可以针对不同的服务进行不同的部署
    (针对访问量, 功能配置不同的硬件资源)

在这里插入图片描述

🔎常见概念


应用(Application) / 系统(System)


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

模块(Module) / 组件(Component)


一个应用中有很多的功能, 每个独立的功能就是一个模块 / 组件

分布式(Distributed)


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

集群(Cluster)


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

主(Master) / 从(Slave)


分布式系统中的一种典型结构

多台服务器节点, 其中一个是主, 另外的是从. 从节点的数据依据主节点的数据进行同步

中间件(Middleware)


功能更通用的服务, 包括:

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

可用性(Availability)


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

例如整体可用时间为 360 天, 总时间为 365 天
则可用性为 360 / 365

响应时长(Response Time RT)


衡量服务器的性能指标

响应时长: 处理请求到完成响应的时间

吞吐(Throughput) / 并发(Concurrent)


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

🌸🌸🌸完结撒花🌸🌸🌸

在这里插入图片描述

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

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

相关文章

2023年最全OCR技术指南!预训练OCR大模型呼之欲出

OCR是一项科技革新,通过自动化大幅减少人工录入的过程,帮助用户从图像或扫描文档中提取文字,并将这些文字转换为计算机可读格式。这一功能在许多需要进一步处理数据的场景中,如身份验证、费用管理、自动报销、业务办理等都显得尤为…

【Linux】多线程概念理论

目录 1 什么是线程? 2 线程的优点 3 线程的缺点 4 线程异常 5 线程用途 6 Linux线程和进程对比 1 什么是线程? 在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列…

【目标跟踪】1、基础知识

文章目录 一、卡尔曼滤波二、匈牙利匹配 一、卡尔曼滤波 什么是卡尔曼滤波?——状态估计器 卡尔曼滤波用于在包含不确定信息的系统中做出预测,对系统下一步要做什么进行推测,且会结合推测值和观测值来得到修正后的最优值卡尔曼滤波就是利用…

VS Code 设置大小写转换快捷键

VS Code 设置大小写转换快捷键 前言:VS Code 没有默认的大小写转换快捷键,需要我们自己添加。 一 、打开快捷键设置面板 二、添加快捷键 在搜索框输入 “转换为大写”,如果您的VS Code没有汉化,此处输入“Transform to Uppercase…

OSI七层模型和TCP/IP四层模型以及五层模型

OSI七层模型(Open System Interconnect)即开放系统互连参考模型,是由ISO(International Organization for Standardization)国际标准化组织提出的,用于计算机或通信系统间互联的标准体系。 从上到下可分为…

【目标跟踪】2、FairMOT | 平衡多目标跟踪中的目标检测和 Re-ID 任务 | IJCV2021

文章目录 一、背景二、方法2.1 Backbone2.2 检测分支2.3 Re-ID 分支2.4 训练 FairMOT2.5 Online Inference 三、效果3.1 数据集3.2 实现细节3.3 消融实验3.4 最终效果 论文:FairMOT: On the Fairness of Detection and Re-Identification in Multiple Object Tracki…

Mybatis单元测试,不使用spring

平时开发过程中需要对mybatis的Mapper类做单元测试,主要是验证语法是否正确,尤其是一些复杂的动态sql,一般项目都集成了spring或springboot,当项比较大时,每次单元测试启动相当慢,可能需要好几分钟&#xf…

[Linux] CentOS7 中 pip3 install 可能出现的 ssl 问题

由于解决问题之后, 才写的博客, 所以没有图片记录. 尽量描述清楚一些 今天写代码的时候, 突然发现 文件里用了#define定义宏之后, coc.nvim的coc-clangd补全就用不了 :checkhealth了一下, 发现nvim忘记支持python3了 尝试pip3 install neovim的时候, 发现会警告然后安装失败.…

linux服务器部署

文章目录 一、基本工具安装1.使用vi命令编辑文件 二、安装1.jdk2.读入数据 总结 一、基本工具安装 1.使用vi命令编辑文件 注:如果vi命令没有,可以使用yum -y install vim或者apt-get install vim命令安装。 Linux操作系统第二讲 二、安装 1.jdk 参考 卸载jdk…

Mybatis-Plus插入数据返回主键两种方式(注解或XML)

废话不多说&#xff0c;直接撸代码: <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace&qu…

递归排序算法快速排序的实现过程

快速排序(Insertion Sort)也是一种递归排序算法。 快速排序原理&#xff1a;先以列表中的任意一个数为基准(一般选头或尾)&#xff0c;将列表分为左、右两个子列表。 左子列表的数要比基准数小&#xff0c;右子列表的数要比基准数大。然后继续把左子列表和右子列表按同样的方…

(2)前端控制器的扩展配置, 视图解析器类型以及MVC执行流程的概述

SpringMVC入门程序的扩展说明 注册前端控制器的细节 在web.xml文件注册SpringMVC的前端控制器DispatcherServlet时使用url-pattern标签中使用/和/*的区别 /可以匹配.html或.js或.css等方式的请求路径,但不匹配*.jsp的请求路径/*可以匹配所有请求(包括.jsp请求), 例如在过滤器…

IDEA导入微服务项目后自动将微服务展示在service面板中

有时候&#xff0c;不会自动将微服务展示在service面板中。 添加service面板&#xff1a; service面板&#xff1a; 更新所有maven&#xff0c;就可以自动将微服务展示在service面板中。

Opencv 细节补充

1.分辨率的解释 •像素&#xff1a;像素是分辨率的单位。像素是构成位图图像最基本的单元&#xff0c;每个像素都有自己的颜色。 •分辨率&#xff08;解析度&#xff09;&#xff1a; a) 图像分辨率就是单位英寸内的像素点数。单位为PPI(Pixels Per Inch) b) PPI表示的是每英…

git 实操

首先有安装好的git,安装好后,会在任一目录下右键出现git bash和git gui两个选项 打开git bash,设置好全局变量,用户名和邮箱,设置方法为: git config -- global user.name "xxx" git config --global user.email "xxxxxx.com" 1.创建版本库 git init 命…

安装及配置zabbix_agent代理端(监控FTP服务器)

监控agent的linux主机我们在之前的文章里已经做好了 现在直接安装ftp服务即可 [rootagent ~]# yum install -y vsftpd[rootagent ~]# systemctl start vsftpd #启动ftp服务[rootagent ~]# systemctl enable vsftpd #设置ftp服务开机自启 Created symlink fro…

MFC第二十天 数值型关联变量 和单选按钮与复选框的开发应用

文章目录 数值型关联变量数值型关联变量的种类介绍 单选按钮与复选框单选按钮的组内选择原理解析单选按钮和复选框以及应用数值型关联变量的开发CMainDlg.cppCInputDlg.hCInputDlg.cpp 附录 数值型关联变量 数值型关联变量的种类介绍 1、 数值型关联变量&#xff1a; a)控件型…

小程序 user agent stylesheet 覆盖了page下wxss背景色

如下图&#xff1a; login页面的page下的背景色&#xff0c;被&#xff1a;user agent stylesheet覆盖。 分析与解决&#xff1a; 1、user agent stylesheet是浏览器默认样式表&#xff0c;是浏览器默认样式。 2、不同浏览器的默认样式不同个&#xff0c;甚至同种浏览器不同版…

2023年7月杭州/武汉/深圳制造业产品经理NPDP认证招生

产品经理国际资格认证NPDP是新产品开发方面的认证&#xff0c;集理论、方法与实践为一体的全方位的知识体系&#xff0c;为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会&#xff08;PDMA&#xff09;成立于1979年&#xff0c;是…

vue2和vue3关于class类的绑定以及style的绑定的区别

本篇为个人笔记 1.对于class类的绑定的区别 vue2:对于vue2而言&#xff0c;所有类的绑定都是基于对象{}来进行的 例如&#xff1a;单个类绑定 <div :class"{active:isActive}"></div> 多个类绑定&#xff1a; <div :class"{active,hasError…