Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

ARID磁盘阵列

Q : 单机存储系统怎么做到高性能/高性价比/高可靠性

A : R(edundant) A(array) I(nexpensive) D(isks)

ARID的使用背景

  • 单块大容量磁盘的价格 > 多块小容量磁盘
  • 单块磁盘的写入性能 < 多块磁盘的并发写入功能
  • 单块磁盘的容错能力有限,不够安全

常见ARID方案

  • RAID 0
    • 多块磁盘简单组合
    • 数据条带化存储,提高磁盘带宽
    • 没有额外的容错设计
      例如一条1G的数据1被拆成两条512M数据,分别写道磁盘1和磁盘2上,然后磁盘1和磁盘2的第一个512M共同组成数据1
  • RAID 1
    • 一块磁盘对应着一块额外的磁盘
    • 真实空间利用率仅50%
    • 容错能力强
      RAID 1和RAID 0是两个极端,把一条数据copy一份放在两个磁盘上
  • RAID 0 + 1
    • 结合了 RAID 0 和 RAID 1
    • 真实空间利用率只有50%
    • 容错能力强,写入宽带好
      例如说,现在有四块磁盘,可以把它两两组成一个 RAID 0,然后再把组成的单元用 RAID 1 组成起来或者组成 RAID 1,然后再用 RAID 0 组成起来,虽然空间利用率还是只有50%,但是还用上了 RAID 1 的条带化写入,并发存储,写入带宽能翻几倍。

数据库

关系 = 集合 = 任意元素组成的若干有序偶对反应了事物间的关系

关系代数 = 对关系作运算的抽象查询语言(交、并、笛卡尔积……)

SQL = 一种DSL(领域特定语言)

单机数据库

单机数据库 = 单个计算机节点上的数据库系统

事物在单机内执行,也可能通过网络交互实现分布式事物

关系型数据库

关系型数据库是存储系统,但是在存储之外,有发展出其他功能

  • 结构化数据友好
  • 支持事务(ACID(原子性,一致性、隔离性,持久性))
  • 支持复杂查询语言

非关系型数据库

非关系型数据库也是存储系统,但是一般不要求严格的结构化

关系型数据库一般直接使用 SQL 交互,而非关系型数据库交互方式各不相同

非关系型数据库的数据结构千奇吧百怪,没有关系约束后,schema相对灵活

单机存储系统

单机存储系统 = 单个计算机节点上的存储软件系统,一般不涉及网络交互

本地文件系统

Linux经典哲学:一切皆文件

  • 文件系统管理单元:文件
  • 文件系统接口:如Ext2/3/4,sysfs,rootfs等,但都遵循VFS的统一抽象接口
  • Liunx文件系统的两大数据结构:Index Node & Directory Entry

Key-value存储

  • 常见使用方式:put(k, v) & get(k)
  • 常见数据结构:LSM-Tree,某种程度上牺牲读性能,追求写性能

分布式存储系统

分布式存储系统 = 在单机存储基础上实现了分布式协议,涉及大量网络交互

可以解决容量、弹性、性价比问题:

单机数据库通过本地文件系统提供的文件接口,在底层的存储介质读/写文件,这有个很明显的问题,就是存储是有限的,所以我们现在普遍使用的是池化的技术,把存储能力做成了一个存储池,存储池由物理或者虚拟机组成,存储池与数据库是用网络进行交互,这样,数据库就不需要看本身的存储能力够不够,只要存储池在达到预值后自动添加存储节点,把数据的写入分配到新加入的存储节点即可

解决弹性问题

HDFS

堪称大数据时代的基石

核心特点:

  • 支持海量数据存储
  • 高容错性
  • 弱POSIX语义
  • 使用普通x86服务器,性价比高

Ceph

开源分布式存储系统里的==万金油

核心特点:

  • 一套系统支持对象接口、块接口、文件接口,但是一切皆对象
  • 数据写入采用主备复制模型
  • 数据分布模型采用CURSH算法

评论