【分布式理论】(二)分布式存储

分布式存储

先有分布式还是先有大数据呢?这是个值得思考的问题。因为大数据所以才会数据分布式存储,因为单机无法存储,所以需要分布式存储嘛。但是,另一方面,我们的数据产生天然就是分布式的,只不过我们一般的思路是集中存储,便于管理。

分布式存储的一般思路,就是将大数据切片,按照某种策略存储在多个节点之间,这种策略要确保数据的分布是均匀的,以保证节点负载的均匀;同时数据的分布也要有一定的稳定性,不能因为节点的变动产生较大规模的数据迁移现象。同时数据分散后要具备可靠性,采用冗余机制,保证数据不会异常丢失。最后,数据的分布式存储,需要保证数据获取的方便性,以及拆开之后还能聚合起来。

总之,分布式存储需要解决的问题:数据分布的稳定性,数据节点的异构性,数据的可用性和可靠性。

  • 数据分布的稳定性:当节点故障时,不会存在大规模的数据迁移,这意味着我们需要良好的数据分布算法。
  • 数据节点的异构性:数据节点性能不一,我们的数据分布算法应该考虑数据分布节点的偏向;
  • 数据的可用性和可靠性:意味着我们数据的存储应该具备一定的容错能力,比如副本机制、持久化机制。

1,数据分区机制

数据分布的稳定,依赖于我们的数据分区策略,几种常见的数据分区算法:

  • 基于范围的分区:比如按照年龄范围,地区范围;
  • 基于列表的分区:比如按照国家、省市分区;
  • 基于循环的分区:比如 mod 一个循环值;
  • 基于散列的分区:最常见最常用的分区,比如 hash;
  • 基于组合的分区:上述方式的组合。

基于散列的分区,是大型分布式系统中最为常见的分区策略,所以这里我们主要讨论该算法的几种实现形式:

1,普通哈希,比如按照数据的某一字段进行哈希,然后分区;但存在着节点变动,数据大范围迁移的 rehash 现象;

2,一致性哈希,即按照顺时针顺序将数据存储到 hash 环中,当节点变动时,只需迁移相邻节点的数据即可。有个细节就是,一致性 hash 做数据查询时需要在节点内维护一个索引表,以定位节点内部数据的实际存储位置。但是这种方式,会导致部分节点承担较多的数据存储任务,节点的数据负载较高。

3,带有限负载的一致性 hash,即每个节点有固定的存储上限,当达到上限时会继续顺时针遍历下一个节点,存储数据;但是这种方式也没有考虑到节点异构带来的存储性能差异;

4,带虚拟头节点的一致性 hash,虚拟节点时按照节点性能差异分配的虚拟节点,也即节点性能好的,虚拟节点数量就会更多,数据就会尽可能地存储在该节点内。性能较为稳定。

image-20220617214959569

2,数据复制机制

分布式场景下,如何实现数据复制的一致性?下面来看看几种数据复制策略:

同步复制:客户端在向主节点写入消息,然后主节点再向其它从节点同步完成,才会向客户端返回操作成功消息。这样的机制保证了数据的强一致性,但如果从节点较多,同步复制的时延较长,势必会影响可用性。在某些金融场合,交易场合适用。比如我们的 mysql 的主备集群方案,包括我们的 kafka 集群的副本的 ack 机制都是采用了类似的思想。

异步复制:客户端在向主节点写入消息,主节点立马返回操作成功的信息,然后再将数据异步复制到其他从节点。可以看到,这种机制保证了可用性,但牺牲了一致性,会出现客户端在主节点和从节点查询数据不一致的情况。该方案适用于对数据要求不高的情况,我们的 mysql 主备模式默认就是采用此方案。还有我们的 redis 集群,也是采用了这种方案保证了高性能。

半同步复制:即平衡了上面两种方式,兼顾了一致性和可用性。半同步复制包括两种,一种是收到一个从节点的响应即认为同步成功,一种是半数从节点响应后即认为成功。此种方案涉及到同步后数据不一致问题,即我们的数据同步因该以哪个节点为准的问题。一种思路是,以 leader 节点的数据为准,根据索引记录匹配,将从节点数据开始不一致的位置之后的数据,强行同步与 leader 一致。

我们的 mysql 集群方案,可以通过配置支持三种复制方式。

image-20220618160654985

参考链接:

极客时间《分布式原理与算法解析》

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《大规模分布式存储系统:原理解析与架构实战》是分布式系统领域的经典著作,由阿里巴巴高级技术专家“阿里日照”(OceanBase核心开发人员)撰写,阳振坤、章文嵩、杨卫华、汪源、余锋(褚霸)、赖春波等来自阿里、新浪、网易和百度的资深技术专家联袂推荐。理论方面,不仅讲解了大规模分布式存储系统的核心技术和基本原理,而且对谷歌、亚马逊、微软和阿里巴巴等国际型大互联网公司的大规模分布式存储系统进行了分析;实战方面,首先通过对阿里巴巴的分布式数据库OceanBase的实现细节的深入剖析完整地展示了大规模分布式存储系统的架构与设计过程,然后讲解了大规模分布式存储技术在云计算和大数据领域的实践与应用。, 《大规模分布式存储系统:原理解析与架构实战》内容分为四个部分:基础篇——分布式存储系统的基础知识,包含单机存储系统的知识,如数据模型、事务与并发控制、故障恢复、存储引擎、压缩/解压缩等;分布式系统的数据分布、复制、一致性、容错、可扩展性等。范型篇——介绍谷歌、亚马逊、微软、阿里巴巴等著名互联网公司的大规模分布式存储系统架构,涉及分布式文件系统、分布式键值系统、分布式表格系统以及分布式数据库技术等。实践篇——以阿里巴巴的分布式数据库OceanBase为例,详细介绍分布式数据库内部实现,以及实践过程中的经验。专题篇——介绍分布式系统的主要应用:云存储和大数据,这些是近年来的热门领域,本书介绍了云存储平台、技术与安全,以及大数据的概念、流式计算、实时分析等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值