当前位置: 首页 > news >正文

深入浅出 -- 系统架构之分布式集群的分类

一、单点故障问题

集群,相信诸位对这个概念并不陌生,集群已成为现时代中,保证服务高可用不可或缺的一种手段。

回想起初集中式部署的单体应用,因为只有一个节点,因此当该节点出现任意类型的故障(网络、硬件资源、物理环境……)时,都会造成整个系统对客户端不可用,而这就是所谓的“单点故障问题”。

单点故障是建立高可用系统的第一道坎,而集群恰恰是解决单点故障最有效的手段,就算系统内一个节点出现故障,依旧有其他健康的节点能处理请求,保障系统正常运行,实现99.999……%高可用。

很多人对集群的认知,都源自于Nginx,因为当程序性能跟不上业务需求、又不想对服务器升配时,就可以使用Nginx来加机器,使用多台“价格优美”的低配机器,为服务做集群化部署,从而提升系统整体的吞吐量。

不过许多人对集群的认知止步于此,如何实现PB级的海量数据存储?大部分人并不清楚,而本文则来详细聊聊集群的各方面知识,为诸位量身打造出结构化的集群知识体系。

二、集群的定义与分类

集群,即是指:通过多台物理机器,组成一台逻辑上的庞大机器使用,集群带来的优势有四:

  • ①高可用:集群内某个节点故障,可迅速将流量迁移至其他节点,解决了单点故障;
  • ②吞吐量:多台机器并行处理外部请求,可以为系统带来更强大的负载与吞吐能力;
  • ③拓展性:可根据业务的增长/萎靡,动态伸缩集群内的节点数量,系统更加灵活;
  • ④性价比:无需花费更高的价格升配机器,可使用多台价格、配置较低的机器构建。

集群带来的好处很多,即解决了单点故障,又兼顾了吞吐与性能、动态伸缩、性价比,同时对客户端是无感知的,客户端在请求时,无法分辨出究竟采用了多少台机器来部署服务。

上面是集群的基本定义与优势,现在问大家一个问题:从性质维度出发,你认为集群可以分为哪几种?

1.1、集群的分类

集群大家很熟,但一问集群的分类,估计各位会愣住,这……我没想过啊~

其实集群可粗略分为两大类,逻辑处理集群、数据存储集群,前者对应着业务系统,后者对应着数据存储组件,举些例子说明:

  • 逻辑处理型集群:业务服务、API网关、请求分发器、并行运算(科学计算)服务等;
  • 数据存储型集群:缓存中间件、消息中间件、数据库、搜索中间件集群、对象存储等。

仔细观察下,如果熟悉云技术的小伙伴会发现,这跟云平台里定义的有状态、无状态概念很类似~

简单来说,逻辑处理型的集群,只需要处理客户端请求的逻辑运算,拿业务系统来说,目前有个登录功能,系统只需根据业务流程,执行完对应的业务逻辑,接着就可给客户端响应结果。

PS:为了便于后续讲述,逻辑处理型集群则用业务系统来代替,当提到业务系统时,可自动代入“逻辑处理型集群”。

而存储型的集群,客户端一般是“程序”,如DB、Redis、MQ、ES……,生产环境里,处理的绝大多数请求,都来自于业务系统。对于客户端的请求,需要保存信息,处理写入请求需要将客户端带来的数据存好,处理读取请求则需将之前存好的数据拿出来返回。

当然,有人也许会疑惑,业务系统不也是读写请求吗?为什么将其归类到逻辑处理型?这是因为业务系统自身不会存储任何信息,客户端(用户)提交的数据,会由业务系统间接调用各类组件来存储,如登录信息放到Redis、业务数据放到DB……。

1.2、逻辑处理型集群的核心

在之前的模式中,因为只有一台机器,域名可直接映射服务器的公网IP,当出现对应域名的请求,DNS可直接解析到对应的服务器IP,客户端(如浏览器)直接对拿到的IP发起请求就行。

但是当一个业务系统,使用多个节点部署组成集群时,所面临的最大问题,即是请求如何分发到具体服务器?

为了解决该问题,不得不引入请求分发器,域名映射请求分发器所在的IP,分发器接到客户端的请求后,再分发给具体的业务节点处理。

当外部请求来到分发器时,分发器可以在已配置的节点列表中选一台机器,负责处理具体的业务请求逻辑。但这里有个问题,如何保证各节点的负载均衡呢?随机分发貌似不太合适,咋办?选择合适的分发算法,如轮询。

所谓的轮询,则是根据配置的节点列表顺序,依次分发请求,如第一个请求给第一个节点、第二个请求给第二个节点……,当分发到最后一个节点时,再回到第一个节点,周而复始。听起来不错对吧?但有个问题,来看例子。

现在有个房子要装修,打电话定了一车水泥,总共六十包,目前有四个人在场:30岁的男人、9岁的儿子、30岁的老婆、60岁的老爹。

这里的水泥就是请求,按照轮询算法,六十包、四个人,你一拍大腿!正好一人十五包,合理不?显然不合理,先不说别的,光看九岁儿子那小身板,像个能抗十五袋的人不?

上述例子,换到集群场景中亦是同理,组成集群的机器有好有差,如果一视同仁,站在那些较差的服务器来说,请求分发的不够合理,因此该如何保证分发的负载均衡?

负载均衡是两个词,负载即服务器目前承担的压力,均衡代表压力一致,组合起来就是指:集群内各节点承担的压力要一致!相同的访问量,分发到一台2C4G服务器上,CPU利用率经常打到95%;但放到8C16G的机器上根本不是事。

综上所述,负载均衡要考虑各机器本身的性能,这时就得用到一些较为智能的分发算法,如:

  • 平滑加权轮询算法:在轮询的基础上,根据机器配置,为各节点分配权重值;
  • 最小活跃数算法:根据实际负载情况进行调整,自动寻找活跃度最低的节点处理请求;
  • 最优响应算法:根据分发后请求的处理时间,新请求到来时,分发给响应最快的节点处理;
  • ……

这些智能化的分发策略,能综合考虑机器性能、实际负载、响应速度等因素,选择出相对合适的节点处理请求,但这里不做过多展开,感兴趣可参考《网络编程-请求分发篇》。

1.3、为什么分发器性能那么高?

业务系统做集群,通常会选择Nginx,毕竟它除开提供负载均衡的能力外,还能做反向代理,避免了将后端服务直接暴露在公网的隐患性,可为什么这类负载均衡器,性能那么高呢?

相同的访问量,Nginx可以轻松抗住,而后端服务或许要起几个才能勉强处理,为啥?其实道理很简单,因为这类负载均衡器,自身并不负责处理请求,只是负责做请求分发,所以用户的请求,在Nginx里逗留的时间极其短暂。

一台机器处理请求的速度越快,在相同的时间窗口里,其吞吐量更高。除此之外,因为不需要处理业务逻辑,自然也不存在资源之类的竞争(如锁资源),并且Nginx底层选用了多路复用模型,实际负责分发请求的线程数极少,也不存在多线程应用那种线程上下文频繁切换的开销……,种种因素下,为其高性能表现提供了强有力的支撑。

1.4、双机热备机制

工作年限较长的一点的小伙伴,应该在之前的招聘需求上,见过这么一条:

“具备集群、双机热备等高可用系统经验者优先……”

其中的双机热备技术是指啥?所谓的热备机制,可以理解成集群技术的另类体现,它是一种系统冗余设计方案,即同时部署两套系统,一主一备,主系统和备用系统并行运行。在主系统发生故障时,备用系统能迅速接管主系统的工作,维持系统正常运作,以确保服务的可用性,及业务的连续性。

可是有了Nginx这类负载均衡器,还要啥热备技术呀?恰巧,就是Nginx这类组件需要热备技术支持,虽然业务系统通过Nginx做了集群化部署,避免单点故障造成系统不可用的风险,但Nginx就成了“咽喉要地”,因为它只有一个节点,如果部署Nginx的机器发生故障,就会导致外部流量无法分发到业务系统,造成整个系统瘫痪。

热备机制如何实现呢?可以借助keepalived、TurbolinuxTurboHA、Heartbeat这类专门保障高可用的技术栈实现,建设热备机制时要考虑几点:

  • ①当进程出现故障(内存溢出、进程宕机等)时,热备机制能自动重启服务;
  • ②当部署进程的机器出现故障(断网、停电、硬件损坏)时,备机能及时接替主机工作;
  • ③新主上线接管后,旧主重新启动能自动成为新主的备机,保障热备机制的可持续性;
  • ④出现热备机制无法处理的故障时(硬件问题、机房环境问题等),能及时通知人工介入。

做好上述四点,则代表热备机制较为完善,可具体咋做呢?这里不过多赘述,感兴趣可参考《Keepalived搭建双机热备机制》。

PS:除一主一备外,也可以选择搭建双主热备,这样能最大程度利用资源,避免备机长时间处于空闲状态。

相关文章:

深入浅出 -- 系统架构之分布式集群的分类

一、单点故障问题 集群,相信诸位对这个概念并不陌生,集群已成为现时代中,保证服务高可用不可或缺的一种手段。 回想起初集中式部署的单体应用,因为只有一个节点,因此当该节点出现任意类型的故障(网络、硬件…...

Docker之镜像与容器的相关操作

目录 一、Docker镜像 搜索镜像 下载镜像 查看宿主机上的镜像 删除镜像 二、Docker容器 创建容器 查看容器 启停容器 删除容器 进入容器 创建/启动/进入容器 退出容器 查看容器内部信息 一、Docker镜像 Docker 运行容器前需要本地存在对应的镜像, 如…...

中科驭数超低时延网络解决方案入选2023年度金融信创优秀解决方案

近日,由中国人民银行领导、中国金融电子化集团有限公司牵头组建的金融信创生态实验室发布「2023年度第三期金融信创优秀解决方案」,中科驭数超低时延网络解决方案从众多方案中脱颖而出,成功入选,代表了该方案的技术创新和金融实践…...

应用方案 | DCDC电源管理芯片MC34063A

MC34063A 为一单片 DC-DC 变换集成电路,内含温度补偿的参考电压源(1.25V)、比较器、能有效限制电流及控制工作周期的振荡器,驱动器及大电流输出开关管等。外配少量元件,就能组成升压、降压及电压反转型 DC-DC 变换器。…...

【个人使用推荐】联机不卡顿 小白一键部署 大厂云服务器选购指南 16G低至26 幻兽帕鲁最大更新来袭

更新日期:4月8日(半年档 价格回调,京东云采购季持续进行) 本文纯原创,侵权必究 《最新对比表》已更新在文章头部—腾讯云文档,文章具有时效性,请以腾讯文档为准! 【腾讯文档实时更…...

57 npm run build 和 npm run serve 的差异

前言 npm run serve 和 npm run build 的差异 这里主要是从 vue-cli 的流程 来看一下 我们经常用到的这两个命令, 他到传递给 webpack 打包的时候, 的一个具体的差异, 大致是配置了那些东西? 经过了那些流程 ? vue-cli 的 vue-plugin 的加载 内置的 plugin 列表如下, 依次…...

原生小程序开发性能优化指南

性能优化指南 1.骨架屏 业务可以在数据加载完成之前用骨架屏幕来占位,提升体验。 2.包大小优化 减小包中静态资源,例如图片文件,可将图片进行压缩降低文件体积。无用文件、函数、样式剔除。除了部分用于容错的图片必须放在代码包&#xf…...

「51媒体网」邀请媒体采访报道对企业宣传有何意义?

传媒如春雨,润物细无声的,大家好,我是51媒体网胡老师。 邀请媒体采访报道对企业宣传具有多重意义: 提升品牌知名度和曝光度:媒体是信息传播的重要渠道,通过媒体的报道,企业及其活动、产品能够迅…...

用动态IP采集数据总是掉线是为什么?该怎么解决?

动态IP可以说是做爬虫、采集数据、搜集热门商品信息中必备的代理工具,但在爬虫的使用中,总是会遇到动态IP掉线的情况,从而影响使用效率,本文将探讨动态IP代理掉线的几种常见原因,并提供解决方法,以帮助大家…...

MySQL操作DDL

目录 1.概述 2.数据库的增删改查 3.表的增删改查 3.1.创建和查看表结构 3.2.修改表 3.3.查看所有的表 3.4.删除表 4.用户 5.DDL在实际应用场景中的作用 5.1.数据库设计 5.2.数据库维护 ​​​​​​​5.3.数据库迁移或重置 ​​​​​​​5.4.优化性能 ​​​​​…...

程序员如何搞副业

目录 1.概述 2.个人项目开发 3.在线教育和培训 4.技术博客和内容创作 1.概述 程序员通过副业实现个人价值最大化和增加收入的途径多种多样,以下是一些方法: 自由职业: 程序员可以在业余时间提供自由职业服务。包括为客户开发软件、网站或应用程序、…...

【嵌入式开发 Linux 常用命令系列 4.3 -- git add 不 add untracked file】

请阅读【嵌入式开发学习必备专栏 】 文章目录 git add 不add untracked file git add 不add untracked file 如果你想要Git在执行git add .时不添加未跟踪的文件(untracked files),你可以使用以下命令: git add -u这个命令只会加…...

git 常用命令和使用方法

作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生在读,研究方向无线联邦学习 擅长领域:驱动开发,嵌入式软件开发,BSP开发 作者主页:一个平凡而乐于分享的小比特的个人主页…...

程序员如何搞副业?

程序员不仅拥有将抽象概念转化为实际应用的能力,还通常具备强大的逻辑思维和问题解决能力。然而,许多程序员并不满足于仅仅在一家公司工作,他们渴望通过副业来实现个人价值的最大化,增加收入,甚至探索自己的创业梦想。…...

深入浅出 -- 系统架构之负载均衡Nginx实现高可用

一、Nginx的高可用 线上如果采用单个节点的方式部署Nginx,难免会出现天灾人祸,比如系统异常、程序宕机、服务器断电、机房爆炸、地球毁灭....哈哈哈,夸张了。但实际生产环境中确实存在隐患问题,由于Nginx作为整个系统的网关层接入…...

鲸鱼优化算法(Whale Optimization Algorithm)

注意:本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 ([www.aideeplearning.cn]) 算法背景 鲸鱼优化算法(Whale Optimization Algorithm, WOA)是一种模拟鲸鱼捕食行为的优化算法。想象一下,你…...

C++内存管理new-delete大法及实现原理

目录 前言: 一:C语言中区域划分的回顾及各个变量存在的位置 1.经典例题 ​编辑2.C/C中内存区域的划分 二:C内存管理方式 new delete操作符 1.对于内置类型 2.对于自定义类型 三:operator new和operator delete函数 1…...

Spring WebFlux响应式实现WebFilter解决跨域问题

WebFilter 是 Spring Framework 中用于处理 Web 请求的过滤器接口,它是在基于 Servlet 3.0 规范的基础上,为了支持响应式编程模型而引入的。与传统的 Servlet 过滤器相似,WebFilter 也允许开发者对进入的请求和返回的响应进行拦截、修改或者增…...

第4章 Redis,一站式高性能存储方案,笔记问题

点赞具体要实现功能有哪些? 可以点赞的地方:对帖子点赞,对评论点赞点一次是点赞,再点一次是取消赞统计点赞的数量(计数,string),帖子被点赞的数量,某个用户被点赞的数量…...

UVA540 Team Queue 解题报告

UVA540 Team Queue 解题报告 题目链接 https://vjudge.net/problem/UVA-540 题目大意 有t个团队的人正在排一个长队。每次新来一个人时,如果他有队友在排队,那么这个新人会插队到最后一个队友的身后。如果没有任何一个队友排队,则他会排到…...

基础贪心问题

1.部分背包问题 #include<iostream> #include<algorithm> using namespace std; const int N 110; double v[N], w[N]; pair<double, int> a[N]; int n, m;int main(){cin>>n>>m;double x, y;for(int i 0; i < n; i){cin>>v[i]>&g…...

day13 java final 类和对象的初始化执行顺序

final [面试题]请简述final关键字final修饰类&#xff08;最终的类&#xff09;-太监类&#xff1a;该类不能被继承。(比如&#xff1a;String StringBuilder,....) final修饰方法&#xff08;最终的方法&#xff09;&#xff1a;不能被重写 final修饰的变量 &#xff1a;值不…...

蓝桥杯gcd汇总

gcd3014 问题描述 小明和小红是一对恋人&#xff0c;他们相爱已经三年了&#xff0c;在今年的七夕节&#xff0c;小明准备给小红一个特殊的礼物。他想要送给小红一些数字&#xff0c;让小红算出有多少对正整数 (a,b) 满足以下条件&#xff1a; clcm(a,b)−dgcd(a,b)x其中 c,…...

极市平台 | 综述:一文详解50多种多模态图像融合方法

本文来源公众号“极市平台”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;综述&#xff1a;一文详解50多种多模态图像融合方法 0 极市导读 本工作总结了50篇论文中Lidar和camera的多模态融合的一些概念方法。笔者结合原文以及自…...

数据结构系列-队列的结构和队列的实现

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 队列 队列的概念及结构 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除删除数据操作的特殊线性表&#xff0c;队列具有先进先出FIFO&#xff0c;…...

MySQL——查询数据的处理

一、并列 连接两个数据列的值&#xff0c;并进行输出的格式化处理&#xff08;显示为一种统一的格式&#xff09; concat( 列 1 格式化字 符 ) mysql> select concat(vend_name, vend_country) from vendors; --------------------------------- | concat(vend_name, ve…...

【机器学习300问】59、计算图是如何帮助人们理解反向传播的?

在学习神经网络的时候&#xff0c;势必会学到误差反向传播&#xff0c;它对于神经网络的意义极其重大&#xff0c;它是训练多层前馈神经网络的核心算法&#xff0c;也是机器学习和深度学习领域中最为重要的算法之一。要正确理解误差反向传播&#xff0c;不妨借助一个工具——计…...

ctfshow web入门 php特性 web108--web115

web108 ereg函数相当于而preg_match()函数 ereg函数的漏洞&#xff1a;00截断。%00截断及遇到%00则默认为字符串的结束 strrev函数就是把字符串倒过来 就是说intval处理倒过来的传参c0x36d&#xff08;877&#xff09;?ca%00778 web109 异常处理类 通过异常处理类Excepti…...

京东API接口采集商品详情数据(测试入口如下)

京东API接口采集商品详情数据 请求示例&#xff0c;API接口接入Anzexi58 在当今数字化时代&#xff0c;电商平台的API接口成为了获取商品详情数据的重要途径之一。作为中国最大的自营式电商企业&#xff0c;京东提供了丰富的API接口供开发者使用&#xff0c;以便获取京东平台上…...

Mac brew 安装软件

Mac brew 安装软件 homebrew 速度慢 将brew 切换到国内镜像源 # 速度一般 # 步骤一 cd "$(brew --repo)" git remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git# 步骤二 cd "$(brew --repo)/Library/Taps/homebrew/homebr…...

网站空间备案/湖南seo优化报价

前言❤️ 在路上&#xff0c;见识世界&#xff1b;在途中&#xff0c;认清自己 ❤️【VSCode常用插件】Path Autocomplete&#xff08;路径提示的插件&#xff09;一、安装教程二、设置教程&#xff08;1&#xff09;在vscode设置打开 settings.json&#xff08;2&#xff09;在…...

人大网站建设报价单/网络营销推广有哪些方法

以下内容假定已安装好Python 2.4/2.5一、下载并编译pyinstaller(只需做一次&#xff0c;以后可直接做第二步)1.下载pyinstaller,现在的版本是1.3(1)wget http://pyinstaller.hpcf.upr.edu/source/1.3/pyinstaller_1.3.tar.gz2.解包进入源码目录(1)tar zxv pyinstaller_1.3.tar.…...

分享音乐到wordpress/seo网站关键字优化

1.启动程序并输入到指定日志 nohup python manage.py runserver 0.0.0.0:9090 > /data/zyj/xadstat/xadstat.log 2&>1 & 2.查看当前进程号&#xff08;可能会起两个进程要杀死两次&#xff09; ps -ef |grep python 3.杀死进程 kil -9...

quercus wordpress/南京百度seo排名优化

PHP MySQL 创建数据库 数据库存有一个或多个表。 你需要 CREATE 权限来创建或删除 MySQL 数据库。 使用 MySQLi 和 PDO 创建 MySQL 数据库 CREATE DATABASE 语句用于在 MySQL 中创建数据库。 在下面的实例中&#xff0c;创建了一个名为 "myDB" 的数据库&#xff1a; …...

晋城网站建设/网络广告设计

题目链接&#xff1a;点击打开链接 题目描述&#xff1a;现在有一张关系网&#xff0c;网中有n个结点标号为1&#xff5e;n&#xff0c;有m个关系&#xff0c;每个关系之间有一个权值。问从2&#xff5e;n-1中任意去掉一个结点之后&#xff0c;从1&#xff5e;n的距离中所有最…...

网站首页的重要性/优化设计答案大全英语

题目C 数字整除 定理&#xff1a;把一个至少两位的正整数的个位数字去掉&#xff0c;再从余下的数中减去个位数的5倍。当且仅当差是17的倍数时&#xff0c;原数也是17的倍数 。 例如&#xff0c;34是17的倍数&#xff0c;因为3-20-17是17的倍数&#xff1b;201不是17的倍数&…...