大白话讲讲分布式存储系统的架构设计以及容错架构

简介: 分布式存储系统的架构设计旨在实现数据的分布式存储和负载均衡,通常采用数据分片和多节点存储的方式。容错架构则是为了提高系统的鲁棒性和可用性。在分布式存储系统中,容错架构常采用数据的冗余备份来应对节点故障或网络异常问题。通过复制数据到多个节点,即使某个节点发生故障,系统仍可以提供数据的可靠访问。此外,容错架构还包括故障检测和自动故障转移机制,用于及时检测节点故障,并将故障节点的任务转移给其他正常节点。这样可以保证系统在故障情况下仍能正常运行,并提供不间断的数据访问。通过合理的架构设计和有效的容错机制,分布式存储系统可以实现高可用性和数据可靠性,满足大规模数据存储和访问的需求。

1、TB级数据放在一台机器上:难啊!

首先,我们来瞧瞧,到底啥是分布式存储系统呢?

其实特别的简单,咱们就用数据库里的一张表来举例。

比如你手头有个数据库,数据库里有一张特别大的表,里面有几十亿,甚至上百亿的数据。

更进一步说,假设这一张表的数据量多达几十个TB,甚至上百个TB,这时你觉得咋样?

当然是内心感到恐慌和无助了,因为如果你用MySQL之类的数据库,单台数据库服务器上的磁盘可能都不够放这一张表的数据!

咱们就来看看下面的这张图,来感受一下。

image-20220212142205271

2、到底啥是分布式存储?

所以,假如你手头有一个超大的数据集,几百TB!那你还是别考虑传统的数据库技术来存放了。

因为用一台数据库服务器可能根本都放不下,所以我们考虑一下分布式存储技术?对了!这才是解决这个问题的办法。

咱们完全可以搞多台机器嘛!比如搞20台机器,每台机器上就放1/20的数据。

举个例子,比如总共20TB的数据,在每台机器上只要1TB就可以了,1TB应该还好吧?每台机器都可以轻松加愉快的放下这么多数据了。

所以说,把一个超大的数据集拆分成多片,给放到多台机器上去,这就是所谓的分布式存储

咱们再看看下面的图。

image-20220212142338053

3、那么啥又是分布式存储系统呢?

那分布式存储系统是啥呢?

分布式存储系统,当然就是负责把一个超大数据集拆分成多块,然后放到多台机器上来存储,接着统一管理这些分散在多台机器上存储的数据的一套系统。

比如说经典的hadoop就是这类系统,然后fastdfs也是类似的。

如果你可以脑洞大开,从思想本质共通的层面出发,那你会发现,其实类似elasticsearch、redis cluster等等系统,他本质都是如此。

这些都是基于分布式的系统架构,把超大数据拆分成多片给你存放在多台机器上。

咱们先从分布式系统架构层面出发,不拘泥于任何一种技术,所以姑且可以设定:这套分布式存储系统,有两种进程。

一个进程是Master节点,就在一台机器上,负责统一管控分散在多台机器上的数据。

另外一批进程叫做Slave节点,每台机器上都有一个Slave节点,负责管理那台机器上的数据,跟Master节点进行通信。

咱们看看下面的图,通过图再来直观的看看上面的描述。

image-20220212142805862

4、天哪!某台机器宕机了咋办?

这个时候又有一个问题了,那么万一上面那20台机器上,其中1台机器宕机了咋整呢?

这就尴尬了,兄弟,这会导致本来完整的一份20TB的数据,最后有19TB还在了,有1TB的数据就搞丢了,因为那台机器宕机了啊。

所以说你当然不能允许这种情况的发生,这个时候就必须做一个数据副本的策略。

比如说,我们完全可以给每一台机器上的那1TB的数据做2个副本的冗余,放在别的机器上,然后呢,万一说某一台机器宕机,没事啊,因为其他机器上还有他的副本。

我们来看看这种多副本冗余的架构设计图。

image-20220212143540585

上面那个图里的浅蓝色的“1TB数据01”,代表的是20TB数据集中的第一个1TB数据分片。

图中可以看到,他就有3个副本,分别在三台机器中都有浅蓝色的方块,代表了他的三个副本。

这样的话,一份数据就有了3个副本了。其他的数据也是类似。

这个时候我们假设有一台机器宕机了,比如下面这台机器宕机,必然会导致“1TB数据01”这个数据分片的其中一个数据副本丢失。如下图所示:

image-20220212143745556

那这个时候要紧吗?不要紧,因为“1TB数据01”这个数据分片,他还有另外2个副本在存活的两台机器上呢!

所以如果有人要读取数据,完全可以从另外两台机器上随便挑一个副本来读取就可以了,数据不会丢的,不要紧张,大兄弟。

5、Master节点如何感知到数据副本消失?

现在有一个问题,比如说有个兄弟要读取“1TB数据01”这个数据分片,那么他就会找Master节点,说:

“你能不能告诉我“1TB数据01”这个数据分片人在哪里啊?在哪台机器上啊?我需要读他啊!”

我们来看看下面的图。

image-20220212143942445

那么这个时候,Master节点就需要从“1TB数据01”的3个副本里选择一个出来,告诉人家说:

“兄弟,在哪台哪台机器上,有1个副本,你可以去那台机器上读“1TB数据01”的一个副本就ok了。”

但是现在的问题是,Master节点此时还不知道“1TB数据01”的副本3已经丢失了,那万一Master节点还是通知人家去读取一个已经丢失的副本3,肯定是不可以的。

所以,我们怎么才能让Master节点知道副本3已经丢失了呢?

其实也很简单,每台机器上负责管理数据的Slave节点,都每隔几秒(比如说1秒)给Master节点发送一个心跳。

那么,一旦Master节点发现一段时间(比如说30秒内)没收到某个Slave节点发送过来的心跳,此时就会认为这个Slave节点所在机器宕机了,那台机器上的数据副本都丢失了,然后Master节点就不会告诉别人去读那个丢失的数据副本。

大家看看下面的图,一旦Slave节点宕机,Master节点收不到心跳,就会认为那台机器上的副本3就已经丢失了,此时绝对不会让别人去读那台宕机机器上的副本3。

image-20220212144652999

那么此时,Master节点就可以通知人家去读“1TB数据01”的副本1或者副本2,哪个都行,因为那两个副本其实还是在的。

举个例子,比如可以通知客户端去读副本1,此时客户端就可以找那台机器上的Slave节点说要读取那个副本1。

整个过程如下图所示。

image-20220212144852479

6、复制副本保持足够副本数量

这个时候又有另外一个问题,那就是“1TB数据01”这个数据分片此时只有副本1和副本2这两个副本了,这就不足够3个副本啊。

因为我们预设的是每个数据分片都得有3个副本的。大家想想,此时如何给这个数据分片增加1个副本呢?

很简单,Master节点一旦感知到某台机器宕机,就能感知到某个数据分片的副本数量不足了。

此时,就会生成一个副本复制的任务,挑选另外一台机器来从有副本的机器去复制一个副本。

比如看下面的图,可以挑选第四台机器从第二台机器去复制一个副本。

image-20220212145145179

但是,现在这个复制任务是有了,我们怎么让机器4知道呢?

其实也很简单,机器4不是每秒都会发送一次心跳么?当机器4发送心跳过去的时候,Master节点就通过心跳响应把这个复制任务下发给机器4,让机器4从机器2复制一个副本好了。

同样,我们来一张图,看看这个过程:

image-20220212145457367

看上图,现在机器4上是不是又多了一个“1TB数据01”的副本3 ?那么“1TB数据01”这个数据分片是不是又变成3个副本了?

7、删除多余副本

那反过来,如果说此时机器3突然恢复了,他上面也有一个“1TB数据01”的副本3,相当于此时“1TB数据01”就有4个副本了,副本不就多余了吗?

没关系,一旦Master节点感知到机器3复活,会发现副本数量过多,此时会生成一个删除副本任务。

他会在机器3发送心跳的时候,下发一个删除副本的指令,让机器3删除自己本地多余的副本就可以了。这样,就可以保持副本数量只有3个。

一样的,大家来看看下面的图。

image-20220212145731130

8、总结

好了,到这里,通过超级大白话的讲解,还有十多张图的渐进式演进说明,相信大家以前即使不了解分布式系统,都绝对能理解一个分布式系统的完整的数据容错架构是如何设计的了。

实际上,这种数据分片存储 、多副本冗余、宕机感知、自动副本迁移、多余副本删除,这套机制,对于hadoop、elasticsearch等很多系统来说,都是类似的。

重点是人家的设套设计思想去进行吸取,这样,以后学习类似的一些技术的时候,对他们的原理、思想都会感到一种似曾相识的感觉。

目录
相关文章
|
3月前
|
SQL 前端开发 关系型数据库
如何开发一套研发项目管理系统?(附架构图+流程图+代码参考)
研发项目管理系统助力企业实现需求、缺陷与变更的全流程管理,支持看板可视化、数据化决策与成本优化。系统以MVP模式快速上线,核心功能包括需求看板、缺陷闭环、自动日报及关键指标分析,助力中小企业提升交付效率与协作质量。
|
2月前
|
数据采集 机器学习/深度学习 运维
量化合约系统开发架构入门
量化合约系统核心在于数据、策略、风控与执行四大模块的协同,构建从数据到决策再到执行的闭环工作流。强调可追溯、可复现与可观测性,避免常见误区如重回测轻验证、忽视数据质量或滞后风控。初学者应以MVP为起点,结合回测框架与实时风控实践,逐步迭代。详见相关入门与实战资料。
|
2月前
|
前端开发 JavaScript BI
如何开发车辆管理系统中的车务管理板块(附架构图+流程图+代码参考)
本文介绍了中小企业如何通过车务管理模块提升车辆管理效率。许多企业在管理车辆时仍依赖人工流程,导致违章处理延误、年检过期、维修费用虚高等问题频发。将这些流程数字化,可显著降低合规风险、提升维修追溯性、优化调度与资产利用率。文章详细介绍了车务管理模块的功能清单、数据模型、系统架构、API与前端设计、开发技巧与落地建议,以及实现效果与验收标准。同时提供了数据库建表SQL、后端Node.js/TypeScript代码示例与前端React表单设计参考,帮助企业快速搭建并上线系统,实现合规与成本控制的双重优化。
|
3月前
|
人工智能 监控 测试技术
告别只会写提示词:构建生产级LLM系统的完整架构图​
本文系统梳理了从提示词到生产级LLM产品的八大核心能力:提示词工程、上下文工程、微调、RAG、智能体开发、部署、优化与可观测性,助你构建可落地、可迭代的AI产品体系。
613 51
|
2月前
|
机器学习/深度学习 人工智能 缓存
面向边缘通用智能的多大语言模型系统:架构、信任与编排——论文阅读
本文提出面向边缘通用智能的多大语言模型(Multi-LLM)系统,通过协同架构、信任机制与动态编排,突破传统边缘AI的局限。融合合作、竞争与集成三种范式,结合模型压缩、分布式推理与上下文优化技术,实现高效、可靠、低延迟的边缘智能,推动复杂场景下的泛化与自主决策能力。
306 3
面向边缘通用智能的多大语言模型系统:架构、信任与编排——论文阅读
|
2月前
|
人工智能 自然语言处理 安全
AI助教系统:基于大模型与智能体架构的新一代教育技术引擎
AI助教系统融合大语言模型、教育知识图谱、多模态交互与智能体架构,实现精准学情诊断、个性化辅导与主动教学。支持图文语音输入,本地化部署保障隐私,重构“教、学、评、辅”全链路,推动因材施教落地,助力教育数字化转型。(238字)
|
3月前
|
消息中间件 数据采集 NoSQL
秒级行情推送系统实战:从触发、采集到入库的端到端架构
本文设计了一套秒级实时行情推送系统,涵盖触发、采集、缓冲、入库与推送五层架构,结合动态代理IP、Kafka/Redis缓冲及WebSocket推送,实现金融数据低延迟、高并发处理,适用于股票、数字货币等实时行情场景。
427 3
秒级行情推送系统实战:从触发、采集到入库的端到端架构
|
3月前
|
前端开发 API 定位技术
如何开发车辆管理系统中的用车申请板块(附架构图+流程图+代码参考)
本文详细解析了如何将传统纸质车辆管理流程数字化,涵盖业务规则、审批流、调度决策及数据留痕等核心环节。内容包括用车申请模块的价值定位、系统架构设计、数据模型构建、前端表单实现及后端开发技巧,助力企业打造可落地、易扩展的车辆管理系统。
|
2月前
|
存储 NoSQL 前端开发
【赵渝强老师】MongoDB的分布式存储架构
MongoDB分片通过将数据分布到多台服务器,实现海量数据的高效存储与读写。其架构包含路由、配置服务器和分片服务器,支持水平扩展,结合复制集保障高可用性,适用于大规模生产环境。
332 1
|
2月前
|
存储 人工智能 搜索推荐
拔俗AI助教系统:基于大模型与智能体架构的新一代教育技术引擎
AI助教融合大语言模型、教育知识图谱、多模态感知与智能体技术,重构“教、学、评、辅”全链路。通过微调LLM、精准诊断错因、多模态交互与自主任务规划,实现个性化教学。轻量化部署与隐私保护设计保障落地安全,未来将向情感感知与教育深度协同演进。(238字)