程序员的智囊库系列之3--分布式文件系统(Distributed file systems)
程序员的智囊库系列之3--分布式文件系统(Distributed file systems)
这是程序员的智囊库系列的第三篇文章。上一篇文章本来打算介绍几个搭建网站的框架,但由于这部分的内容较多,还需要再整理一段时间,所以先放出这部分的第三篇文章。这一部分我们讲介绍分布式存储相关的一些知识,以及当下(2013-10-29)主流的分布式文件系统。由于有些NoSQL数据库也可以用来做分布式文件系统的替代物,所以这部分我们还将介绍几个NoSQL数据库。主要讲介绍以下几种分布式文件系统和NoSQL数据库:
- nfs
- ceph
- TFS
- GlusterFS
- MooseFS
- PVFS2
- GPFS
- HDFS
- FastDFS
- MogileFS
- Lustre
- GoogleFS
- memcached
- Tokyo Tyrant
- Redis
- MongoDB
背景
之前公司一直用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系统是目前企业防止核心计算机系统因故障停机的最有效手段。
实现方法:
- heartbeat:比较常用
- rhcs:redhat集群套件--redhat cluster suite 图形界面,实现方便,可有100多个节点
- corosync/openais + paceker
2个节点:
采用主备模式:一台激活,另一台备份,对外呈现一个虚拟ip地址。两个节点之间采用心跳线,备份节点使用心跳线来探测活动节点是否处于活动状态。
心跳线:双绞线 或光纤跳线或 serial线
采用主主模式:两个节点,在提供web服务时,左侧为激活状态,右侧为备份状态;在实现mail服务时, 一个为激活状态,一个为备份状态。
FUSE
Filesystem in userspace
在用户态实现的文件系统
为什么使用FUSE:
首先要了解用户态和内核态
为了保证系统安全,在用户态执行的代码被硬件限制,不能进行某些操作,如修改其他程序的存储空间、修改配置文件、杀死其他进程、重启等。
而在内核态(核心态)执行的代码,可以不加限制地对系统存储、外部设备进行操作。
但是从用户态切换到核心态需要很大的开销。
所以FUSE有如下优点:
能够大幅提高效率,简化了为操作系统提供新的文件系统的工作量,特别适用于各种虚拟文件系统和网络文件系统。
开源软件的版本(copyleft)问题
GPL GPL2 GPL3 LGPL AGPL
题外话
无目录结构、扁平化存储是海量存储的未来发展方向
一般来讲计算机内部对文件的操作和查找不是按目录进行定位的
目录结构完全是为了方便用户浏览。
因而,一些不会与用户直接打交道的数据,完全可以不用目录结构存储。设计新产品的时候可以采用扁平化设计。
参考资料
关于存储,分布式存储,分布式文件系统的更多信息,可以参见以下几本资料:
分布式文件系统的评价标准
部署
- 部署复杂程度
- 服务器配置要求
- 文件系统接口
- 是否支持FUSE
- 是否需要配套的客户端
- 是否支持目录结构
- 可拓展性
性能
- 小文件支持
- 大文件支持
- 文件大小对性能的影响
- 平均传输速率
数据安全
- 单点依赖
- 冗余保护
- 故障恢复
实际应用
- 适用产品级别
- 是否成熟
- 实际应用
- 版本号
维护
- 是否开源
- license
- 社区活跃程度
- 文档语言
- 开发语言
- 文档完善程度
其他
- 数据迁移成本
- 存储机制
- 元数据存储方式
- 其他特点
如何才能选择最好的分布式文件系统呢?没有最好的分布式文件系统,只有最适合你的实际情况的。不是说最近ceph很火,ceph就一定适合你,一定要在认真分析你的实际情况后,通过理论参数做出初步筛选,然后通过性能测试来做最后的筛选,切不可鲁莽选择。
详细的理论比对请参见理论分析报告的原文!
时间:2014-11-16
作者:FingerLiu
如果您对我介绍的知识感兴趣,欢迎收藏和推荐!谢谢您的支持!
-------------------------------
程序员的智囊库系列之3--分布式文件系统(Distributed file systems)的更多相关文章
- 程序员的智囊库系列之2----网站框架(framework)
程序员的智囊库系列之2--网站框架(framework) 这是程序员的智囊库系列的第二篇文章.上一篇文章讲了服务器与运维相关的工具,这篇文章我们将介绍几个搭建网站的框架: django express ...
- Web程序员开发App系列 - 开发我的第一个App,源码下载
Web程序员开发App系列 Web程序员开发App系列 - 认识HBuilder Web程序员开发App系列 - 申请苹果开发者账号 Web程序员开发App系列 - 调试Android和iOS手机代码 ...
- Web程序员开发App系列 - 调试Android和IOS手机代码(补图)
Web程序员开发App系列 Web程序员开发App系列 - 认识HBuilder Web程序员开发App系列 - 申请苹果开发者账号 Web程序员开发App系列 - 调试Android和iOS手机代码 ...
- Web程序员开发App系列 - 申请苹果开发者账号
Web程序员开发App系列 Web程序员开发App系列 - 认识HBuilder Web程序员开发App系列 - 申请苹果开发者账号 Web程序员开发App系列 - 调试Android和iOS手机代码 ...
- Web程序员开发App系列 - 认识HBuilder
Web程序员开发App系列 Web程序员开发App系列 - 认识HBuilder Web程序员开发App系列 - 申请苹果开发者账号 Web程序员开发App系列 - 调试Android和iOS手机代码 ...
- KASS分布式文件系统(Kass File System)
KASS分布式文件系统(Kass File System),简称KFS,是开始公司自主研发的分布式文件存储服务平台.KFS系统架构及功能服务类似Hadoop/GFS/DFS,它通过HTTP-WEB为上 ...
- 程序员的经济学系列——你不可不知的生存智慧——第一篇:小X是要成为IT精英的男人!
21世纪,不懂经济学就是耍流氓!如何才能生活得更好?作为程序员你一定也思考过这个问题.今天我们就来从经济学中寻找这问题的答案吧! 一·PPF与机会成本 1.PPF综述 首先为大家介绍第一个最简单的经济 ...
- 身为一枚优秀的程序员必备的基于Redis的分布式锁和Redlock算法
1 前言 今天开始来和大家一起学习一下Redis实际应用篇,会写几个Redis的常见应用. 在我看来Redis最为典型的应用就是作为分布式缓存系统,其他的一些应用本质上并不是杀手锏功能,是基于Redi ...
- 程序员的脑袋系列---利用ffmpeg命令提取音频
今日各大播放器的版权控制越来越严格.导致很多歌曲无法听,但是MV却可以听.这样很蛋疼有木有? 然而,我们可以利用ffmpeg工具提取MV的音频,比如做成MP3格式,这样就可以听了.--哈哈(邪恶地笑) ...
随机推荐
- fgets(),fscanf()的输入测试与FILE中的当前指针
fgets(string,int,fp) 回车读入测试 #include <stdio.h> int main() { FILE *fp; ],ch2[],ch3[],ch4[]; fp= ...
- 第二课2、ROS
1.ROS框架 分为以下三个级别: 1)文件系统级 2)计算图级 计算图级是ROS处理数据的一种点对点的网络形式,描述程序是如何运行的. 基本的计算图级概念包括:节点,参数服务器,消息,服务,主题和包 ...
- 过滤asp.net页面每次发出请求之前访问
public class PageFiltert : System.Web.UI.Page { public PageFiltert() { // //TODO: 在此处添加构造函数逻辑 // } p ...
- C++11/14的新特性——更简洁
新的字符串表示方式——原生字符串(Raw String Literals) C/C++中提供了字符串,字符串的转义序列,给输出带来了很多不变,如果需要原生义的时候,需要反转义,比较麻烦. C++提 ...
- unity获取设备分辨率
设备分辨率 using UnityEngine; using System.Collections; public class ExampleClass : MonoBehaviour { void ...
- [NOIP2014]子矩阵
1812. [NOIP2014]子矩阵 http://www.cogs.pro/cogs/problem/problem.php?pid=1812 ★★★ 输入文件:submatrix.in ...
- SPFA(热浪)
1557 热浪 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果
- (三)siege的使用
学习: ELK——http://dockone.io/article/3655 docker——http://www.testclass.net/docker/ Android Monkey压力测试— ...
- maven scope 以及依赖传递
https://www.cnblogs.com/mxm2005/p/4947905.html
- HDU-1151-AirRaid(最小路径覆盖)
链接:https://vjudge.net/problem/HDU-1151#author=0 题意: 一个城镇有n个路口,由一些单向马路连接.现在要安排一些伞兵降落在某些路口上,清查所有的路口.一个 ...