【软件开发】大规模分布式系统的容错架构设计

这篇具有很好参考价值的文章主要介绍了【软件开发】大规模分布式系统的容错架构设计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大规模分布式系统的容错架构设计

假设有一个数据库,数据库里有一张特别大的表,里面有几十亿,甚至上百亿的数据。更进一步说,假设这一张表的数据量多达几十个 TB,甚至上百个 TB,那么如果用 MySQL 之类的数据库,单台数据库服务器上的磁盘可能都不够放这一张表的数据!
【软件开发】大规模分布式系统的容错架构设计

假如你手头有一个超大的数据集,几百 TB!那你还是别考虑传统的数据库技术来存放了。因为用一台数据库服务器可能根本都放不下,所以我们考虑一下分布式存储技术?对了!这才是解决这个问题的办法。

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

所以说,把一个超大的数据集拆分成多片,给放到多台机器上去,这就是所谓的分布式存储。
【软件开发】大规模分布式系统的容错架构设计

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

比如说经典的 Hadoop 就是这类系统,然后 FastDFS 也是类似的。如果你可以脑洞打开,从思想本质共通的层面出发,那你会发现,其实类似 Elasticsearch、Redis Cluster 等等系统,本质都是如此。这些都是基于分布式的系统架构,把超大数据拆分成多片给你存放在多台机器上。

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

  • 一个进程是 Master 节点,就在一台机器上,负责统一管控分散在多台机器上的数据。
  • 另外一批进程叫做 Slave 节点,每台机器上都有一个 Slave 节点,负责管理那台机器上的数据,跟 Master 节点进行通信。

【软件开发】大规模分布式系统的容错架构设计

这个时候又有一个问题了,那么万一上面那 20 台机器上,其中 1 台机器宕机了咋整呢?这就尴尬了,兄弟,这会导致本来完整的一份 20TB 的数据,最后有 19TB 还在了,有 1TB 的数据就搞丢了,因为那台机器宕机了啊。所以说你当然不能允许这种情况的发生,这个时候就必须做一个数据副本的策略。

比如说,我们完全可以给每一台机器上的那 1TB 的数据做 2 个副本的冗余,放在别的机器上,然后呢,万一说某一台机器宕机,没事啊,因为其他机器上还有他的副本。我们来看看这种多副本冗余的架构设计图。
【软件开发】大规模分布式系统的容错架构设计

上面那个图里的深蓝色的 1TB 数据 01,代表的是 20TB 数据集中的第一个 1TB 数据分片。从上图中可以看到,它有 3 个副本,分别在三台机器中都有浅蓝色的方块,代表了它的三个副本。这样的话,一份数据就有了 3 个副本了。其他的数据也是类似。

这个时候我们假设有一台机器宕机了,比如下面这台机器宕机,必然会导致 1TB 数据 01 这个数据分片的其中一个数据副本丢失。如下图所示:
【软件开发】大规模分布式系统的容错架构设计

那这个时候要紧吗?不要紧,因为 1TB 数据 01 这个数据分片,他还有另外 2 个副本在存活的两台机器上呢!所以如果有人要读取数据,完全可以从另外两台机器上随便挑一个副本来读取就可以了,数据不会丢的。

现在有一个问题,比如说有个兄弟要读取 1TB 数据 01 这个数据分片,那么他就会找 Master 节点,说:你能不能告诉我 1TB 数据 01 这个数据分片人在哪里啊?在哪台机器上啊?我需要读他啊!

那么这个时候,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。
【软件开发】大规模分布式系统的容错架构设计

那么此时,Master 节点就可以通知人家去读 1TB 数据 01 的副本 1 或者副本 2,哪个都行,因为那两个副本其实还是在的。举个例子,比如可以通知客户端去读副本 1,此时客户端就可以找那台机器上的 Slave 节点说要读取那个副本 1。

这个时候又有另外一个问题,那就是 1TB 数据 01 这个数据分片此时只有副本 1 和副本 2 这两个副本了,这就不足够 3 个副本啊。因为我们预设的是每个数据分片都得有 3 个副本的。大家想想,此时如何给这个数据分片增加 1 个副本呢?

很简单,Master 节点一旦感知到某台机器宕机,就能感知到某个数据分片的副本数量不足了。此时,就会生成一个副本复制的任务,挑选另外一台机器来从有副本的机器去复制一个副本。

比如看下面的图,可以挑选第四台机器从第二台机器去复制一个副本。
【软件开发】大规模分布式系统的容错架构设计

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

同样,我们来一张图,看看这个过程:
【软件开发】大规模分布式系统的容错架构设计
看上图,现在机器 4 上是不是又多了一个 1TB 数据 01 的副本 3 ?那么 1TB 数据 01 这个数据分片是不是又变成 3 个副本了?

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

没关系,一旦 Master 节点感知到机器 3 复活,会发现副本数量过多,此时会生成一个删除副本任务。他会在机器 3 发送心跳的时候,下发一个删除副本的指令,让机器 3 删除自己本地多余的副本就可以了。这样,就可以保持副本数量只有 3 个。

一样的,大家来看看下面的图。
【软件开发】大规模分布式系统的容错架构设计

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

所以笔者在这里强烈建议大家,一定好好吸收一下这种分布式系统、中间件系统底层数据容错架构的思想。文章来源地址https://www.toymoban.com/news/detail-445253.html

到了这里,关于【软件开发】大规模分布式系统的容错架构设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 无人机支持的空中无蜂窝大规模MIMO系统中上行链路分布式检测

    在无人机(UAV)支持的空中蜂窝自由大规模多输入多输出(mMIMO)系统中,上行链路分布式检测涉及以下几个关键概念和步骤: “无蜂窝”意味着系统不是围绕传统的蜂窝结构组织的,而是通过分散的多个基站协作提供覆盖和容量,而不是单个固定的基站。 “上行链路”(

    2024年02月22日
    浏览(50)
  • 华为云云耀云服务器L实例评测|基于华为云云耀云服务器L实例搭建EMQX大规模分布式 MQTT 消息服务器场景体验

    EMQX 是一款国内开发的大规模分布式MQTT消息服务器,它旨在为物联网应用提供高效可靠的连接,实时处理和分发消息以及事件流数据。作为一个关键的物联网基础设施组件,EMQX为企业和开发者提供了一个强大的工具,用于构建各种规模和复杂度的物联网与云应用。 EMQX的主要

    2024年02月08日
    浏览(58)
  • 【软件架构设计】支持大规模系统的设计模式和原则

    今天,即使是小型初创公司也可能不得不处理数 TB 的数据或构建支持每分钟(甚至一秒钟!)数十万个事件的服务。所谓“规模”,通常是指系统应在短时间内处理的大量请求/数据/事件。 尝试以幼稚的方式实现需要处理大规模的服务,在最坏的情况下注定要失败,或者在最

    2024年02月13日
    浏览(39)
  • 【软件开发】从单机到分布式

    问题:由于流量越来越大出现服务器性能问题。 对架构增加了一台服务器,应用和数据库分别部署到不同的服务器上,对于开发和测试没有任何影响,只需要应用服务器新增一个远程调用数据库服务器的连接,有效地缓解了应用服务器负载的压力。 问题:随着请求流量的进

    2024年02月02日
    浏览(110)
  • 谷歌内部开发AI大语言模型“鹅”;OpenAI CEO 寻求大规模AI芯片全球生产投资

    🦉 AI新闻 🚀 谷歌内部开发AI大语言模型“鹅” 摘要 :谷歌正在积极将AI技术融入其产品中,并为提升员工效率而开发了一个名为“鹅”的AI大语言模型。这一模型仅供公司内部团队使用,旨在辅助新产品的开发。据悉,“鹅”基于Google“25年的工程专业知识”训练而成,能

    2024年02月21日
    浏览(63)
  • 大规模语言模型--LLaMA 家族

    LLaMA 模型集合由 Meta AI 于 2023 年 2 月推出, 包括四种尺寸(7B 、13B 、30B 和 65B)。由于 LLaMA 的 开放性和有效性, 自从 LLaMA 一经发布, 就受到了研究界和工业界的广泛关注。LLaMA 模型在开放基准的各 种方面都取得了非常出色的表现, 已成为迄今为止最流行的开放语言模型。大

    2024年04月25日
    浏览(42)
  • LLaMA(大规模机器学习和分析)

    LLaMA(大规模机器学习和分析)是一个先进的软件平台,是Meta 推出 AI 语言模型 LLaMA,一个有着 上百亿数量级参数的大语言模型用于大规模部署和管理机器学习模型。借助LLaMA,组织可以高效地在大型数据集上训练和部署模型,缩短投放市场的时间,并提高预测模型的准确性。

    2024年02月11日
    浏览(53)
  • 基于Spark的大规模日志分析

    摘要: 本篇文章将从一个实际项目出发,分享如何使用 Spark 进行大规模日志分析,并通过代码演示加深读者的理解。 本文分享自华为云社区《【实战经验分享】基于Spark的大规模日志分析【上进小菜猪大数据系列】》,作者:上进小菜猪。 随着互联网的普及和应用范围的扩

    2024年02月09日
    浏览(54)
  • 软件测试/测试开发/全日制/测试管理丨Git分布式版本控制系统

    分布式版本控制: Git是一种分布式版本控制系统,每个开发者都可以拥有完整的代码仓库的拷贝,不依赖中央服务器。这使得团队成员可以在本地独立工作,并且不需要持续的网络连接。 代码仓库: Git用来存储代码的地方被称为仓库(Repository)。仓库可以分为本地仓库和远程

    2024年01月18日
    浏览(74)
  • etcd实现大规模服务治理应用实战

         导读 :服务治理目前越来越被企业建设所重视,特别现在云原生,微服务等各种技术被更多的企业所应用,本文内容是百度小程序团队基于大模型服务治理实战经验的一些总结,同时结合当前较火的分布式开源kv产品etcd,不仅会深入剖析ectd两大核心技术Raft与boltdb的实

    2024年02月12日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包