zoukankan      html  css  js  c++  java
  • 程序员的智囊库系列之3--分布式文件系统(Distributed file systems)

    程序员的智囊库系列之3--分布式文件系统(Distributed file systems)

    这是程序员的智囊库系列的第三篇文章。上一篇文章本来打算介绍几个搭建网站的框架,但由于这部分的内容较多,还需要再整理一段时间,所以先放出这部分的第三篇文章。这一部分我们讲介绍分布式存储相关的一些知识,以及当下(2013-10-29)主流的分布式文件系统。由于有些NoSQL数据库也可以用来做分布式文件系统的替代物,所以这部分我们还将介绍几个NoSQL数据库。主要讲介绍以下几种分布式文件系统和NoSQL数据库:

    背景

    之前公司一直用nfs做文件服务器,nfs的好处就是配置简单,使用方便。但缺点是当数据量很多,尤其是小文件多的时候,其性能令人堪忧,往往会成为整个系统的性能瓶颈。所以准备在将来考虑用性能更好的方法替代nfs,于是花大工夫整理调查,横向对比了各分布式文件系统。调查报告的详细结果整理在这里,本文是从中抽出几个概要部分稍作讲解,具体内容请参见调查报告原文我把分析报告原文放到了七牛上,但我感觉它最近不太稳定,如果下载不了,请与我联系,或直接在下面评论里留邮箱。

    注:本来调查报告分两部分,理论分析报告和性能测试报告。本文的目的是介绍给大家更多的知识,扩展知识面,增加知识的广度。
    而不是说直接告诉你,这个比那个好,你用这个,别用那个。
    尤其是性能测试这种东西,别人的测试结果的参考价值并不是很大,必须沉下心来,自己去一点点的测才能找到最适合自己的工具、参数。
    因此,本文只给出了理论分析报告,并没有给出性能测试报告。

    几点基础知识

    存储方案

    • DAS
    • SAN
    • NAS

    数据存储的方法

    • 块存储(block)
    • 文件存储(file)
    • 对象存储(object)

    元数据(meta data)

    元数据的概念:data about data
    数据是指普通文件中的实际数据,而元数据指用来描述一个文件的特征的系统数据,
    诸如访问权限、文件拥有者以及文件数据块的分布信息(inode...)等等。
    在集群文件系统中,分布信息包括文件在磁盘上的位置以及磁盘在集群中的位置。
    用户需要操作一个文件必须首先得到它的元数据,才能定位到文件的位置并且得到文件的内容或相关属性。
    元数据对文件系统的影响:文件系统对元数据的操作占据了传统文件系统总负荷的近一半。
    高效的元数据管理方式对提高整个系统的性能至关重要。
    A comparison of file system workloads. 2000 USENIX Annual Technical Conference

    单点依赖

    当一台服务器出现故障后,整个服务器群瘫痪。
    解决方案:
    1 TFS 利用linux 高可用性(HA)机制,配置HA元数据服务集群。但这样只能配置主设备和从设备,事实上同一时刻还是只有一个服务器在服务。这样做只能提高系统的稳定性,并不能解决采用集成式元数据服务模式的瓶颈问题(由于系统需要同步,反而会降低性能)。
    2 Ceph GPFS 分布式元数据服务模型 将负载分散到多台服务器解决了性能瓶颈问题,利用对等的服务器或冗余元数据服务分区解决了单点故障问题。分布式看似非常完善,然而它大大增加了设计实现上的复杂性,同时可能会引入了新的问题,即性能开销和数据一致性问题。

    3 GlusterFS 无元数据服务模型
    无元数据服务器设计的好处是没有单点故障和性能瓶颈问题,可提高系统扩展性、性能、可靠性和稳定性。对于海量小文件应用,这种设计能够有效解决元数据的难点问题。它的负面影响是,数据一致问题更加复杂,文件目录遍历操作效率低下,缺乏全局监控管理功能。同时也导致客户端承担了更多的职能,比如文件定位、名字空间缓存、逻辑卷视图维护等等,这些都增加了客户端的负载,占用相当的CPU和内存。

    HA高可用性

    高可用性H.A.(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性。它与被认为是不间断操作的容错技术有所不同。HA系统是目前企业防止核心计算机系统因故障停机的最有效手段。
    实现方法:

    1. heartbeat:比较常用
    2. rhcs:redhat集群套件--redhat cluster suite 图形界面,实现方便,可有100多个节点
    3. corosync/openais + paceker
      2个节点:
      采用主备模式:一台激活,另一台备份,对外呈现一个虚拟ip地址。两个节点之间采用心跳线,备份节点使用心跳线来探测活动节点是否处于活动状态。
      心跳线:双绞线 或光纤跳线或 serial线
      采用主主模式:两个节点,在提供web服务时,左侧为激活状态,右侧为备份状态;在实现mail服务时, 一个为激活状态,一个为备份状态。

    FUSE

    Filesystem in userspace
    在用户态实现的文件系统

    为什么使用FUSE:

    首先要了解用户态和内核态
    为了保证系统安全,在用户态执行的代码被硬件限制,不能进行某些操作,如修改其他程序的存储空间、修改配置文件、杀死其他进程、重启等。
    而在内核态(核心态)执行的代码,可以不加限制地对系统存储、外部设备进行操作。

    但是从用户态切换到核心态需要很大的开销。
    所以FUSE有如下优点:
    能够大幅提高效率,简化了为操作系统提供新的文件系统的工作量,特别适用于各种虚拟文件系统和网络文件系统。

    开源软件的版本(copyleft)问题

    GPL GPL2 GPL3 LGPL AGPL

    题外话

    无目录结构、扁平化存储是海量存储的未来发展方向
    一般来讲计算机内部对文件的操作和查找不是按目录进行定位的
    目录结构完全是为了方便用户浏览。
    因而,一些不会与用户直接打交道的数据,完全可以不用目录结构存储。设计新产品的时候可以采用扁平化设计。

    参考资料

    关于存储,分布式存储,分布式文件系统的更多信息,可以参见以下几本资料:

    1. 刘爱贵整理的《分布式文件系统》。分布式文件系统的大体认识。
    2. 张冬写的《大话存储》和《大话存储2》。这个系列的书讲得非常通俗易懂,而且很详细,例子也很生动,我认为可以作为国内的权威了。
    3. 《海量存储》

    分布式文件系统的评价标准

    部署

    • 部署复杂程度
    • 服务器配置要求
    • 文件系统接口
    • 是否支持FUSE
    • 是否需要配套的客户端
    • 是否支持目录结构
    • 可拓展性

    性能

    • 小文件支持
    • 大文件支持
    • 文件大小对性能的影响
    • 平均传输速率

    数据安全

    • 单点依赖
    • 冗余保护
    • 故障恢复

    实际应用

    • 适用产品级别
    • 是否成熟
    • 实际应用
    • 版本号

    维护

    • 是否开源
    • license
    • 社区活跃程度
    • 文档语言
    • 开发语言
    • 文档完善程度

    其他

    • 数据迁移成本
    • 存储机制
    • 元数据存储方式
    • 其他特点

    如何才能选择最好的分布式文件系统呢?没有最好的分布式文件系统,只有最适合你的实际情况的。不是说最近ceph很火,ceph就一定适合你,一定要在认真分析你的实际情况后,通过理论参数做出初步筛选,然后通过性能测试来做最后的筛选,切不可鲁莽选择。
    详细的理论比对请参见理论分析报告的原文

    时间:2014-11-16
    作者:FingerLiu

    如果您对我介绍的知识感兴趣,欢迎收藏和推荐!谢谢您的支持!

  • 相关阅读:
    AspNetCore网关集成Swagger访问使用IdentityServer保护的webapi项目
    在CentOS部署AspNetCore网站
    使用Docker发布Asp.Net Core程序到Linux
    Window环境下使用多个Git账号(github,gitee,gitlab,gogs等)
    在.netcore webapi项目中使用后台任务工具Hangfire
    WebApi 全局异常与局部异常
    eclipse中jsp页面Invalid location of tag 解决办法分析小结
    win7 64位机ODBC的数据源DSN添加和移除问题
    jsp页面has already been called for this response错误解决方法。
    解决java图形界面label中文乱码
  • 原文地址:https://www.cnblogs.com/s0-0s/p/4101457.html
Copyright © 2011-2022 走看看