最近接触分布式系统开发,从头开始熟悉分布式文件系统开发,整理了下相关资料(我是互联网搬运工,资料都是网上大神的精华萃取,如有侵权联系我删除),适合刚开始入门了解阶段。

1. 概述

1. 存储系统

存储系统是指电子设备把二进制数据进行可持久化保存的一套设备。存储系统由软件和硬件组成,典型的如CD、硬盘,SSD等设备。尽管存储系统的实现的原理不尽相同,但他们的作用都是一样,就是持久化保存和读取二进制数据,而不感知二进制数据内容。有价值的不是这些高低电平的数据,而是这些数据所表示的内容和意义。好比一篇填满文字的文章,如果人们无法通过其文字内容,了解这边文章表达的意思,那么这个文章就是无用的。

目前根据存储内容,可将存储系统可分为:块存储,对象存储,文件存储。

块存储,是基于磁盘块设备发展过来的概念。就是提供一块一定容量的块读写设备,典型是一个磁盘,或者一个磁盘某个分区。对于该块内容,对使用者而言只是提供二进制数据,对数据内容不做任何识别,相当于一个未格式化的硬盘。一般用户使用块设备,会进行格式化处理,可以按照私有方案的格式化,也可以采用主流的文件系统格式(xFS, NTFS等等)。分布式存储系统,其块设备设计主要用于给用户系统提供外挂的系统盘,或者超大容量数据盘等。

对象存储,是对块存储内容进一步感知,但又不像文件系统那样有层次的组织结构,目的是给应用程序使用,直接采用key-value方式组织数据放到块设备里,达到快速定位数据的效果。该存储技术出现主要是互联网应用需要快速存储和访问大量特定格式的数据,如图片,视频等。通过键值设计的对象存储系统,能满足应用程序快速索引的要求,提高互联应用访问速度和用户体验。

文件存储,就是按照B树形结构方式组织数据,能组织更加复杂的数据保存,但访问效率没有对象存储那么直接。更多的是为了符合人类直观的操作模型。

1.2.1 文件系统

由于存储系统只负责保存和读取二进制数据,但二进制数据所表示内容和意义才是存储数据的真正价值。为了实现用户或者应用程序能有效地直观的感知存储的数据,人们按照人类可理解的思维,按照树的结构组织解析二进制数据,从而产生文件系统概念。

文件系统本质上是给操作系统应用提供读写存储设备的接口,是操作系统用于明确存储设备或分区上的文件的方法和数据结构,即在存储设备上组织文件的方法。

文件系统为操作系统提供一套高效读写所需数据的统一方法,并且能提供软件级的数据容错和读写优化策略。

文件系统由三部分组成:文件系统的接口,对对象操纵和管理的软件集合,对象及属性。从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。

1.2.2本地文件系统

文件系统早期是本地操作系统管理本地存储设备的一种,因为限于传输技术发展,系统对数据读写都是基于本地IO读取,存储设备都是通过短距离的本地I/O方式与操作系统交互(如串口,SCIS,USB等),多个存储设备通过本地高速总线,或者RAID等技术连接到一起提供给操作系统使用。操作系统一般可直接接口调用方式(如POXIS定义的open,read、wirte等操作)。

2. 网络文件系统

网络文件系统,是适应于基于网络接入方式的存储设备数据读写的一种文件系统,本质上就是把传统文件系统对存储设备的读写接口,从本地驱动设备直接读取改成更上层的TCP/IP方式读取,使得操作存储设备不限于本地存储,可以直接操作基于网络连接的存储设备。

1.3.1 网络文件系统协议

由于网络文件系统,需要利用TCP/IP技术远程读取分布式的存储设备数据,则需要有对应的协议来规范远程操作的方法。只要满足遵循该方法的用户系统和存储系统,就能像本地访问文件的方式来访问远程存储设备数据。

1.3.2 典型网络文件系统协议

目前主流的接入协议主要有Linux阵营和window阵营,其中Linux是一NFS协议为代表,而window产品则以cifs/SMB协议为典型代表。不过随着技术发展,基本可以通用了。

CIFS/SMB协议

详见《CIFS技术白皮书》

NFS协议

详见《NFS技术白皮书》

pNFS

下面介绍图中三个协议:

pNFS protocol:在服务器和客户端之间传递元数据(更正式的叫法为“布局”)。包括:文件写入位置、文件属性等。

storage access protocol:指定客户机访问数据仓库的方式。

control protocol:同步元数据服务器和数据服务器之间的状态。同步是对客户机隐藏的,比如重新组织介质上的文件。此外,NFSv4.1 并没有规定控制协议;因此它有多种形式,这在性能、成本和特性方面的竞争为供应商提供了灵活性。

1.2.3 网络文件系统开源项目

3. 分布式文件系统

随着传输技术发展,操作系统读写数据的方式,不止限于本地I/O技术,也同时支持远距离的TCP/IP方式获取数据。就是相当于新增一种可以远距离传输的I/O技术,使得分散的存储设备和用户操作系统可以通过网络方式接入联合在一起,形成更大容量,更易于拓展伸缩的存储系统,对此人们引入分布式文件系统的概念,本质上跟传统的文件系统没本质的差别。只是网络连接的可靠性复杂性等因素,相对于本地总线而言,分布式接入的存储设备,需要应用层做更多复杂的策略来配合达到相同的效果。

2. 架构

1. 概述

分布式文件系统架构主要面向的集群系统所采用的一套策略方案。主要考虑的有读写性能,数据容灾备份,避免单点故障,以及数据备份,数据容错恢复等。

2. 主流架构

3. 原生客户端

分布式文件系统客户端,是指针对分布式文件系统,需要有配套的接入端来实现用户能访问分布式文件系统,目前主流做法是两个,一个是原生客户端(Native client),另一个是协议网关代理服务。

原生客户端,设计配套的客户端接入(类似自定义一套私有的接入协议),如图2-1。分布式文件系统,需要提高可靠性和容错能力,设计基本采用集群方案,不是传统的C/S模型,而是多客户端对多服务端(Multi-C/Multi-S, 简称MC/MS)模型,类似DNS负载均衡。该模型需要在用户客户端能实现负载均衡,寻址定位等功能,因此必须使用与存储集群相配套的原生客户端(Native client)接入才能满足分布式系统设计要求。

2-1 原生客户端

协议网关代理服务,目的是为了兼容传统的网络文件系统协议(如NFS/FTP/CIFS),如图2-2;分布式文件系统基本都需要兼容传统网络文件系统协议,但传统网络文件系统协议(CIFS/NFS)针对的是点对点的C/S架构设计的协议,无法像分布式文件系统客户端那样,实现高性能高可靠的接入(pNF会引入并行访问能力,类似分布式文件系统架构,但不同分布式文件系统项目的后端架构都不相同,还无法做到直接对接该功能)。因此都需要采用网关代理模式,在代理服务器里集成分布式文件系统的原生客户端,间接访问存储集群。

4. 主流产品分析

Ceph

1、提供统一接口协议(ceph storage Cluster Protocol,librados),块存储、对象存储、文件系统的客户端接入都基于该协议设计对用的服务网关,或者文件系统。

2、不支持直接NFS/CIFS协议接入,而是可以通过客户端文件系统挂载的方式实现NFS/CIFS访问。

GlusterFS

1、采用用户态的文件系统方式原生客户端。

2、集成有NFS代理服务(Gluster NFS server),可以直接通过NFS客户端连接到NFS代理服务,无需额外NFS组件支持。

3、Gluster client提供用户态的存储访问接口,可以直接兼容开源NFS-Gnaesha。

Lustre

1、提供支持POSIX兼容的客户端,支持文件系统直接挂载;

2、支持NFS/CIFS通过文件系统方式间接访问;

QF2

1、资料上说明支持NFS/SMB,实际如何实现未从资料里看出,猜测也是基于代理的模式。

OceanStore

1、从资料上看仅支持NFS/CIFS通过文件系统方式间接单个存储节点;

2、支持利用DNS访问方式,实现NFS/CIFS接入负载均衡。

3、NFS增强功能,必须在客户机集成原生客户端实现。本质上也是利用客户机做网关代理;

TFS

HDFS

3. 关键技术

当前分布式文件系统比较热点的关键技术总结了有几下几点,后续单独对这个进行展开讨论。

1、 纠删码技术

2、 一致性协议

3、 数据定位技术

4、 日志技术

5、 RDMA

4. 总结

第一,开发分布式文件系统,可以优先支持客户端文件系统。从开源分布式文件系统角度看,基本都支持客户端文件系统访问,可以采用FUSE实现如图4-1,也可以直接写一个文件系统组件如图4-2。用户可以通过文件系统挂载的方式,直接将分布式存储盘直接挂载到客户机上,实现本地文件访问。

4-1 FUSE实现本地文件系统

4-2 直接内核支持新文件系统

第二,利用客户端文件系统,可以直接使用Linux系统集成的Samba/NFS服务作为网关代理,间接实现客户机通过NFS/CIFS访问。

第三,独立网关代理。当前除了pNFS协议外,其它网络文件系统协议都是点对点的访问模式,无法利用分布式文件系统无中心,分布式,负载均衡等特性,建议通过独立网关代理服务器方式,为用户提供接入服务。

第四,pNFS协议支持。pNFS协议是专门为分布式文件系统设计,其实现原理是基于元数据服务器模式,可以根据分布式文件系统架构,从开发阶段就考虑支持pNFS协议。

从开发效率角度上看,开发流程按照如下模块进行,整体会相对科学合理。

OSD-> MDS -> 原生客户端->本地文件系统-> NFS/SAMBA挂载测试->NFS-GANESHA开源适配->samba开源适配

大容量nc文件解析_分布式文件系统浅谈相关推荐

  1. php允许上传的文件后羿_后羿SEO:浅谈seo外链建设需要注意的几个问题!

    每个seor都清楚的认识到外链无论是对于一个站的权重还是站点的关键词排名方面都起着决定性的作用,但是很多时候也是常常因为外链的问题经常导致K站,降低权重活是百度的十一位现象,俗话说:物极必反.在我们做 ...

  2. hdfs数据节点分发什么协议_分布式文件系统HDFS解析

    Hadoop 主要由HDFS和MapReduce 引擎两部分组成.最底部是HDFS,它存储Hadoop 集群中所有存储节点上的文件.HDFS 的上一层是MapReduce 引擎,该引擎由JobTrac ...

  3. 在hdfs文件系统中创建目录连接失败_分布式文件系统HDFS

    运行在大量廉价商用机器上:硬件错误是常态,提供容错机制简单一致性模型:一次写入多次读取,支持追加,不允许修改,保证数据一致性流式数据访问:批量读而非随机读,关注吞吐量而非时间存储大规模数据集:典型文件 ...

  4. dfs根目录_分布式文件系统DFS详细解读

    使用分布式文件系统DFS可以轻松定位和管理网络中的共享资源.使用统一的命名路径完成对所需资源院的访问.提供可靠的负载平衡.与FRS(文件复制服务)联合在多台服务器之间提供冗余.与windows权限集成 ...

  5. 文件解析_招标准备与文件解析

    ↑ 点击上方"智天策"关注我们 自7月18日起,每周六晚19:00-21:30,天策未来倾情打造的<军工领域投标培训课>如约开讲.前期已学习了第一讲<招投标基础和 ...

  6. lin通信ldf文件解析_基于LIN协议的代码自动生成系统及方法_2014108531085_说明书_专利查询_专利网_钻瓜专利网...

    技术领域 本发明属于汽车电子LIN网络通讯领域,公开了一种利用LDF文件自动生成LIN通讯软件代码的方法. 背景技术 目前汽车电子产品的软件开发逐渐向模块化.标准化.集成化.自动化发展.LIN通讯模块 ...

  7. python打开文件夹中的tiff_浅谈python下tiff图像的读取和保存方法

    对比测试 scipy.misc和 PIL.Image和 libtiff.TIFF三个库 输入: 1. (读取矩阵) 读入uint8.uint16.float32的lena.tif 2. (生成矩阵) ...

  8. c语言 去掉双引号_技术分享|浅谈C语言陷阱和缺陷

    良好的软件架构.清晰的代码结构.掌握硬件.深入理解C语言是防错的要点,人的思维和经验积累对软件可靠性有很大影响.C语言诡异且有种种陷阱和缺陷,需要程序员多年历练才能达到较为完善的地步.软件的质量是由程 ...

  9. 服务器不知别内存_程序优化浅谈服务器实现高并发的原理

    我们每天刷手机都会接收到各种各样的信息,看到这篇文章时,不知大家有没有思考过,这些信息是如何组织,然后通过服务器发送给我们的呢? 其实也很简单,不就是一条一条请求嘛,服务器根据不同的请求分别去不同的数 ...

最新文章

  1. Java实现 String类型的ip与整数之间的相互转换(2021.8.1百度提前批面试题)
  2. 独家 | 在R中使用LIME解释机器学习模型
  3. 借evdev之力 Linux全局热键魔改造
  4. 【position也可以很复杂】当弹出层遇上了鼠标定位(上)
  5. 【Python】选取二维列表的第一列
  6. 小师妹学IO系列文章集合-附PDF下载
  7. 要求做一个从网页上导入excel
  8. 不等距双杆模型_搜索中的深度匹配模型(下)
  9. 【SQL 学习】表连接--natural join 的一个bug
  10. 用微软makecert.exe生成一个自签名的证书
  11. mysql双机热备份windows_window下使用mysql双机热备份
  12. 图像处理——分水岭算法
  13. 写的非常不错的一篇阻塞与非阻塞、同步与异步套接字之间的区别
  14. 增广拉格朗日乘子法(Augmented Lagrange Method)
  15. Three.js PBR渲染入门教程
  16. 打造淘宝爆款的思路和补单技巧整理
  17. 中职网络安全竞赛C模块MS17-010批量扫描
  18. 傅里叶变换对称性质MATLAB,利用共轭对称和反对称性质做离散傅里叶变换求相关性问题...
  19. ftp服务器适用网站,使用 WFTPD 搭建 FTP 服务器
  20. 跟Steve Jobs学简报[4-5](恋花蝶整理版)

热门文章

  1. 黑龙江省计算机应用能力考试,2020黑龙江省一级计算机基础及MS Office应用考试在线自测试题库(不限设备,登陆即可做题)...
  2. android pod 组件化_Flutter组件化导入至iOS现有工程中(CocoaPods篇)
  3. repo同步代码_一次协作多端同步,打通看云、github互相同步(serverless实践)
  4. 自定义Flume Sink:ElasticSearch Sink
  5. Python __init__.py 作用详解
  6. 我为什么做程序猿訪谈录
  7. Java编程中“为了性能”尽量要做的26点
  8. Linux新手笔记 源 安装chromium
  9. slab中记录空闲对象
  10. PHP应用memcache函数详解