分布式技术之分布式数据存储系统

文章目录

    • 什么是分布式数据存储系统?
    • 分布式数据存储系统三要素
      • 顾客:生产和消费数据
      • 导购:确定数据位置
      • 货架:存储数据

CAP 理论指出,在分布式系统中,不能同时满足一致性、可用性和分区容错性,指导了分布式数据存储系统的设计。随着数据量和访问量的增加,单机性能已经不能满足用户需求,分布式集群存储成为一种常用方式。把数据分布在多台存储节点上,可以为大规模应用提供大容量、高性能、高可用、高扩展的存储服务。而分布式存储系统就是其具体实现。

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

  • 分布式存储系统的核心逻辑,就是将用户需要存储的数据根据某种规则存储到不同的机器上,当用户想要获取指定数据时,再按照规则到存储数据的机器里获取。
  • 如下图所示,当用户(即应用程序)想要访问数据 D,分布式操作引擎通过一些映射方式,比如 Hash、一致性 Hash、数据范围分类等,将用户引导至数据 D 所属的存储节点获取数据。
    在这里插入图片描述
  • 获取数据的整个过程与商店购物的过程是不是有些类似呢?顾客到商店购物时,导购会根据顾客想要购买的商品引导顾客到相应的货架,然后顾客从这个货架上获取要购买的商品,完成购物。这里的顾客就是图中的应用程序导购就相当于分布式操作引擎,它会按照一定的规则找到相应的货架,货架就是存储数据的不同机器节点。其实,这个过程就是分布式存储系统中获取数据的通用流程,顾客、导购和货架组成了分布式存储系统的三要素,分别对应着分布式领域中的数据生产者 / 消费者、数据索引和数据存储

在这里插入图片描述

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

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

顾客:生产和消费数据

  • 顾客相当于分布式存储系统中的应用程序,而数据是应用程序的原动力。根据数据的产生和使用,顾客分为生产者和消费者两种类型。生产者负责给存储系统添加数据,而消费者则可以使用系统中存储的数据。
  • 生产者和消费者生产和消费的数据通常是多种多样的,不同应用场景中数据的类型、格式等都不一样。根据数据的特征,这些不同的数据通常被划分为三类:结构化数据、半结构化数据和非结构化数据
    • 结构化数据通常是指关系模型数据,其特征是数据关联较大、格式固定。火车票信息比如起点站、终点站、车次、票价等,就是一种结构化数据。结构化数据具有格式固定的特征,因此一般采用分布式关系数据库进行存储和查询。
    • 半结构化数据通常是指非关系模型的,有基本固定结构模式的数据,其特征是数据之间关系比较简单。比如 HTML 文档,使用标签书写内容。半结构化数据大多可以采用键值对形式来表示,比如 HTML 文档可以将标签设置为 key,标签对应的内容可以设置为 value,因此一般采用分布式键值系统进行存储和使用。
    • 非结构化数据是指没有固定模式的数据,其特征是数据之间关联不大。比如文本数据就是一种非结构化数据。这种数据可以存储到文档中,通过 ElasticSearch(一个分布式全文搜索引擎)等进行检索。

导购:确定数据位置

  • 导购是分布式存储系统必不可少的要素,如果没有导购, 顾客就需要逐个货架去寻找自己想要的商品。想象一下,如果你去订票网站订火车票,按照自己的需求点击查询车票后,系统会逐个扫描分布式存储系统中每台机器的数据,寻找你想要购买的火车票。如果系统中存储的数据不多,响应时间也不会太长,毕竟计算机的速度还是很快的;但如果数据分布在几千台甚至上万台机器中,系统逐个机器扫描后再给你响应,我相信你会对这个订票网站很失望。这种定位数据存储位置的方式会浪费很多时间,严重影响购票体验。因此,在分布式存储系统中,必须有相应的数据导购,否则系统响应会很慢,效率很低。为解决这个问题,数据分片技术就走入了分布式存储系统的大家庭。
  • 数据分片技术,是指分布式存储系统按照一定的规则将数据存储到相对应的存储节点中,或者到相对应的存储节点中获取想要的数据,这是一种很常用的导购技术。这种技术,一方面可以降低单个存储节点的存储和访问压力;另一方面,可以通过规定好的规则快速找到数据所在的存储节点,从而大大降低搜索延迟,提高用户体验。
  • 也就是说,当铁路局发布各个线路的火车票信息时,会按照一定规则存储到相应的机器中,比如北京到上海的火车票存储到机器 A 中,西安到重庆的火车票存储到机器 B 中。当乘客查询火车票时,系统就可以根据查询条件迅速定位到相对应的存储机器,然后将数据返回给用户,响应时间就大大缩短了。如图所示,当查询北京 - 上海的火车票相关信息时,可以与机器 A 进行数据交互。这个例子中按照数据起点、终点的方式划分数据,将数据分为几部分存储到不同的机器节点中,就是数据分片技术的一种。当查询数据时,系统可以根据查询条件迅速找到对应的存储节点,从而实现快速响应。
  • 针对数据范围的数据分片方案是指,按照某种规则划分数据范围,然后将在这个范围内的数据归属到一个集合中。这就好比数学中通常讲的整数区间,比如 1~1000 的整数,[1,100] 的整数属于一个子集、[101,1000] 的整数属于另一个子集。

数据复制和数据分片技术的区别
在这里插入图片描述

  • 数据 A 被拆分为两部分存储在两个节点 Node1 和 Node2 上,属于数据分片;而对数据 B 来说,同一份完整的数据在两个节点中均有存储,就属于数据复制。
  • 在实际的分布式存储系统中,数据分片和数据复制通常是共存的:
    • 数据通过分片方式存储到不同的节点上,以减少单节点的性能瓶颈问题;
    • 而数据的存储通常用主备方式保证可靠性,也就是对每个节点上存储的分片数据,采用主备方式存储,以保证数据的可靠性。其中,主备节点上数据的一致,是通过数据复制技术实现的。

Kafka 集群消息存储架构图

  • 消息数据以 Partition(分区)进行存储,一个 Topic(主题)可以由多个 Partition 进行存储,Partition 可以分布到多个 Broker 中;同时,Kafka 还提供了 Partition 副本机制(对分区存储的信息进行备份,比如 Broker 1 中的 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 等,具体对比分析如下所示。

在这里插入图片描述

你知道的越多,你不知道的越多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/309900.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows系统下如何运行.sh脚本文件

前言: .sh文件是一种命令脚本文件,在Windows系统下可以通过命令行工具打开运行。通常可以使用Git工具来打开运行.sh脚本文件。不过很多第一次使用Git的人,可能对Git工具不熟悉。.sh文件在命令行运行时是有固定写法的,下面介绍详细…

HDMI2.1输入转4Port MIPI/LVDS输出,嵌入式SPI闪存固件存储,VR和AR应用首选国产芯片方案-LT6911GXC

描述 LT6911GXC是一款高性能的HDMI2.1到MIPI或LVDS芯片,用于VR/显示应用。 HDCP RX作为HDCP中继器的上游,可配合其他芯片的HDCPTX实现中继器功能。 对于HDMI2.1输入,LT6911GXC可以配置为3/4通道。自适应均衡使其适合于长电缆应用,…

基于OpenAI的Whisper构建的高效语音识别模型:faster-whisper

1 faster-whisper介绍 faster-whisper是基于OpenAI的Whisper模型的高效实现,它利用CTranslate2,一个专为Transformer模型设计的快速推理引擎。这种实现不仅提高了语音识别的速度,还优化了内存使用效率。faster-whisper的核心优势在于其能够在…

9个格子3个点的不同分布占比

直线上有9个格子,有3个点,可能有10种分布方式 数量 编号 7 0 1 1 1 0 0 0 0 0 0 6 2 1 0 1 1 0 0 0 0 0 6 1 1 1 0 1 0 0 0 0 0 5 6 1 0 0 1 1 0 0 0 0 5 3 1 1 0 0 1 0 0 0 0 5 4 1 0 1 …

车企大佬们这“七宗罪”,正在拖『软件定义汽车』的后腿!

交流群 | 进“传感器群/滑板底盘群/汽车基础软件群/域控制器群”请扫描文末二维码,添加九章小助手,务必备注交流群名称 真实姓名 公司 职位(不备注无法通过好友验证) “在车企的决策链上级别越高的领导,越不理解软件…

黑马程序员SSM框架-SpringMVC

课程链接:SpringMVC-01-SpringMVC简介_哔哩哔哩_bilibili SpringMVC简介 表现层框架 概述 入门案例 入门案例工作流程 SpringMVC对应的bean加载和Spring对应的bean加载 我们发现SpringMVC要加载controller的bean对象,Spring容器要加载除了controller类…

阿里开源大模型 Qwen-72B 私有化部署

近期大家都知道阿里推出了自己的开源的大模型千问72B,据说对于中文非常友好,在开源模型里面,可谓是名列前茅。 千问拥有有强大的基础语言模型,已经针对多达 3 万亿个 token 的多语言数据进行了稳定的预训练,覆盖领域、…

理解ByteBuffer

Buffer 的使用 我们通过 Java 中 NIO 包中实现的 Buffer 来给大家讲解,Buffer 总共有 7 种实现,就包含了 Java 中实现的所有数据类型。 本篇文章中,我们使用的是 ByteBuffer,其常用的方法都有: putgetfliprewindmark…

递归详解之青蛙跳台阶和汉诺塔问题

𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - :来于“云”的“羽球人”。…

<PDF-Pics> support

If get any questions,email me caohechunhotmail.com

SpringBoot 日志打印

一. 自定义打印日志 开发者自定义打印日志实现步骤: • 在程序中得到日志对象 • 使用日志对象的相关语法输出要打印的内容. 得到日志对象: //日志工厂需要将需要打印的类的类型传递进去,这样我们才知道日志的归属类,才能更方便的定位到文体类 private static Logger logger …

个人财务管理软件Money Pro mac功能特点

Money Pro mac是一款专为Mac用户设计的个人财务管理软件,具有全面的账户管理、智能的预算规划、强大的投资分析、丰富的报表和图表、安全的数据保护以及易于使用的界面设计等特点。 Money Pro mac功能和特点 全面的账户管理:支持多种账户类型&#xff0…