分布式存储概述

1. 分布式存储概念

大规模分布式存储系统的定义如下:

        “分布式存储系统是大量普通PC服务器通过Internet互联,对外作为一个整体提供存储服务。”

分布式存储系统具有如下几个特性:

  1. 可扩展。分布式存储系统可以扩展到几百台甚至几千台的集群规模,而且,随着集群规模的增长,系统整体性能表现为线性增长。
  2. 低成本。分布式存储系统的自动容错、自动负载均衡机制使其可以构建在普通PC机之上。另外,线性扩展能力也使得增加、减少机器非常方便,可以实现自动运维
  3. 高性能。无论是针对整个集群还是单台服务器,都要求分布式存储系统具备高性能。
  4. 易用。分布式存储系统需要能够提供易用的对外接口,另外,也要求具备完善的监控、运维工具,并能够方便地与其他系统集成,例如,从Hadoop云计算系统导入数据。

        分布式存储系统的挑战主要在于数据、状态信息的持久化,要求在自动迁移、自动容错、并发读写的过程中保证数据的一致性。分布式存储涉及的技术主要来自两个领域 : 分布式系统以及数据库,如下所示:

  1. 数据分布:如何将数据分布到多台服务器才能够保证数据分布均匀?数据分布到多台服务器后如何实现跨服务器读写操作?
  2. 一致性:如何将数据的多个副本复制到多台服务器,即使在异常情况下,也能够保证不同副本之间的数据一致性?
  3. 容错:如何检测到服务器故障?如何自动将出现故障的服务器上的数据和服务迁移到集群中其他服务器?
  4. 负载均衡:新增服务器和集群正常运行过程中如何实现自动负载均衡?数据迁移的过程中如何保证不影响已有服务?
  5. 事务与并发控制:如何实现分布式事务?如何实现多版本并发控制?
  6. 易用性:如何设计对外接口使得系统容易使用?如何设计监控系统并将系统的内部状态以方便的形式暴露给运维人员?
  7. 压缩/解压缩:如何根据数据的特点设计合理的压缩/解压缩算法?如何平衡压缩算法节省的存储空间和消耗的CPU计算资源?

        分布式存储系统挑战大,研发周期长,涉及的知识面广。一般来讲,工程师如果能够深入理解分布式存储系统,理解其他互联网后台架构不会再有任何困难。

2. 分布式存储分类

分布式存储面临的数据需求比较复杂,大致可以分为三类:

  1. 非结构化数据 : 包括所有格式的办公文档、文本、图片、图像、音频和视频信息等。
  2. 结构化数据 : 一般存储在关系数据库中,可以用二维关系表结构来表示。结构化数据的模式(Schema,包括属性、数据类型以及数据之间的联系)和内容是分开的,数据的模式需要预先定义
  3. 半结构化数据 : 介于非结构化数据和结构化数据之间,HTML文档就属于半结构化数据。它一般是自描述的,与结构化数据最大的区别在于,半结构化数据的模式结构和内容混在一起,没有明显的区分,也不需要预先定义数据的模式结构。

        

        不同的分布式存储系统适合处理不同类型的数据,可以将分布式存储系统分为四类分布式文件系统、分布式键值(Key-Value)系统、分布式表格系统和分布式数据库。

1.分布式文件系统

        互联网应用需要存储大量的图片、照片、视频等非结构化数据对象,这类数据以对象的形式组织,对象之间没有关联,这样的数据一般称为Blob(BinaryLarge Object,二进制大对象)数据。

        分布式文件系统用于存储Blob对象,典型的系统有FacebookHaystack以及TaobaoFile System(TFS)。另外,分布式文件系统也常作为分布式表格系统以及分布式数据库的底层存储,如谷歌的GFS(GoogleFile System,存储大文件)可以作为分布式表格系统 Google Bigtable的底层存储。

总体上看,分布式文件系统存储三种类型的数据 : Blob对象、定长块以及大文件。在系统实现层面,分布式文件系统内部按照数据块(chunk)来组织数据,每个数据块的大小大致相同,每个数据块可以包含多个Blob对象或者定长块,一个大文件也可以拆分为多个数据块,如图1-1所示。分布式文件系统将这些数据块分散到存储集群,处理数据复制、一致性、负载均衡、容错等分布式系统难题,并将用户对 Blob 对象、定长块以及大文件的操作映射为对底层数据块的操作。

2.分布式键值系统

        分布式键值系统用于存储关系简单的半结构化数据,它只提供基于主键的CRUD(Create/Read/Update/Delete)功能,即根据主键创建、读取、更新或者删除一条键值记录

        典型的系统有 Amazon Dynamo以及 Taobao Tair。从数据结构的角度看,分布式键值系统与传统的哈希表比较类似,不同的是,分布式键值系统支持将数据分布到集群中的多个存储节点。分布式键值系统是分布式表格系统的一种简化实现,一般用作缓存比如淘宝 Tair 以及 Memcache。一致性哈希分布式键值系统中常用的数据分布技术因其被 Amazon DynamoDB系统使用而变得相当有名。

        分布式键值系统是一种存储和检索键值对数据的分布式系统。它们通常用于需要高性能、可伸缩性和低延迟的应用程序。以下是分布式键值系统的一些优点、缺点和使用场景:

优点:

  1. 高性能: 分布式键值系统通常设计用于快速的数据访问。由于数据存储在内存中或者分布式存储系统中,因此可以实现高速的读写操作
  2. 可伸缩性: 分布式键值系统可以水平扩展,即通过增加更多的节点来处理更多的请求负载。这种可伸缩性使得系统能够应对持续增长的数据量和用户请求。
  3. 简单的数据模型: 键值对是一种简单的数据模型,易于理解和使用。这种简单性使得开发人员能够快速构建和维护应用程序。
  4. 灵活性: 键值对数据模型的灵活性使得它适用于多种用途,包括缓存、会话存储、配置管理等。

缺点:

  1. 一致性和可用性权衡: 一些分布式键值系统在保证一致性的同时会牺牲一定程度的可用性,而一些系统则相反。这种一致性和可用性之间的权衡需要根据应用程序的需求进行选择。
  2. 数据一致性: 在分布式环境中,确保数据的一致性是一个挑战。一些系统可能会选择牺牲一致性以获得更高的性能【Redis】,而另一些系统则可能采用一致性协议来确保数据的一致性【Zookeeper】。
  3. 维护复杂性: 分布式系统的维护和管理比单机系统更加复杂。需要考虑到节点的故障处理、负载均衡、数据分区等问题
  4. 网络延迟和故障: 分布式系统通常依赖于网络通信,在网络延迟或者故障发生时,可能会影响系统的性能和可用性。

使用场景:

分布式键值系统在许多领域都有广泛的应用,以下是一些常见的应用场景

  1. 缓存: 分布式键值系统常用作缓存存储,例如使用Redis或Memcached。它们能够快速地存储和检索数据,从而提高应用程序的性能和响应速度。
  2. 会话存储: 在分布式应用程序中,需要跨多个请求或服务之间共享会话信息。分布式键值系统可以用来存储会话数据,确保用户的会话状态在整个应用程序集群中是一致的。【ZooKeeper等】
  3. 配置管理: 将应用程序的配置信息存储在分布式键值系统中,可以实现配置的集中管理和动态更新。这样可以简化配置的部署和维护,同时保证配置的一致性。【ZooKeeper等】
  4. 元数据存储: 许多分布式系统需要存储元数据信息,例如文件系统、数据库等。分布式键值系统可以用来存储这些元数据,提供高性能和可伸缩的元数据访问服务。【ZooKeeper等】
  5. 分布式锁: 在分布式系统中,可能需要实现分布式锁以确保对共享资源的并发访问是安全的。分布式键值系统可以提供基于锁的机制,用来实现分布式锁。【ZooKeeper和Redis都可】
  6. 消息队列: 一些分布式键值系统具有队列功能,可以用作简单的消息队列。这样可以实现消息的异步传递和处理,从而解耦应用程序的不同组件。【Redis和kafka等】
  7. 分布式计算: 在分布式计算任务中,需要对中间结果进行存储和共享。分布式键值系统可以用来存储这些中间结果数据,以便后续的计算任务使用。【Hive和Spark、Flink等】

        总的来说,分布式键值系统具有高性能、可伸缩性和简单的数据模型,适用于许多分布式应用场景。它们可以帮助提高应用程序的性能、可靠性和扩展性,从而满足不同应用的需求。

3.分布式表格系统

分布式表格系统用于存储关系较为复杂的半结构化数据,与分布式键值系统相比,分布式表格系统不仅仅支持简单的CRUD操作,而且支持扫描某个主键范围。分布式表格系统以表格为单位组织数据每个表格包括很多行,通过主键标识一行,支持根据主键的 CRUD 功能以及范围查找功能。

分布式表格系统借鉴了很多关系数据库的技术,例如支持某种程度上的事务,比如单行事务,某个实体组(Entity Group,一个用户下的所有数据往往构成一个实体组)下的多行事务。典型的系统包括GoogleBigtable以及Megastore,Microsoft Azure TableStorage,Amazon DynamoDB等。与分布式数据库相比,分布式表格系统主要支持针对单张表格的操作,不支持一些特别复杂的操作,比如多表关联,多表联接,嵌套子查询;另外,在分布式表格系统中,同一个表格的多个数据行也不要求包含相同类型的列,适合半结构化数据。分布式表格系统是一种很好的权衡,这类系统可以做到超大规模而且支持较多的功能,但实现往往比较复杂,而且有一定的使用门槛。

4.分布式数据库

        分布式数据库一般是从单机关系数据库扩展而来,用于存储结构化数据。分布式数据库采用二维表格组织数据,提供SQL关系查询语言,支持多表关联,嵌套子查询等复杂操作,并提供数据库事务以及并发控制

        典型的系统包括MYSQL数据库分片(MYSQLSharding)集群,AmazonRDS以及Microsoft SQL Azure。分布式数据库支持的功能最为丰富,符合用户使用习惯,但可扩展性往往受到限制。当然,这一点并不是绝对的。GoogleSpanner系统是一个支持多数据中心的分布式数据库,它不仅支持丰富的关系数据库功能,还能扩展到多个数据中心的成千上万台机器。除此之外,阿里巴巴OceanBase系统也是一个支持自动扩展的分布式关系数据库。

        关系数据库是目前为止最为成熟的存储技术,它的功能极其丰富。然而,关系数据库在可扩展性上面临着巨大的挑战。

        传统关系数据库的事务以及二维关系模型很难高效地扩展到多个存储节点上,另外,关系数据库对于要求高并发的应用在性能上优化空间较大。

        为了解决关系数据库面临的可扩展性、高并发以及性能方面的问题,各种各样的非关系数据库喷涌而现,这类系统成为NoSQL 系统,可以理解为“Not Only SQL”系统。

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

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

相关文章

24暑假算法刷题 | Day15 | LeetCode 110. 平衡二叉树,257. 二叉树的所有路径,404. 左叶子之和,222. 完全二叉树的节点个数

目录 110. 平衡二叉树题目描述题解 257. 二叉树的所有路径题目描述题解 404. 左叶子之和题目描述题解 222. 完全二叉树的节点个数题目描述题解 110. 平衡二叉树 点此跳转题目链接 题目描述 给定一个二叉树,判断它是否是平衡二叉树 平衡二叉树 是指该树所有节点的…

Redis-布隆过滤器(Bloom Filter)详解

文章目录 什么是布隆过滤器 布隆过滤器的优点:布隆过滤器的缺点:其他问题 布隆过滤器适合的场景布隆过滤器原理 数据结构增加元素查询元素删除元素 如何使用布隆过滤器 Google开源的Guava自带布隆过滤器Redis实现布隆过滤器 Redis中配置布隆过滤器Redis…

【echarts】tooltip 增加单位

单个柱子 const data [{value: 1,per: 2},{value: 22,per: 2},{value: 222,per: 3} ];tooltip: {trigger: axis,show: true,axisPointer: {type: line,lineStyle: {color: rgba(0, 0, 0, 0.03),type: solid,width: 60,},},formatter(params) {return ${params[0].name}: ${par…

欧鹏 数据库第一次作业

第一次作业题目 1,windows中选择一种方式安装mysql 2,新建产品库(名字自拟)db_mysql_3 3,使用产品库新建三张表 如下: 表1:employees 列1:id,整型,主键 列2:name,字符串,最大长度50,不能为空 列3:age,整型 列4:gender,字符串,最大长度10,不能为空,默认值"…

数据结构历年考研真题对应知识点(树、森林)

目录 5.4.2树、森林与二叉树的转换 1.树转换为二叉树 【树和二叉树的转换及相关性质的推理(2009、2011)】 2.森林转换为二叉树 【森林和二叉树的转换及相关性质的推理(2014)】 3.二叉树转换为森林 【由遍历序列构造一棵二叉树并转换为对应的森林(2020、2021)】 5.4.3树和…

C# 各版本语法新功能汇总

C# 8.0 以后 官网 C# 7.3 》》in C# 7.2 》》 命名参数、具名参数 》》》 条件 ref 表达式 C# 7.1 》》 default 运算符 default 在C#7.1中得到了改进,不再需要default(T)了 //变量赋值C#7.0 var s "字符串"; s default(s…

LeetCode 算法:电话号码的字母组合 c++

原题链接🔗:电话号码的字母组合 难度:中等⭐️⭐️ 题目 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 …

SpringCloud教程 | 第九篇: 使用API Gateway

1、参考资料 SpringCloud基础篇-10-服务网关-Gateway_springcloud gateway-CSDN博客 2、先学习路由,参考了5.1 2.1、建了一个cloudGatewayDemo,这是用来配置网关的工程,配置如下: http://localhost:18080/aaa/name 该接口代码如…

git clone命令, 克隆远程仓库

这个应该是最简单的命令,当别人扔给你一个*****.git链接,你要知道怎么用,但是还需要注意以下几点: 1. 你在该网站上是否有账号 2. 你在该网站上的账号是否是该项目的成员,如果不是,那可能clone不了 3. 本机…

WSL-Ubuntu20.04部署环境配置

1.更换Ubuntu软件仓库镜像源 为了在WSL上使用TensorRT进行推理加速,需要安装以下环境,下面将按以下顺序分别介绍安装、验证以及删除环境: #1.C环境配置 gcc、gdb、g #2.gpu环境 cuda、cudnn #3.Cmake环境 CMake #4.OpenCV环境 OpenCV #5.Ten…

vxe-grid 实现配置式form搜索条件 form搜索条件框可折叠 配置式table

文章目录 效果图代码 效果图 代码 <template><div class"app-container"><vxe-grid refxGrid v-bind"gridOptions" v-if"tableHeight" :height"tableHeight"><template #billDate"{ data }"><e…

Zoom视频会议软件使用

Zoom是一款广受欢迎的视频会议软件&#xff0c;使用它可以轻松地进行远程会议、在线培训和团队协作等。要充分利用Zoom软件的功能&#xff0c;以下是详细具体的使用方法和步骤&#xff1a; 下载安装 下载&#xff1a;访问Zoom官方网站&#xff0c;根据使用的操作系统下载相应的…

ttkefu在线客服系统 机器人+人工客服 全渠道接入客户咨询

ttkefu在线客服系统是一种集成了机器人客服与人工客服&#xff0c;并支持全渠道接入客户咨询的综合解决方案。这种系统能够显著提升客户服务效率&#xff0c;优化客户体验&#xff0c;同时帮助企业降低运营成本 1. 智能机器人客服 自动回复&#xff1a;机器人客服能够自…

Java集合框架的内部揭秘:List、Set与Map的深潜之旅

Java集合框架是一套强大的工具&#xff0c;为开发者提供了灵活的数据管理方式。本文将深入剖析List、Set和Map的内部机制&#xff0c;通过详细的示例和扩展讨论&#xff0c;带你领略这些数据容器的真谛。 一、List&#xff1a;有序序列的深度剖析 List接口是一个可以包含重复…

自制连点器

B站使用教程&#xff1a;https://www.bilibili.com/video/BV1SR85e4EKw/?vd_source47eba1800d831e86d4778a128740fe73 下载链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1Spv_yVPFB3zoS__VL-nhaQ?pwdyxo1 提取码&#xff1a;yxo1

20.x86游戏实战-远线程注入的实现

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

Spring Boot 中,监听应用程序启动的生命周期事件的4种方法

文章目录 前言在 Spring Boot 中&#xff0c;监听应用程序启动的生命周期事件有多种方法。你可以使用以下几种方式来实现&#xff1a; 一、使用 ApplicationListener二、使用 EventListener三、实现 CommandLineRunner 或 ApplicationRunner四、使用 SmartLifecycle总结 前言 …

Spring AI 应用开发中设置访问 Ollama 的超时时间

使用 Spring AI 开发 AI 应用时&#xff0c;Ollama 通常在本地开发和测试时使用&#xff0c;用来在本地运行大模型。由于本地开发机器的资源限制&#xff0c;当使用 Ollama 运行较大的模型时&#xff0c;大模型给出响应的时间会比较长。Spring AI 提供的 OllamaChatModel 与 Ol…

在Mac上免费恢复误删除的Word文档

Microsoft Word for Mac是一个有用的文字处理应用程序&#xff0c;它与Microsoft Office套件捆绑在一起。该软件的稳定版本包括 Word 2019、2016、2011 等。 Word for Mac 与 Apple Pages 兼容;这允许在不同的操作系统版本中使用Word文档&#xff0c;而不会遇到任何麻烦。 与…

【数据结构】非线性表----树详解

树是一种非线性结构&#xff0c;它是由**n&#xff08;n>0&#xff09;**个有限结点组成一个具有层次关系的集合。具有层次关系则说明它的结构不再是线性表那样一对一&#xff0c;而是一对多的关系&#xff1b;随着层数的增加&#xff0c;每一层的元素个数也在不断变化&…