访问手机版  

招聘|合作 登陆|注册

网络工程师培训

当前位置:网络工程师 > 技术课程 > 存储 > 热点关注 > 存储新闻

存储的相关原理,你了解多少?

时间:2018-05-11 10:39:29


      其实我觉得存储相关的基本概念、知识,包括但不限于以下几点:

  1. 块设备:block、chunk、partition等概念,操作系统如何管理块设备、如何与物理世界的实体对应起来,比如硬盘、U盘等。

  2. 文件系统:文件系统如何组织保存文件,inode、superblock、posix接口、Sparse文件等知识,一些常见的文件系统,比如Ext4、XFS、Btrfs等。注意文件系统存储和块存储的区别。

  3.传统企业级存储,RAID技术、NAS、NFS、CIFS等。

  4.Linux设备、文件相关操作,比如mount、lsblk、lsof、lspci、fdisk等。

  5. IO性能测试,IO性能的常用指标,比如IOPS、IO延迟等,使用fio进行性能测试。

  6. 校验、纠删码。

  7. Cache、Buffer。

  8. iSCSI、FC、SRP、SATA。

  分布式:

  1. 分块思想。分布式的基本思想就是分而治之,几乎所有的分布式存储系统都会对一个文件切成一个一个的块(block)。

  2. 数据分布算法。分布式存储系统需要把所有分割的块对象存储到不同的机器中,这些块应该如何分布使得既能保证数据均匀,又能使节点增加或者减少时尽量减少数据迁移,即数据分布算法,比如crush算法、一致性hash算法等。以前遇到一个面试题大概意思是说有N个文件需要保存到M台机器中,存储策略是什么?最简单的算法就是对文件求hash取模,这样既能保证数据均衡分布,又能高效索引(再去求hash取模就找到了文件存储位置),万一我增加个存储节点该怎么办呢?

  3. 冗余副本。一个文件被分割成了若干块后被分布在不同的机器上,万一网络故障或者某台机器挂了,文件就访问不了了,为了保证可用性和可靠性,通常都是通过冗余副本来实现,即一个块会复制成多个相同的块副本(通常3副本),并分布在不同的机器上,这样即使某个块所在的机器访问不了了,也能通过其它块读取。这些副本同样需要考虑如何分布的问题,尽量不要在同一个故障域中。

  4. 纠删码。采用以上副本的方式保护数据,缺点是需要占用多倍的存储空间来提供冗余,成本太高,你也可以考虑使用纠删码的数据保护方法,能够使用较少的冗余存储空间提供一样的可靠性等级,当然读写性能要下降些,典型时间换空间的例子。

  5. 数据同步和一致性。每个块都被分割成了多个副本,这些副本如何保证一致性,读写效率和一致性之间如何权衡,了解CAP理论和NWR策略,各种一致性模型,比如最终一致性、强一致性等。

  6.数据索引。一个文件被分割成块并分布在不同的机器,如何重新找到这些块组装成原来的文件。你可以用一个专门的服务来维护和存储文件和块之间的映射关系(HDFS namenode),也可以通过计算的方法找到这些映射关系(Ceph crushmap)。

  7.其它。比如网络通信、RPC、序列化等。

  8.块存储、文件系统存储、对象存储区别,一些主流的分布式存储系统:

  块存储:Ceph RBD、EBS、Openstack Cinder等。

  分布式文件系统存储:HDFS、CephFS、GFS、Alluxio(内存分布式系统)等。

  对象存储:Openstack Swift、Ceph RGW、S3、百度云等。

  以上是云存储相关的基本原理,掌握以上知识就能够对云存储有个大致的感性认识了。不过要想更深入地理解分布式存储,必然离不开亲自动手,建议手动部署分布式存储系统并使用之,实践出真知,阅读开源分布式存储系统源码,跟踪IO路径等。