什么是分布式数据存储系统?

分布式存储系统的核心逻辑,就是将用户需要存储的数据根据某种规则存储到不同的机器上,当用户想要获取指定数据时,再按照规则到存储数据的机器里获取

如下图所示,当用户(即应用程序)想要访问数据 D,分布式操作引擎通过一些映射方式,比如 Hash、一致性 Hash、数据范围分类等,将用户引导至数据 D 所属的存储节点获取数据。

上面的这个获取数据的整个过程与到商店购物的过程是不是有些类似呢?

顾客到商店购物时,导购会根据顾客想要购买的商品引导顾客到相应的货架,然后顾客从这个货架上获取要购买的商品,完成购物。这里的顾客就是图中的应用程序,导购就相当于分布式操作引擎,它会按照一定的规则找到相应的货架,货架就是存储数据的不同机器节点。

其实,这个过程就是分布式存储系统中获取数据的通用流程,顾客、导购和货架组成了分布式存储系统的三要素,分别对应着分布式领域中的数据生产者 / 消费者数据索引数据存储

接下来,我们就详细看看这三个要素吧。

分布式数据存储系统三要素

顾客就是数据的生产者和消费者,也就是说顾客代表两类角色,生产者会生产数据(比如,商店购物例子中的供货商就属于生产类顾客),将数据存储到分布式数据存储系统中,消费者是从分布式数据存储系统中获取数据进行消费(比如,商店购物例子中购买商品的用户就属于消费类顾客);导购就是数据索引,将访问数据的请求转发到数据所在的存储节点;货架就是存储设备,用于存储数据。

顾客:生产和消费数据

顾客相当于分布式存储系统中的应用程序,而数据是应用程序的原动力根据数据的产生和使用,顾客分为生产者和消费者两种类型。生产者负责给存储系统添加数据,而消费者则可以使用系统中存储的数据。就像是火车票存储系统,如图所示,铁路局就相当于生产者类型的顾客,而乘客就相当于消费者类型的顾客。铁路局将各个线路的火车票信息发布到订票网站的后台数据库中,乘客通过订票网站访问数据库,来进行查询余票、订票、退票等操作。

生产和消费的数据通常是多种多样的,不同应用场景中数据的类型、格式等都不一样。根据数据的特征,这些不同的数据通常被划分为三类:结构化数据、半结构化数据和非结构化数据。

  • 结构化数据通常是指关系模型数据其特征是数据关联较大、格式固定。火车票信息比如起点站、终点站、车次、票价等,就是一种结构化数据。结构化数据具有格式固定的特征,因此一般采用分布式关系数据库进行存储和查询。
  • 半结构化数据通常是指非关系模型的有基本固定结构模式的数据,其特征是数据之间关系比较简单。比如HTML 文档,使用标签书写内容。半结构化数据大多可以采用键值对形式来表示,比如 HTML 文档可以将标签设置为key,标签对应的内容可以设置为value,因此一般采用分布式键值系统进行存储和使用。
  • 非结构化数据是指没有固定模式的数据,其特征是数据之间关联不大。比如文本数据就是一种非结构化数据。这种数据可以存储到文档中,通过ElasticSearch(一个分布式全文搜索引擎)等进行检索。

导购:确定数据位置

导购是分布式存储系统必不可少的要素,如果没有导购, 顾客就需要逐个货架去寻找自己想要的商品。想象一下,如果你去订票网站订火车票,按照自己的需求点击查询车票后,系统会逐个扫描分布式存储系统中每台机器的数据,寻找你想要购买的火车票。如果系统中存储的数据不多,响应时间也不会太长,毕竟计算机的速度还是很快的;但如果数据分布在几千台甚至上万台机器中,系统逐个机器扫描后再给你响应,我相信你会对这个订票网站很失望。这种定位数据存储位置的方式会浪费你很多时间,严重影响购票体验。

因此,在分布式存储系统中,必须有相应的数据导购,否则系统响应会很慢,效率很低。为解决这个问题,数据分片技术就走入了分布式存储系统的大家庭数据分片技术,是指分布式存储系统按照一定的规则将数据存储到相对应的存储节点中,或者到相对应的存储节点中获取想要的数据,这是一种很常用的导购技术:

  • 一方面可以降低单个存储节点的存储和访问压力;
  • 另一方面,可以通过规定好的规则快速找到数据所在的存储节点,从而大大降低搜索延迟,提高用户体验。

也就是说,当铁路局发布各个线路的火车票信息时,会按照一定规则存储到相应的机器中,比如北京到上海的火车票存储到机器 A 中,西安到重庆的火车票存储到机器 B 中。当乘客查询火车票时,系统就可以根据查询条件迅速定位到相对应的存储机器,然后将数据返回给用户,响应时间就大大缩短了。如图所示,当查询北京 - 上海的火车票相关信息时,可以与机器 A 进行数据交互。

这个例子中按照数据起点、终点的方式划分数据,将数据分为几部分存储到不同的机器节点中,就是数据分片技术的一种。当查询数据时,系统可以根据查询条件迅速找到对应的存储节点,从而实现快速响应。

上述的例子中,按照数据特征进行了数据分片,当然,还有其他很多数据分片的方案。比如,按照数据范围,采用哈希映射、一致性哈希环等对数据划分。

数据范围数据分片方案介绍

**针对数据范围的数据分片方案是指,按照某种规则划分数据范围,然后将在这个范围内的数据归属到一个集合中。**这就好比数学中通常讲的整数区间,比如 1~1000 的整数,[1,100]的整数属于一个子集、[101,1000]的整数属于另一个子集。

对于前面讲的火车票的案例,按照数据范围分片的话,可以将属于某条线的所有火车票数据划分到一个子集或分区进行存储,比如机器 A 存储京广线的火车票数据,机器 B 存储京沪线的火车票数据。也就是说,数据范围的方案是按照范围或区间进行存储或查询。

如图所示,当用户查询北京 - 上海的火车票相关信息时,首先判断查询条件属于哪个范围,由于北京 - 上海的火车线路属于京沪线,因此系统按照规则将查询请求转到存取京沪线火车票数据的机器 B,然后由机器 B 进行处理并给用户返回响应结果。

为了提高分布式系统的可用性与可靠性,除了通过数据分片减少单个节点的压力外,数据复制也是一个非常重要的方法。**数据复制就是将数据进行备份,以使得多个节点存储该数据。**想象一下,当某个存储节点出现故障时,如果只采用数据分片技术,那这个节点的数据就会丢失,从而给用户造成损失。因此,数据复制在分布式存储系统中是不可或缺的。

数据 A 被拆分为两部分存储在两个节点 Node1 和 Node2 上,属于数据分片;而对数据 B 来说,同一份完整的数据在两个节点中均有存储,就属于数据复制。

在实际的分布式存储系统中,数据分片和数据复制通常是共存的:

  • 数据通过分片方式存储到不同的节点上,以减少单节点的性能瓶颈问题;
  • 而数据的存储通常用主备方式保证可靠性,也就是对每个节点上存储的分片数据,采用主备方式存储,以保证数据的可靠性。其中,主备节点上数据的一致,是通过数据复制技术实现的。

回忆下Kafka 集群的总体架构,下图是Kafka 集群消息存储架构图,这就是数据分片和数据复制共存的一个典型应用场景。如下所示:

  • 消息数据以 Partition(分区)进行存储,一个 Topic(主题)可以由多个 Partition 进行存储,Partition可以分布到多个 Broker 中;
  • 同时,Kafka 还提供了 Partition 副本机制(对分区存储的信息进行备份,比如 Broker1 中的 Topic-1 Partion-0 是对 Broker 0 上的 Topic-1 Partition-0进行的备份),从而保证了消息存储的可靠性。

货架:存储数据

货架是用来存储数据的,因为数据是由顾客产生和消费的,因此货架存储的数据类型与顾客产生和消费的数据类型是一致的,即包括结构化数据、半结构化数据和非结构化数据。针对这三种不同的数据类型,存储“货架”可以大致划分为以下三种:

  • 分布式数据库,通过表格来存储结构化数据,方便查找。常用的分布式数据库有 MySQL Sharding、Microsoft SQL Azure、Google Spanner、Alibaba OceanBase 等。
  • 分布式键值系统,通过键值对来存储半结构化数据。常用的分布式键值系统有 Redis、Memcache 等,可用作缓存系统。
  • **分布式存储系统,通过文件、块、对象等来存储非结构化数据。**常见的分布式存储系统有 Ceph、GFS、HDFS、Swift 等。

而对货架材料也就是存储介质的选择,本质就是选择将数据存储在磁盘还是内存(缓存)上:

  • 磁盘存储量大,但 IO 开销大,访问速度较低,常用于存储不经常使用的数据。比如,电商系统中,排名比较靠后或购买量比较少、甚至无人购买的商品信息,通常就存储在磁盘上。
  • 内存容量小,访问速度快,因此常用于存储需要经常访问的数据。比如,电商系统中,购买量比较多或排名比较靠前的商品信息,通常就存储在内存中。

主流分布式数据存储系统

首先,我们看一下主流的分布式数据库,主要包括 MySQL Sharding、SQL Azure、Spanner、OceanBase 等,具体对比分析如下表所示。

然后,我们看一下主流的分布式存储系统,主要包括 Ceph、GFS、HDFS 和 Swift 等,具体对比分析如下所示。

总结

分布式数据存储系统之三要素相关推荐

  1. 分布式数据存储系统:CAP理论

    分布式数据存储系统:CAP理论 前言 什么是 CAP? CAP 选择策略及应用 保 CA 弃 P 保 CP 弃 A 保 AP 弃 C 对比分析 知识扩展:CAP 和 ACID 的"C&quo ...

  2. 软文写作技巧之三要素

    软文推广写作的目的是为了获得更多的曝光度和流量,让我们的工作变得更加的轻松.同时,软文的写作看似难度很大,其实都是从一些细致的地方着手,只要把基础的东西做好用心写用心听取大众的心声就会写出有内涵质量佳 ...

  3. 分布式数据存储原理简介

    什么是分布式数据存储系统 分布式存储系统的核心逻辑,就是将用户需要存储的数据根据某种规则存储到不同的机器上,当用户想要获取指定数据时,再按照规则到存储数据的机器里获取. 如下图所示,当用户(即应用程序 ...

  4. 挺进中端存储系统,SAS走上夺权路

    早在2006年初宣称"进入中端存储系统才是SAS真正走向主流的标志"之前,我便开始等待这一时刻的到来,直到HDS在本月中旬的SNW上发布了业内首个采用SAS技术的中端存储系统--H ...

  5. Understanding HBase and BigTable 译文

    有时间翻译一下这篇文章.http://jimbojw.com/#understan... Google BigTable论文可下载:https://ai.google/research/pu... 在 ...

  6. 单机最大负载_分布式高可靠之负载均衡,今天看了你肯定会

    到目前为止,我已经为你介绍了分布式起源.分布式协调与同步.分布式资源管理与负载调度.分布式计算技术.分布式通信技术和分布式数据存储. 可以说,掌握了这些内容,基本上就掌握了分布式的关键技术.然而,只有 ...

  7. 《企业大数据系统构建实战:技术、架构、实施与应用》——2.2 大数据职位构建体系...

    本节书摘来自华章计算机<企业大数据系统构建实战:技术.架构.实施与应用>一书中的第2章,第2.2节,作者 吕兆星 郑传峰 宋天龙 杨晓鹏,更多章节内容可以访问云栖社区"华章计算机 ...

  8. 从致敬KAWS系列盲盒大火,看“NFT+盲盒”玩法的想象空间

    文|螳螂观察 作者| 胡静婕 一副作品的价格若想翻至数千倍,需要多长时间? 在艺术界,或许需要几十,甚至是上百年.然而,在NFT艺术盲盒领域仅仅只需要一分钟. 9月15日下午两点,致敬KAWS系列盲盒 ...

  9. PayPal高级工程总监:读完这100篇论文 就能成大数据高手

    PayPal高级工程总监:读完这100篇论文 就能成大数据高手 阅读目录 关键架构层(Key architecture layers) 架构的演进(Architecture Evolution) 文件 ...

最新文章

  1. android 绘图之Canvas,Paint类
  2. 腾讯面试题Java 并发包之线程池综述
  3. 浅谈a标签属性href的mailto更多用法
  4. leetcode-110:判断平衡二叉树 Java
  5. 事件处理-注册时间 // 事件处理-修饰符 // 事件处理-键盘事件的修饰符 // 事件处理-系统修饰符 // 事件处理-鼠标修饰符
  6. 1.4 Padding
  7. 【华为编程大赛】洞穴逃生
  8. mvn package 报Failed to execute goal
  9. 在libvirt中使用SanLock
  10. 代码自动生成:Github Copilot
  11. 圆通快递单号yt开头_圆通快递单号yt开头怎么查不到 点查询即可如果是圆通快递可以...
  12. python与plc通讯实例_python连接plc 相关实例(示例源码)下载 - 好例子网
  13. 【龙格库塔优化算法】基于龙格库塔优化算法求解单目标优化问题含Matlab源码
  14. html比赛项目,趣味运动会项目
  15. 中国雅虎邮箱一键迁移到网易邮箱教程
  16. Alist+RaiDrive 给电脑整个80亿GB硬盘
  17. 测试工程师, 入职以后如何开展工作?
  18. 如何注册公司邮箱?公司邮箱邮件这样写98%的人都爱看
  19. 在中国有什么办法可以开通摩根大通银行?
  20. COMP 3023代写、代写COMP 3023、代做 C++ - Assignment、 代编码C++ - Assignment

热门文章

  1. Splash界面使用动画
  2. 经验分享 | Arcgis模型构建器实现批处理
  3. 视频教程-Python数据分析与挖掘-Python
  4. android 自定义弹性的ListView
  5. MT6795详细芯片资料下载  MT6795规格说明简介
  6. 厦门移动推出适老化服务,快商通声纹助力老年人不再成为“数字遗民”
  7. matlab怎么提取倍频,Matlab信号处理倍频程.docx
  8. 中国象棋软件-引擎实现(四)搜索算法
  9. Pandas,让Python像R一样处理数据,但快
  10. FOC: Park变换电角度误差带来的影响