Redis:分布式系统

文章目录

  • 分布式
    • 单机架构
    • 应用数据分离架构
    • 应用服务集群架构
  • 负载均衡
  • 读写分离
  • 冷热分离架构
  • 垂直分库
  • 微服务架构

分布式

下面就要简单对于分布式进行一个认识了

单机架构

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

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

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

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

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

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

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

开源和节流

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

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

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

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

应用数据分离架构

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

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

应用服务器:

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

数据库服务器:

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

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

应用服务集群架构

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

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

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

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

负载均衡

上面说了负载均衡这个内容,那么现在问题来了,什么是负载均衡呢?

在这里插入图片描述
上图所示就是负载均衡的一个模式,其中需要注意的是上面的负载均衡器,这是什么东西?

这个东西就是负责进行负载分配的一个分配体,当所有的请求到来的时候,都需要这个内容来帮助进行请求的分配,所以这就意味着这个东西必然有很高的承担能力,这个承担能力是要远远高于普通的应用服务器的

但是这就可以了吗?其实也是不一定的,因为负载均衡器也可能会无法承受一个比较大的请求,此时就需要引入更多的负载均衡器,也就是我们俗称的引入多个机房,让多个机房共同来进行分配

但这其实并不是一件好事,因为风险总是和收益并存的,只是单纯这样的设计并不会有比较大的风险,但是随着机房的增多,机器的增多,这就意味着出现问题的概率就会大大增加,此时就会导致出现问题

读写分离

随着业务的增长,可以动态扩张服务器来进行压力的缓解,但是实际上,数据的压力会到达一个系统承载能力的上限,此时如果一味地去扩展数据库的服务器是不现实的,因为存在数据一致性的问题,例如对于同样的数据,如果在不同的机器上是不同的数据,那这必然是一件非常危险的事,所以就诞生了下面的模式-----主从分离架构

如何理解?只保留一个主要的数据库作为写入数据库,其他的数据库都是作为从属数据库,从库的数据全部来源于主库的数据,在经过同步之后,从库中就一直维护着的是和主库一致的数据

我们为了分担数据库的压力,可以让数据的请求全部交给主库来处理,但是读的请求可以分配到各个库当中,在大多数的系统中,读的比例是要远远高于写的比例的,所以就有了读写分离这样的架构体系

在这里插入图片描述
主服务器一般是一个,从属服务器一般是多个,这叫做一主多从,让数据库也通过负载均衡的方式,让应用服务器来进行访问

冷热分离架构

但是数据库有一个天然的问题,那就是响应速度比较慢,那么如何解决这个问题?此时就引入了所谓冷热分离架构体系

把数据区分为冷热两个部分,把热点数据缓存到缓存中,在缓存中的访问速度就要比数据库块多了,具体的实例如下所示:

在这里插入图片描述

如上所示,在原来的基础上新增一个缓存服务器,这个缓存服务器就会帮助数据库服务器进行负重前行,而在缓存服务器当中其实存放的只是一小部分的热点数据,也就是会频繁访问到的数据,缓存虽然快,但不是没有代价的,那就是它很小,这也就解释了不会有完美的解决方案,只是会有不同的优化场景

垂直分库

引入了分布式系统,不光要去应对更高的并发量,但是也要应对更大的数据量,因此存储,也就变成了一个比较大的问题

是否可能会出现的场景是,一台数据库服务器已经存不下数据了呢?当然会出现这样的情况,既然一个主机存不下,那么就需要用到更多的主机来进行存储,所以下面引入的这个模式架构体系,就是叫做分库分表

简单来说,就是本来一个数据库服务器,这个数据库服务器上有多个数据库,现在就可以引入多个数据库服务器,让每一个数据库服务器去存储一个或者一部分数据库,甚至说,当一个表特别大的时候,也可以对于表进行拆分

在这里插入图片描述

微服务架构

在这里插入图片描述

在之前的应用服务器当中,一个服务器中可能做了很多的业务,这就会导致一个服务器的代码会变的非常的复杂,为了解决这样的问题,就可以使用一个微服务的概念,把一个复杂的服务器拆解为更多的,功能更加单一的更小的服务器

微服务就使得服务器的种类和数量增加了

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

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

相关文章

【JavaEE 初阶(六)】网络编程

❣博主主页: 33的博客❣ ▶️文章专栏分类:JavaEE◀️ 🚚我的代码仓库: 33的代码仓库🚚 🫵🫵🫵关注我带你了解更多网络知识 目录 1.前言2.浅谈网络2.1基本知识2.2.OSI与TCP/IP 3.网络编程3.1TCP与UDP区别3.2UDP网路编程…

18 【Aseprite 作图】描边 换颜色 蒙版

1 描边的方式:选择“编辑 - 特效 - 轮廓” 就可以一键描边了 2 替换颜色 通过“编辑 - 替换颜色”,就把颜色从黄色 替换成了 紫色 3 调整色相,通过“编辑 - 调整 - 色相/饱和度”,就可以类似PS调整色相饱和度 4 铅笔选择“锁…

vue+springboot用户注销功能

vue文件前端 <el-button type"warning" plain click"handleDeletion">注 销</el-button> // 注销 const handleDeletion (userName) > {ElMessageBox.confirm(注销该用户所有信息后无法恢复&#xff0c;您确认注销吗?, 注销确认, { type…

【eclipse】如何在IDE里创建一个Java Web项目?

如何在eclipse中创建一个动态Web项目并成功运行&#xff1f; 一、 最终效果 懒得写那么多了…我也不知道该怎么写了&#xff0c;有点乱&#xff0c;有问题可以在评论里留言&#xff0c;我看到会解决的&#xff0c;在这个过程中也踩到了一些坑&#xff0c;但好在有CSDN帮助解决…

【VTKExamples::Rendering】第十一期 TestStringToImageDemo

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享TestStringToImageDemo,该样例用于将字符转化为Image,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^…

YOLOv8独家改进:backbone改进 | 微软新作StarNet:超强轻量级Backbone | CVPR 2024

💡💡💡创新点:star operation(元素乘法)在无需加宽网络下,将输入映射到高维非线性特征空间的能力,这就是StarNet的核心创新,在紧凑的网络结构和较低的能耗下展示了令人印象深刻的性能和低延迟 💡💡💡如何跟YOLOv8结合:替代YOLOv8的backbone 收录 YOLOv8…

Qt---文件系统

一、基本文件操作 1. QFile对文件进行读和写 QFile file( path 文件路径) 读&#xff1a; file.open(打开方式) QlODevice::readOnly 全部读取->file.readAll()&#xff0c;按行读->file.readLine()&#xff0c;atend()->判断是否读到文件尾 …

贪心算法----最大数

今日题目&#xff1a;leetcode179------点击跳转题目 分析&#xff1a; 要把这些数组组成最大的数&#xff0c;首先我们把数字转化为字符串&#xff0c;根据自定义的排序规则把这些字符串字数排列&#xff0c;再用一个字符串接受这些字符串数字拼接成最大的字符串数字 排序规则…

UniGen:用于生成自动驾驶场景的初始智体状态和轨迹的统一建模

24年5月谷歌WayMo论文“UniGen: Unified Modeling of Initial Agent States and Trajectories for Generating Autonomous Driving Scenarios”。 本文介绍 UniGen&#xff0c;一种生成交通场景的新方法&#xff0c;用于通过仿真评估和改进自动驾驶软件。 其方法在一个统一的模…

探索大语言模型代理(Agent):研究背景、通用框架与未来展望

引言 近年来&#xff0c;随着人工智能技术的飞速发展&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;在智能代理&#xff08;Agent&#xff09;领域中的应用已成为研究的热点。这些代理不仅能够模拟人类的认知过程&#xff0c;还能在复杂的社会环…

智慧畜牧:RFID技术在现代屠宰场的应用

智慧畜牧&#xff1a;RFID技术在现代屠宰场的应用 RFID猪肉溯源管理解决方案是一种利用无线射频识别&#xff08;Radio Frequency Identification&#xff0c;简称RFID&#xff09;技术来实现猪肉从养殖、屠宰到销售整个供应链过程中的追踪与追溯的现代化管理手段。这一方案通…

【class】人工智能初步(了解深度学习)

任务二&#xff1a;对电脑图像的智能识别和自动分类之前 在实现对电脑图像的智能识别和自动分类之前&#xff0c;本节课我们先学习两个知识点&#xff1a;1. 计算机如何看世界&#xff1f; 揭秘计算机眼中的图像2. 计算机如何理解世界&#xff1f; 揭秘图像识别、深度学习 计…

图像质量评价指标:了解图像质量的度量方式

图像质量评价指标&#xff1a;了解图像质量的度量方式 在图像处理和计算机视觉领域&#xff0c;评价图像质量的准确性对于许多应用至关重要。通过合适的评价指标&#xff0c;我们可以量化图像的质量&#xff0c;从而更好地了解图像处理算法的效果和改进空间。本文将介绍图像质…

单链表经典算法OJ题---力扣21

1.链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09;【点击即可跳转】 思路&#xff1a;创建新的空链表&#xff0c;遍历原链表。将节点值小的节点拿到新链表中进行尾插操作 遍历的结果只有两种情况&#xff1a;n1为空 或 n2为空 注意&#xff1a;链表为空的情况 代…

程序员的神奇应用:从代码创造到问题解决的魔法世界之持续集成/持续部署

文章目录 持续集成/持续部署 在软件开发的海洋中&#xff0c;程序员的实用神器如同航海中的指南针&#xff0c;帮助他们导航、加速开发、优化代码质量&#xff0c;并最终抵达成功的彼岸。这些工具覆盖了从代码编写、版本控制到测试和部署的各个环节。 在当今数字化的世界里&…

GEE获取年均LAI(叶面积指数)和FPAR(光合有效辐射分量)

MODIS/061/MOD15A2H 组合了叶面积指数 (LAI) 和光合有效辐射分数 (FPAR) 产品是分辨率为 500m 的 8 天复合数据集。该算法从Terra传感器8天内的所有采集数据中选择了“最佳”像元。 var table ee.FeatureCollection("users/yipeizhao736/HefeiProvince"); var coll…

【C++初阶】第十一站:list的介绍及使用

目录 list的介绍及使用 1.list的含义 2.list的介绍 3.list的使用 1.list的构造 2.list iterator的使用 3.list capacity 4.list element access 5 list modifiers 尾插尾删 和 头插头删 insert 和 erase resize swap clear 6.list sort and reverse 7.list copy vector copy li…

设计一个游戏的基本博弈框架

设计一个游戏的基本博弈框架&#xff0c;玩家通过操作改变某个数值&#xff0c;这个数值的变动会引发一系列实时变化&#xff0c;并且当这些数值累计到特定阈值时&#xff0c;会导致游戏中出现其他变化&#xff0c;可以分为以下几个步骤&#xff1a; 1. 确定游戏类型和主题 首…

GH263-045、GH263-035比例阀用电磁铁驱动放大器

GH263-045、GH263-035比例阀用电磁铁用于比例变量泵和油马达的控制&#xff0c;通过改变比例阀芯位置&#xff0c;可实现对比例变量泵的输出流量或油马达 转矩和转速的无级调节和远程控制&#xff0c;驱动电流分为GH263-035&#xff08;0.68A&#xff09;/GH263-045&#xff08…

未授权访问:Docker未授权访问漏洞

目录 1、漏洞原理 2、环境搭建 3、未授权访问 4、通过crontab反弹宿主机shell 防御手段 今天继续学习各种未授权访问的知识和相关的实操实验&#xff0c;一共有好多篇&#xff0c;内容主要是参考先知社区的一位大佬的关于未授权访问的好文章&#xff0c;还有其他大佬总结好…