读数据工程之道:设计和构建健壮的数据系统18数据存储系统(上)

1. 单机存储和分布式存储

1.1. 存储系统是存在于原材料之上的抽象层次

1.2. 磁盘是一种原始存储材料,而主要的云对象存储平台和HDFS是利用磁盘的存储系统

1.3. 随着数据存储和访问模式变得越来越复杂,并超出了单一服务器能做到的支持,将数据分布到一个以上的服务器上变得很有必要

1.4. 数据可以被存储在多个服务器上,被称为分布式存储

  • 1.4.1. 一个分布式系统,其目的是以分布的方式存储数据

1.5. 分布式存储协调多个服务器的活动,以更快的速度和更大的规模存储、检索和处理数据,同时在一个服务器不可用的情况下提供冗余备份

2. 最终一致性和强一致性

2.1. 在分布式数据库中,往往存在着获取当前数据和获取“差不多“是当前数据的平衡

2.2. BASE

  • 2.2.1. 基本可用(Basically Available)

  • 2.2.1.1. 不保证一致性

  • 2.2.1.2. 数据库的读写是在尽力而为的基础上进行的

  • 2.2.1.3. 意味着大多数时候都是一致的数据

  • 2.2.2. 软状态(Soft-state)

  • 2.2.2.1. 事务的状态是模糊的

  • 2.2.2.2. 不确定该事务是已提交还是未提交的

  • 2.2.3. 最终一致性(Eventual consistency)

  • 2.2.3.1. 在某些时候,读取数据会返回一致的值

  • 2.2.4. BASE是最终一致性的基础

2.3. 如果你想横向扩展(跨越多个节点)来处理大量的数据,那么最终一致性往往是你要付出的代价

  • 2.3.1. 最终一致性允许你快速检索数据,而不需要验证你在所有节点上是否有最新的版本

2.4. 有了强一致性,分布式数据库就能确保写到任何节点的数据都是首先共同分发的,而且对数据库的任何读取都能返回一致的值

  • 2.4.1. 当你可以容忍更高的查询延迟,并要求每次从数据库读取正确的数据时,你会使用强一致性

2.5. 决定一致性的选择

  • 2.5.1. 数据库技术本身为某种程度的一致性奠定了基础

  • 2.5.2. 数据库的配置参数会对一致性产生影响

  • 2.5.3. 数据库通常在单个查询层面支持一些一致性配置

  • 2.5.3.1. DynamoDB支持最终一致性读取和强一致性读取

>  2.5.3.1.1. 强一致性读取速度较慢,消耗的资源较多,所以最好少用,但在需要一致性的时候可以使用
  • 2.5.4. 既是一个技术问题,也是一个组织问题

3. 文件存储

3.1. 一个文件是一个具有特定的读、写和引用特性的数据实体,由软件和操作系统使用

  • 3.1.1. 对象存储的行为很像文件存储,但有关键的区别

  • 3.1.1.1. 对象存储中的对象只支持第一个特性,即有限长度,但仍然非常有用

  • 3.1.2. 文件存储系统将文件组织成一个目录树

  • 3.1.3. 文件系统将每个目录作为其包含的文件和目录的元数据来存储

  • 3.1.4. 元数据包括每个实体的名称、相关的权限细节和一个指向实际实体的指针

  • 3.1.5. 为了在磁盘上找到一个文件,操作系统会查看每个层次的元数据,并跟踪指向下一个子目录实体的指针,直到最后到达文件本身

3.2. 特征

  • 3.2.1. 有限长度

  • 3.2.1.1. 一个文件是一个有限长度的字节流

  • 3.2.2. 追加操作

  • 3.2.2.1. 在主机存储系统的限制范围内向文件追加字节

  • 3.2.3. 随机访问

  • 3.2.3.1. 可以从文件中的任何位置读取,或向任何位置写入更新

3.3. 当文件存储范式对数据管道来说非常重要时,要小心处理其状态,尽量使用短暂的环境

  • 3.3.1. 尽量将手动的、低级别的文件处理保留给一次性的获取步骤或管道开发的探索阶段

3.4. 本地磁盘存储

  • 3.4.1. 操作系统管理的文件系统,底层是固态硬盘或磁盘的本地磁盘分区

  • 3.4.2. 新技术文件系统(New Technology File System,NTFS)和ext4分别是Windows和Linux上流行的文件系统

  • 3.4.3. 文件系统的设计是为了在写入过程中发生断电时容易恢复,否则任何未写入的数据都会丢失

  • 3.4.4. 本地文件系统通常支持完全的写后读取一致

  • 3.4.4.1. 写后立即读取将返回所写数据

  • 3.4.4.2. 操作系统还采用各种锁定策略来管理对一个文件的并发写入尝试

3.5. 网络附属存储

  • 3.5.1. 网络附属存储(Network-Attached Storage,NAS)系统通过网络为客户提供一个文件存储系统

  • 3.5.2. NAS是一种普遍的服务器解决方案,它们通常带有内置的专用NAS接口硬件

  • 3.5.3. 存储虚拟化也有很大的优势,包括冗余备份、可靠性、对资源的精细控制、为大型虚拟卷在多个磁盘上建立存储池,以及在多台机器上共享文件

  • 3.5.4. 替代方案是存储区域网络(Storage Area Network,SAN),但SAN系统提供块级访问,而没有文件系统的抽象

3.6. 云文件系统服务

  • 3.6.1. 云文件系统服务提供一个完全托管的文件系统,用于多个云虚拟机和应用程序,可能包括云环境之外的客户端

  • 3.6.2. 云文件系统不应该与连接到虚拟机的标准存储(一般来说,是由虚拟机操作系统管理的带有文件系统的块存储)相混淆

  • 3.6.3. 云文件系统的行为很像NAS解决方案,但网络、管理磁盘集群、故障和配置的细节完全由云供应商处理

  • 3.6.4. 亚马逊弹性文件系统(Elastic File System,EFS)

  • 3.6.4.1. 存储是通过NFS 4协议公开的,NAS系统也使用这种协议

  • 3.6.4.2. EFS提供自动扩展和按存储量付费的定价,不需要高级存储预订

4. 块存储

4.1. 从根本上说,块存储是由固态硬盘和磁盘提供的原始存储类型

4.2. 在云中,虚拟化的块存储是虚拟机的标准

  • 4.2.1. 块存储的抽象允许对存储的大小、可扩展性和数据的持久性进行精细的控制,这超过了原始磁盘所提供的

  • 4.2.2. 块存储仍然是云虚拟机上操作系统启动磁盘的默认选项

4.3. 一个块是磁盘支持的最小的可寻址数据单位

  • 4.3.1. 在旧的磁盘上,这通常是512字节的可用数据,但目前大多数的磁盘已经增长到4096字节,使得写入的精细程度降低,但大大减少了管理块的开销

  • 4.3.2. 块通常还包含用于错误检测/纠正和其他元数据的额外存储位

4.4. 固态硬盘上的块之间可能会出现寻道时间,但这与磁盘轨道的寻道时间相比,是微不足道的

4.5. 块存储应用程序

  • 4.5.1. 事务数据库系统通常在块级访问磁盘,以布局数据获得最佳性能

  • 4.5.2. 对于面向行的数据库来说,这最初意味着数据行是作为连续的数据流写入的

  • 4.5.3. 块设备的格式化与直接在物理磁盘上的格式化很相似,但存储通常是虚拟化的

4.6. RAID

  • 4.6.1. RAID是独立磁盘冗余阵列

  • 4.6.2. RAID同时控制多个磁盘,以提高数据的耐久性、增强性能,并结合多个驱动器的容量

  • 4.6.3. 一个阵列在操作系统中可以显示为一个单一的块设备

4.7. 存储区域网络

  • 4.7.1. 存储区域网络系统通过网络提供虚拟化的块存储设备,通常来自一个存储池

  • 4.7.2. SAN的抽象可以允许细粒度的存储扩展,并提高性能、可用性和耐久性

4.8. 云虚拟化块存储

  • 4.8.1. 云虚拟化块存储解决方案与SAN类似,但云使工程师无须处理SAN集群和网络细节

  • 4.8.2. 亚马逊弹性块存储(Elastic Block Store,EBS)

  • 4.8.2.1. EBS的性能指标是以IOPS和吞吐量(传输速度)给出的

  • 4.8.2.2. 性能较高的EBS存储层由固态硬盘支持,而由磁盘支持的存储层提供较低的IOPS,但每GB的成本较低

4.9. 本地实例卷

  • 4.9.1. 云提供商还提供了物理连接到运行虚拟机的主机服务器上的块存储卷

  • 4.9.2. 存储卷的成本通常很低(例如亚马逊EC2实例存储,其费用包含在虚拟机的价格中)并提供低延迟和高IOPS

  • 4.9.3. 实例存储卷的行为本质上就像一个物理连接到数据中心的服务器上的磁盘

  • 4.9.3.1. 一个关键的区别是,当一个虚拟机关闭或被删除时,本地连接的磁盘的内容就会丢失,无论这个事件是否由用户有意的行为引起

  • 4.9.3.2. 新的虚拟机不能读取属于不同客户的磁盘内容

  • 4.9.4. 本地连接的磁盘不支持EBS等虚拟化存储服务所提供的高级虚拟化功能

  • 4.9.4.1. 本地连接的磁盘没有被复制,所以即使主机虚拟机继续运行,物理磁盘故障也会丢失或损坏数据

posted @ 2024-10-24 06:52  躺柒  阅读(28)  评论(0编辑  收藏  举报