1.分散ファイルシステム
分散ファイルシステム(分散ファイルシステム)とは、ファイルシステムによって管理される物理ストレージリソースが必ずしもローカルノードに直接接続されているわけではなく、コンピューターネットワークを介してノードに接続されていることを指します。分散ファイルシステムの設計は、クライアント/サーバーモデルに基づいています。一般的なネットワークには、複数のユーザーがアクセスするための複数のサーバーが含まれる場合があります。さらに、ピアツーピア機能により、一部のシステムはクライアントとサーバーの二重の役割を果たすことができます。たとえば、ユーザーは他のクライアントがアクセスできるディレクトリを「公開」できます。アクセスすると、ディレクトリはクライアントにローカルドライブのように見えます。
分散ファイルシステムが優れているかどうかの判断は、次の3つの要因に依存します。
- データ保存方法、たとえば、1千万個のデータファイルがあり、すべてのデータファイルを1つのノードに保存でき、各ノードはバックアップとして他のN個のノードに1000万個のデータファイルを保存する、またはN個のノードに均等に分散ストレージ、各ノードは1000 / N、000,000データファイルを保存します。どのような保存方法を採用しても、目的はデータの保存を安全かつ容易に取得できるようにすることです。
- データの読み取り速度には、ユーザーのデータファイルの読み取り要求への応答、データファイルが配置されているノードの場所、実際のハードディスクでのデータファイルの読み取り時間、異なるノード間のデータ転送時間、一部のプロセッサの処理時間が含まれます。分散ファイルシステムのユーザーエクスペリエンスは、さまざまな要因によって決まります。つまり、分散ファイルシステムでのデータ読み取り速度は、ローカルファイルシステムでのデータ読み取り速度とそれほど大きく異なることはできません。そうでない場合、ローカルファイルシステムでファイルを開くのに2秒かかり、分散ファイルシステムのさまざまな要因が発生します。ユーザーエクスペリエンスに影響を与えるまでに10秒以上かかります。
- データセキュリティメカニズムは、データが各ノードに分散しているため、冗長性、バックアップ、ミラーリング、およびその他の方法を採用して、ノードに障害が発生した場合にノードがデータを回復できるようにし、データのセキュリティを確保する必要があります。
2.主流の分散ファイルシステムの導入
現在の主流の分散ファイルシステムは、GFS、HDFS、Ceph、Lustre、MogileFS、MooseFS、FastDFS、TFS、GridFSなどです。
1. GFS(Googleファイルシステム)
Google独自のLinuxベースの分散ファイルシステムは、会社のニーズを満たすために開発されました。グーグルはシステムのいくつかの技術的詳細を発表しましたが、グーグルはシステムのソフトウェア部分をオープンソースソフトウェアとしてリリースしませんでした。
2. HDFS(Hadoop分散ファイルシステム)
Hadoopは、HDFSと呼ばれる分散ファイルシステムを実装します。Hadoopは、Apache Luceneの創設者であるDoug Cuttingが開発した、広く使用されているテキスト検索ライブラリです。これは、オープンソースのWeb検索エンジンであり、それ自体がLueneプロジェクトの一部であるApache Nutchに由来しています。Aapche HadoopアーキテクチャはMapReduceアルゴリズムのオープンソースアプリケーションであり、Googleが帝国を築くための重要な礎石です。
参照リンク:
http://hadoop.apache.org/docs/r2.9.1/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html
3.セフ
これは、カリフォルニア大学サンタクルーズ校のSage WeilがPhDの勉強をしながら開発した分散ファイルシステムです。そして、セフを使用して彼の論文を完了しました。
cephはbtrfsファイルシステムを使用しているため、btrfsファイルシステムがそれをサポートするにはLinux 2.6.34以降が必要です。Cephはまだ十分に成熟しておらず、そのベースとなっているbtrfsは成熟していないため、公式Webサイトには、cephを本番環境で使用してはならないことが明記されています。
参照リンク:
https://github.com/ceph/ceph
https://ceph.com
4.光沢
Lustreは、SUNによって開発および保守されている、高可用性を備えた大規模で安全かつ信頼性の高いクラスターファイルシステムです。このプロジェクトの主な目的は、10,000を超えるノードをサポートし、PBデータストレージシステムを数える次世代のクラスタファイルシステムを開発することです。現在、LusterはHP SFS製品などの一部の分野で使用されています。
参照リンク:
http://lustre.org/
5. MooseFS
FUSEをサポートし、比較的軽量で、マスターサーバーへの単一の依存点があり、perlで記述されています。パフォーマンスは比較的低く、中国ではより多くの人々が使用しています。
参照リンク:
https://moosefs.com
https://sourceforge.net/projects/moosefs/?source=directory
https://www.cnblogs.com/hjc4025/p/9956988.html
6. MogileFS
memcahedの開発会社danga perlが開発した製品で、現在、中国ではyupooなどの画像ホスティングサイトにmogielFSが使用されています。MogileFSは、Six Apartによって開発された効率的な自動ファイルバックアップコンポーネントのセットで、LiveJournalを含むweb2.0サイトで広く使用されています。
参照リンク:
https://github.com/mogilefs
7. FastDFS
これは、純粋なC言語で開発された、Google FSに似たオープンソースの分散ファイルシステムです。FastDFSは、オープンソースの軽量分散ファイルシステムです。ファイルを管理します。機能には、ファイルストレージ、ファイル同期、ファイルアクセス(ファイルアップロード、ファイルダウンロード)などがあり、大容量ストレージと負荷分散の問題を解決します。フォトアルバムウェブサイト、ビデオウェブサイトなど、ドキュメントをキャリアとして使用するオンラインサービスに特に適しています。
参照リンク:
https://github.com/happyfish100/fastdfs
https://www.cnblogs.com/shenxm/p/8459292.html
8. GlusterFS
オープンソースの分散型水平拡張ファイルシステムは、ストレージのニーズに応じてストレージをすばやく割り当てることができ、豊富な自動フェイルオーバー機能が含まれ、中央集中型メタデータサーバーのアイデアを破棄します。データ集約型のタスクに適したスケーラブルなネットワークファイルシステム。スケーラビリティ、高性能、高可用性を備えています。Glusterは、2011年10月7日にレッドハットに買収されました。
参照リンク:
http://www.gluster.org
https://blog.csdn.net/liuaigui/article/details/6284551
9. TFS(淘宝網ファイルシステム)
TFSは、主に大規模な非構造化データ向けの、拡張性が高く、可用性が高く、高性能なインターネット指向の分散ファイルシステムです。一般的なLinuxマシンクラスタ上に構築されており、外部に高い信頼性と高い同時実行性を提供できます。ストレージアクセス。TFSは、Taobaoに大量の小さなファイルストレージを提供します。通常、ファイルサイズは1Mを超えません。これは、Taobaoの小さなファイルストレージに対する需要を満たし、Taobaoのさまざまなアプリケーションで広く使用されています。HAアーキテクチャとスムーズな拡張を使用して、ファイルシステム全体の可用性とスケーラビリティを保証します。同時に、フラットデータ編成構造は、ファイル名をファイルの物理アドレスにマップし、ファイルアクセスプロセスを簡略化し、TFSにある程度の優れた読み取りおよび書き込みパフォーマンスを提供できます。
参照リンク:
http://code.taobao.org/p/tfs/src/
10. GridFS
MongoDBは有名なNoSqlデータベースです。GridFSはMongoDBの組み込み関数です。これは、MongoDBを使用してファイルを保存するための一連のファイル操作APIを提供します。GridFSの基本原則は、ファイルを2つのコレクションに保存することです。ファイルの内容を保存し、ファイルの内容を特定のサイズに応じていくつかのブロックに分割し、各ブロックをドキュメントに保存します。この方法では、ファイルの保存だけでなく、ファイルに関連する追加の属性(MD5値、ファイル名など)も提供されます。ストレージ。GridFSのファイルは4MBのブロックに保存されます。
参照リンク:
https://docs.mongodb.com/manual/core/gridfs
第三に、分散ファイルシステムの比較
1.包括的な比較
ファイルシステム | 開発者 | 開発言語 | オープンソース契約 | 使いやすさ | 該当するシーン | 特徴 | 短所 |
---|---|---|---|---|---|---|---|
GFS | グーグル | オープンソースではない | |||||
HDFS | Apache | ジャワ | Apache | 簡単なインストールと専門の公式ドキュメント | 非常に大きなファイルを保存する | 大量のデータの読み取りと書き込み、高スループット、1回の書き込み、複数回の読み取り、順次の読み取りと書き込み | ミリ秒レベルの低レイテンシデータアクセスに対応するのが難しい。複数のユーザーが同じファイルを同時に書き込むことはサポートされていない。多数の小さなファイルには適さない |
セフ | セージウェイル、カリフォルニア大学サンタクルーズ校 | C ++ | LGPL | 簡単なインストールと専門の公式ドキュメント | 大、中、小ファイルの単一クラスター | 分散型、単一の依存ポイントがない、Cで記述された、優れたパフォーマンス | 未成熟なbtrfsに基づいており、十分に成熟しておらず、それ自体では安定していないため、本番環境での使用は推奨されません |
光沢 | 太陽 | C | GPL | 複雑で、カーネルに大きく依存しているため、カーネルを再コンパイルする必要があります | 大きなファイルの読み取りと書き込み | エンタープライズレベルの製品、非常に大きく、カーネルとext3に深く依存 | |
MooseFS | コアSp z oo | C | GPL v3 | 簡単なインストール、多くの公式ドキュメント、および管理および監視するためのWebインターフェイス | 多数の小さなファイルの読み取りと書き込み | Perlで書かれた軽量で、より多くの人々が中国でそれを使用しています | マスターサーバーへの単一の依存ポイントがあり、パフォーマンスが比較的低い |
MogileFS | Danga Interactive | Perl | GPL | 主にウェブ分野で使用され、巨大な小さな写真を処理します | Key-Valueタイプのメタファイルシステム、mooseFSよりもはるかに高い効率 | FUSEをサポートしていません | |
FastDFS | 国内デベロッパーYu Qing | C | GPL v3 | シンプルなインストールと比較的アクティブなコミュニティ | 単一クラスター用の中小ファイル | システムはPOSIXをサポートする必要がないため、システムの複雑さが軽減され、処理効率が向上します。ソフトRAIDを実装し、システムの同時処理機能とデータフォールトトレランスの回復機能を強化します。マスタースレーブファイルをサポートし、カスタム拡張機能をサポートします。マスタースレーブトラッカーサービス、システムの可用性を高める | ブレークポイントの再開をサポートせず、大容量のファイルストレージに適していません。POSIXをサポートしておらず、汎用性が低いです。パブリックネットワーク全体でのファイルの同期、大きな遅延があり、対応するフォールトトレランス戦略を適用する必要があります。同期メカニズムはファイルの修正をサポートしていません検証、APIを介したダウンロード、パフォーマンスのボトルネックの単一ポイントがあります |
GlusterFS | Zリサーチ | C | GPL v3 | 簡単なインストールと専門の公式ドキュメント | 大きなファイルに適していますが、小さなファイルのパフォーマンスを最適化する余地はまだたくさんあります | メタデータサーバーなし、スタックアーキテクチャ(基本的な機能モジュールを組み合わせてスタックして強力な機能を実現できます)、線形スケールアウト機能、mooseFSよりも大きい | メタデータサーバーがないため、クライアントの負荷が増加し、かなりの量のCPUとメモリを占有します。ただし、ファイルディレクトリをトラバースする場合は、より複雑で非効率的であり、すべてのストレージノードを検索する必要があるため、より深いパスを使用することは推奨されません |
TFS | アリババ | C ++ | LPG V2 | 複雑なインストールと少数の公式ドキュメント | クラスタ全体の小さなファイル | 小さなファイル用に調整されたランダムIOのパフォーマンスは比較的高く、ソフトRAIDを実装し、システムの同時処理能力とデータのフォールトトレラントな回復機能を強化します。マスタースレーブホットスワップをサポートし、システムの可用性を向上させます。マスタースレーブクラスターの展開をサポートします読み取り/スタンバイ機能を提供 | 大きなファイルの保存には適していません。POSIXをサポートしておらず、汎用性が低いです。カスタムディレクトリ構造とファイルのアクセス許可制御をサポートしていません。API経由でダウンロードすると、パフォーマンスのボトルネックが1つあります。公式ドキュメントが少ないため、学習コストが高くなります |
GridFS | MongoDB | C++ | 安装简单 | 通常用来处理大文件(超过16M) | 可以访问部分文件,而不用向内存中加载全部文件,从而保持高性能;文件和元数据自动同步 |
2. 特性对比
文件系统 | 数据存储方式 | 集群节点通讯协议 | 专用元数据存储点 | 在线扩容 | 冗余备份 | 单点故障 | 跨集群同步 | FUSE挂载 | 访问接口 |
---|---|---|---|---|---|---|---|---|---|
HDFS | 文件 | 私有协议(TCP) | 占用MDS | 支持 | 存在 | 不支持 | 支持 | 不支持POSIX | |
Ceph | 对象/文件/块 | 私有协议(TCP) | 占用MDS | 支持 | 支持 | 存在 | 不支持 | 支持 | POSIX |
Lustre | 对象 | 私有协议(TCP)/ RDAM(远程直接访问内存) | 双MDS | 支持 | 不支持 | 存在 | 未知 | 支持 | POSIX/MPI |
MooseFS | 块 | 私有协议(TCP) | 占用MFS | 支持 | 支持 | 存在 | 不支持 | 支持 | POSIX |
MogileFS | 文件 | HTTP | 占用DB | 支持 | 不支持 | 存在 | 不支持 | 不支持 | 不支持POSIX |
FastDFS | 文件/块 | 私有协议(TCP) | 无 | 支持 | 支持 | 不存在 | 部分支持 | 不支持 | 不支持POSIX |
GlusterFS | 文件/块 | 私有协议(TCP)/RDAM(远程直接访问内存) | 无 | 支持 | 支持 | 不存在 | 支持 | 支持 | POSIX |
TFS | 文件 | 私有协议(TCP) | 占用NS | 支持 | 支持 | 存在 | 支持 | 未知 | 不支持POSIX |
什么是POSIX?
POSIX表示可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX ),也就是Unix下应用程序共同遵循的一种规范。支持POSIX的应用程序意味着在各个Unix系统间提供了跨平台运行的支持。
四、选型参考
1. 按特性分类
适合做通用文件系统的有:Ceph,Lustre,MooseFS,GlusterFS;
适合做小文件存储的文件系统有:Ceph,MooseFS,MogileFS,FastDFS,TFS;
适合做大文件存储的文件系统有:HDFS,Ceph,Lustre,GlusterFS,GridFS;
轻量级文件系统有:MooseFS,FastDFS;
简单易用,用户数量活跃的文件系统有:MooseFS,MogileFS,FastDFS,GlusterFS;
支持FUSE挂载的文件系统有:HDFS,Ceph,Lustre,MooseFS,GlusterFS。
2. 初步筛选
考虑到GFS不开源,学习成本高,且相关特性资料不全面的情况下,暂时先不考虑使用GFS;
Ceph目前不够成熟稳定,很少有使用在生产环境的案例,暂时排除;
Lustre对内核依赖程度过重,且不易安装使用,暂时排除;
TFS安装复杂,且官方文档少,不利于以后的学习使用,暂时先排除;
经初步筛选剩下的文件系统有:HDFS、MooseFS、MogileFS、FastDFS、GlusterFS、GridFS。
3. 根据需求分析进一步筛选
需求:
- 需要搭建一部管理原始凭证的文件系统,原始凭证的文件类型主要是小图片,写操作量少,读操作量大,且对安全性要求较高。
- 随着系统在使用过程中数据量逐步庞大,图片的量会变得繁多,对图片读取速率要求尽可能高但不追求极致(无需到毫秒级)。
- 文件系统需要有较完善的冗余备份与容错机制,功能尽量精简耐用,安装配置应简单且适合于国产环境部署。
分析:
-
根据需求,首选需要选择适合海量小图片存储的文件系统,适合的文件系统有:MooseFS,MogileFS,FastDFS。
-
其次需要支持冗余备份,适合的文件系统有:MooseFS、FastDFS、GlusterFS。
-
符合条件1,2且功能精简的文件系统有:FastDFS。
-
符合条件1,2且功能全面的文件系统有:MooseFS。
总结:
MooseFS功能较为全面,支持在线扩容、冗余备份、FUSE挂载和POSIX访问接口,不支持跨集群同步,存在单点故障,性能相对较差。
FastDFS功能精简,支持在线扩容、冗余备份,部分支持跨集群同步,不支持FUSE挂载和POSIX访问接口,不存在单点故障,性能较好。
提供的建议选型参考为FastDFS或MooseFS,可根据需求的细化进一步分析选取。
备注:此选型参考提供的是分布式文件系统的选型建议,根据系统需求也可选择NFS等其他更合适的文件系统类型;此选型参考仅局限于分析范围内的文件系统,仍然有其他类型的文件系统可能是更好的选择;此选型参考中没有确切的性能测试数据作为对比,无法提供性能方面的精确比较。
五、参考文献
开源分布式存储系统的对比 [http://my.525.life/article?id=1510739742054]
分布式文件系统MFS、Ceph、GlusterFS、Lustre的对比 [https://www.cnblogs.com/zhiguo/p/3334993.html]
使用 FUSE 开发自己的文件系统 [https://www.ibm.com/developerworks/cn/linux/l-fuse]