4.网站高性能架构
4.4 存储性能优化
1. 机械硬盘 vs. 固态硬盘
机械硬盘:在数据连续访问和随机访问上,性能差别大。
固态硬盘:数据存储在可持久记忆的硅晶体上,可像内存一样快速随机访问。
2. B+树 vs. LSM树
改善数据访问特性,文件系统或数据库通常会先对数据排序后存储,加快检索速度,传统关系数据库做法是使用B+树。
B+树:N叉排序树,以树节点为单位存储在磁盘上,从根开始查找数据所在节点,加载到内存后继续查找,直到找到。采用两级索引的树层次最多3层,可能需要5次磁盘访问才能更新一条记录。
由于随机的磁盘访问,传统机械硬盘在这上面性能较差,影响访问性能。
LSM树:N阶合并树,数据写操作(增删改)都在内存中进行,并都会创建一个新纪录,以排序树保存在内存中。当数量超过设定的内存阈值后,和磁盘上的最新排序树合并。当这颗排序树的量超过阈值后,和下一级的排序树合并。
读操作时,总是先从内存中查找,没有找到,再去磁盘上排序树顺序查找。
3. RAID vs. HDFS
RAID: 独立冗余磁盘阵列,主要是为了改善磁盘的访问延迟,增强磁盘可用性和容错能力。
常用RAID技术有:
RAID0:数据同时并发写入n块磁盘,速度快,数据可靠性低(其中一块磁盘损坏,数据完整性就被破坏)。
RAID1:数据同时写入两块磁盘,速度慢,数据可靠性很高。
RAID10:将磁盘分成两份,数据同时并发写入两份磁盘,速度中等,数据可靠性很高,但磁盘利用率较低。
RAID5:数据并发写入n块磁盘,并螺旋式在所有磁盘中写入校验数据,磁盘损坏,利用校验数据恢复,速度较快,可靠性较高。
RAID6:数据只写入n-2块磁盘,校验数据螺旋式写入两块磁盘。速度较快,可靠性较RAID5高。
HDFS:Hadoop分布式文件系统,系统在整个存储集群的多台服务器上进行数据读写和备份。HDFS以块(Block)为单位,当应用程序写完一个Block,HDFS自动复制到另外两台机器上。
当对文件进行处理时,通过MapReduce并发计算任务框架,同时读取文件的多个Block,并发处理,相当于实现RAID0的并发访问功能。
HDFS有两种重要角色,NameNode和DataNode,NameNode提供元数据服务,管理Block分配,维护目录结构,只部署一个实例。DataNode部署在集群中的其他服务器上,提供真正的数据服务。