FastDFSの動作メカニズムと長所と短所の分析

1. FastDFSの概要

FastDFSは、Easy Road Vehiclesの設計者であるYu Qingが最初にaliで作成したオープンソースの軽量分散ファイルシステムです。純粋なC言語で実装され、Linux、FreeBSD、AIXなどのLinuxシステムをサポートします。FastDFSはインターネットアプリケーション用にカスタマイズされており、高性能と高いスケーラビリティを追求し、アプリケーションレベルの分散ファイルストレージサービスにより適しています。独自のAPIを介してのみファイルにアクセスおよびアクセスでき、POSIXインターフェイスモードをサポートせず、汎用性が低くなります。

言語サポートに関しては、C、java、php、.NETのAPIが現在提供されています。

現在、jd、taobao、58、uc、51ctoで使用されています。

2. FastDFSの使用

1)FastDFSは、主に大容量ファイルストレージと高同時アクセスの問題を解決し、ファイルアクセス中のロードバランシングを実現します。

2)FastDFSはソフトウェアRAIDを実装しており、安価なIDEハードドライブを使用して保存でき、ストレージサーバーのオンライン拡張をサポートします。

3)FastDFSは、リソースファイル(画像、ドキュメント、オーディオ、ビデオなど)を格納する大規模および中規模のWebサイトに特に適しています。

3. FastDFSの動作メカニズム

1.クラスタアーキテクチャ図

ここに画像の説明を挿入

よるFastDFSクラスタアーキテクチャ追跡サーバ(トラッカー・サーバ)、ストレージサーバー(ストレージ・サーバ)とクライアント三つの部分の(クライアント)。

トラッカーサーバー:主にスケジューリング作業を行い、アクセス時に負荷分散の役割を果たし、クラスター内のグループとストレージサーバーの状態情報をメモリに記録します。関連情報はすべてメモリ内にあるため、クライアントとストレージサーバーを接続するハブですパフォーマンスは非常に高く(それ自体に必要な負荷はほとんどありません)、より大きなクラスター(数百のグループなど)で3つで十分です。

ストレージサーバー:ファイルとファイル属性(メタデータなど)はサーバーに保存されます。ストレージサービスには、ファイルストレージ、ファイル同期、ファイルアクセスインターフェイス、Key-Valueによるファイルメタデータ管理が含まれます。

FastDFSアーキテクチャの解釈

  • トラッカーサーバーとストレージサーバーの2つの役割は、ファイルインデックス情報を格納する必要はありません。
  • すべてのサーバーはピアツーピアであり、マスターとスレーブの関係はありません。
  • ストレージサーバーはグループ化され、同じグループ内のストレージサーバー上のファイルは同一です(RAID 1)。
  • ストレージクラスタでは、グループ(またはボリューム)とグループは互いに独立していません。ストレージはステータスをトラッカーにアクティブに報告します。すべてのグループの累積容量は、ストレージシステム全体のファイル容量です。グループは、1つ以上のユニットで構成できます。ストレージサーバーは、グループ内の単一のストレージサーバー内のすべてのファイルで構成され、グループ内の複数のストレージサーバーは、冗長バックアップと負荷分散の役割を果たします。ファイルはシステムによって自動的に完了します。同期が完了すると、システムは自動的に新しく追加されたサーバーを切り替えてサービスをオンラインで提供します。ストレージ容量が足りない場合や使い果たされそうな場合は、グループを動的に追加できます。追加する必要があるサーバーは1つ以上だけです。それらは新しいグループとして構成され、ストレージシステムの容量を拡張します。
  • FastDFSクラスター全体の容量を拡張するには、ストレージにグループを追加するだけです。

2.アップロードとダウンロードのメカニズム

2.1アップロードメカニズム

ここに画像の説明を挿入

1.トラッカーサーバーを選択します

クラスター内に複数のトラッカーサーバーがある場合、トラッカーは完全に等しいため、クライアントはファイルをアップロードするときにトラッカーを選択できます。
保存されたグループの選択
トラッカーがファイルのアップロードリクエストを受信すると、ファイルを保存できるファイルにグループが割り当てられます。グループを選択するための次のルールがサポートされています。

  • 1.ラウンドロビン、すべてのグループ間のポーリング
  • 2.特定のグループ、特定のグループを指定
  • 3.負荷分散、より多くのストレージグループの優先度

2.ストレージサーバーを選択します

グループが選択されると、トラッカーはグループ内のストレージサーバーをクライアントに対して選択し、ストレージを選択するための次のルールをサポートします。

  • 1.ラウンドロビン、グループ内のすべてのストレージ間でポーリング
  • 2.最初にIPで並べ替えられたサーバー、IPで並べ替え
  • 3.優先順位で並べ替えられ、優先順位でソートされた最初のサーバー(優先順位はストレージで構成されます)

3.ストレージパスを選択

ストレージサーバーが割り当てられると、クライアントはファイル書き込み要求をストレージに送信し、ストレージはファイルにデータストレージディレクトリを割り当て、次のルールをサポートします。

  • 1.ラウンドロビン、複数のストレージディレクトリ間のポーリング
  • 2.残りのストレージ容量が最も多い優先度

4.ファイル名を生成する

ストレージディレクトリを選択すると、ストレージはファイルのファイル名を生成します。これは、ストレージサーバーのIP、ファイル作成時間、ファイルサイズ、ファイルチェックコード、および乱数によって生成されます。

2つのレベルのディレクトリを選択します。各ストレージディレクトリには、256 * 256の2つのレベルのサブディレクトリがあります。ストレージは、ファイル名に従って2回ハッシュされ、サブディレクトリの1つにルーティングされ、ファイルがサブディレクトリに格納されます。

5.ファイルインデックスを生成する

ファイルがサブディレクトリに格納されている場合、ファイルが正常に格納されたと見なされ、ファイルのファイルインデックスFileidが生成されます。Fileidは、グループ、ストレージディレクトリ、2レベルのサブディレクトリ、ファイル名、ファイルサフィックス名(クライアントによって指定され、主にファイルタイプを区別するために使用される)で構成されます。

2.2ダウンロードメカニズム

ここに画像の説明を挿入

クライアントはファイル名情報を取得し、トラッカーサービスにストレージサーバーのIPアドレスとポートの取得を要求します。次に、クライアントは返されたIPアドレスとポート番号に基づいてファイルのダウンロードを要求します。ストレージサーバーは要求を受信した後、ファイルをクライアントに返します。

3.ファイルインデックス分析

ファイルインデックスの例:

group1 / M00 / 00 / 0C / wKjRbExx2K0AAAAAAAANiSQUgyg37275.h

「Group1」はグループ名、「/ M00 / 00 / 0C /」はディスクとディレクトリ、「wKjRbExx2K0AAAAAAAANiSQUgyg37275.h」はファイル名とサフィックスです。

ファイル名は、ソースストレージサーバーのIP、作成時のタイムスタンプ、ファイルサイズ、ファイルチェックコード、およびハッシュ計算後の乱数から生成されます。最後に、base64に基づいてテキストエンコードされ、印刷可能な文字に変換されます。

4.ファイル同期メカニズム

ストレージサーバーは、binlogファイルを使用して、ファイルのアップロードや削除などの更新操作を記録します。binlogはファイルの内容を記録せず、ファイル名などのメタデータ情報のみを記録します。

ストレージサーバーでは、専用スレッドがbinlogに従ってファイルを同期します。相互の影響を最大限に回避し、システムを簡素化するために、ストレージサーバーはグループ内の各サーバーに対してスレッドを開始し、それ自体を除いてファイルを同期します。ファイル同期は増分同期方式を採用しており、システムは同期された位置(binlogファイルのオフセット)を識別ファイルに記録します。識別ファイル名の形式:{dest storage IP} _ {port} .mark

ファイルの同期は、同じグループ内のストレージサーバー間でのみプッシュ方式で実行されます。つまり、ソースサーバーはターゲットサーバーと同期されます。ソースデータのみを同期する必要があり、バックアップデータを再度同期する必要はありません。同期しないと、ループが形成されます。

新しいストレージサーバーが追加されると、既存のストレージサーバーは既存のすべてのデータ(ソースデータとバックアップデータを含む)を新しく追加されたサーバーと同期します。

クライアントがファイルをストレージサーバーにアップロードすると、ファイルのアップロードが完了します。ストレージサーバーは、binlogのアップロードレコードに従って、このファイルを同じグループ内の他のストレージサーバーと同期します。このファイル同期方法は非同期であり、非同期方法はファイル同期遅延の問題を引き起こします。新しいファイルがアップロードされた後、同期されていないストレージサーバー上のファイルにアクセスすると、ファイルが見つかりません。

4、長所と短所の分析

1.利点

  1. システムはPOSIX(ポータブルオペレーティングシステム)をサポートする必要がないため、システムの複雑さが軽減され、処理効率が向上します。
  2. システムのスケーラビリティを強化するオンライン拡張メカニズムをサポート
  3. ソフトRAIDを実装し、システムの並行処理機能とデータフォールトトレランス回復機能を強化
  4. マスタースレーブファイルをサポートし、カスタム拡張をサポート
  5. 複数のスタンバイトラッカーをサポートし、システムの可用性を向上
  6. NginxとApacheの拡張機能をサポートし、httpでダウンロード可能

マスタースレーブファイルとは何ですか?

主从文件是指文件ID有关联的文件,一个主文件可以对应多个从文件。
主文件ID = 主文件名 + 主文件扩展名
从文件ID = 主文件名 + 从文件后缀名 + 从文件扩展名
使用主从文件的一个典型例子:以图片为例,主文件为原始图片,从文件为该图片的一张或多张缩略图。
FastDFS中的主从文件只是在文件ID上有联系。FastDFS server端没有记录主从文件对应关系,因此删除主文件,FastDFS不会自动删除从文件。
删除主文件后,从文件的级联删除,需要由应用端来实现。
主文件及其从文件均存放到同一个group中。
主从文件的生成顺序:
1)先上传主文件(如原文件),得到主文件ID
2)然后上传从文件(如缩略图),指定主文件ID和从文件后缀名(当然还可以同时指定从文件扩展名),得到从文件ID

2.短所

  1. ブレークポイントの再開をサポートしていないため、大きなファイルの悪夢になります(FastDFSは大きなファイルのストレージには適していません)
  2. POSIXユニバーサルインターフェイスアクセスをサポートせず、汎用性が低い
  3. 同期メカニズムは、ファイルの正当性の検証をサポートしていないため、システムの可用性が低下します。パブリックネットワーク全体でのファイルの同期には大きな遅延があり、対応するフォールトトレランス戦略を適用する必要があります。
  4. API経由でダウンロードします。パフォーマンスのボトルネックが1箇所あります

5.実際の問題と現在の解決策

1.ファイル同期遅延

ファイルの同期方法は非同期です。新しいファイルがアップロードされた後、過去に同期されていないストレージサーバーでファイルが見つかりません。

解決策:

グループに含まれるストレージサーバーは、構成ファイルによって設定されるのではなく、トラッカーサーバーによって取得されることに注意してください。クライアントとストレージサーバーは、トラッカーサーバーにアクティブに接続します。ストレージサーバーは、残りのディスク容量、ファイル同期ステータス、ファイルのアップロードとダウンロードの時間、その他の統計情報など、ステータス情報をトラッカーサーバーにアクティブに報告します。ストレージサーバーは、クラスター内のすべてのトラッカーサーバーに接続し、それらのステータスをそれらに報告します。ストレージサーバーは別のスレッドを開始して、トラッカーサーバーへの接続とタイミングレポートを完了します。さらに、各ストレージサーバーは、同じグループ内の他のストレージサーバーと同期するファイルのタイムスタンプをトラッカーサーバーに定期的に報告します。トラッカーサーバーは、ストレージサーバーからファイル同期レポートを受信すると、グループ内の各ストレージサーバーが同期しているファイルタイムスタンプの最小値を順次検索し、ストレージの属性としてメモリに記録します。上記の状況によると、FastDFSは次の簡単なソリューションを提供します。

1.ファイルの更新と同様に、ソースストレージサーバーがファイルをダウンロードすることをお勧めします。これはトラッカーサーバーの構成ファイルで設定でき、対応するパラメーター名はdownload_serverです。

2.ストレージサーバーの選択方法はラウンドロビンです。指定したファイルをダウンロードできるストレージサーバーをトラッカーサーバーに要求すると、トラッカーサーバーは次の4つの条件のいずれかを満たすストレージサーバーを返します。

  • ファイルがアップロードされるソースストレージサーバー。ファイルはサーバーに直接アップロードされます。
  • ファイル作成タイムスタンプ<ストレージサーバーが同期されるファイルタイムスタンプ。つまり、現在のファイルが同期されています。
  • ファイル作成タイムスタンプ=ストレージサーバーが同期されるファイルタイムスタンプ、および(現在の時間-ファイル作成タイムスタンプ)>ファイル同期が完了するまでに必要な最大時間(5分など)。
  • (現在のファイル作成タイムスタンプ)>ファイル同期遅延しきい値。たとえば、しきい値を1日に設定すると、ファイル同期は1日で確実に完了することができます。

2.データのセキュリティ

  • コピーが成功します。ソースストレージがファイルの書き込みを完了してから、グループ内の他のストレージと同期するまでの時間内に、ソースストレージに障害が発生すると、ユーザーデータが失われる可能性があります。これは通常、ストレージシステムでは受け入れられません。の。
  • 自動リカバリメカニズムの欠如:ストレージディスクに障害が発生した場合、ディスクを交換して手動でデータを復元することしかできません。マシンのバックアップのため、事前に準備されたホットスペアディスクがない限り、自動リカバリメカニズムは不可能と思われます。自動回復メカニズムにより、システムの運用と保守作業が増加します。
  • データの回復効率が低いデータを回復する場合、グループ内の他のストレージからしか読み取ることができません。同時に、小さなファイルのアクセス効率が低いため、ファイルベースの回復の効率も低くなります。回復効率が低いと、データを意味します危険な状態を長く続けます。
  • マルチマシンルームのディザスタリカバリのサポートの欠如:現在、マルチマシンルームのディザスタリカバリを行うには、追加のツールのみを使用してデータをバックアップクラスタに同期でき、自動化されたメカニズムはありません。

3.保管スペースの利用

1台のマシンに保存されるファイルの数は、iノードの数によって制限されます

各ファイルは、ストレージローカルファイルシステム内のファイルに対応します。平均すると、各ファイルはblock_size / 2のストレージスペースを浪費します。

ファイルの結合ストレージは、上記の2つの問題を効果的に解決できますが、結合ストレージにはスペース回復メカニズムがないため、ファイルを削除するスペースの再利用は保証されず、スペースの浪費の問題もあります。

4.負荷分散

グループメカニズム自体はロードバランシングに使用できますが、これは静的なロードバランシングメカニズムにすぎないため、アプリケーションのアクセス特性を事前に把握しておく必要があります。同時に、グループメカニズムでは、動的なロードバランシングのためにグループ間でデータを移行することもできません。

6.リファレンス

FastDFSの紹介[https://www.cnblogs.com/shenxm/p/8459292.html]

分散ファイルシステムFastDFSの詳細な説明[https://www.cnblogs.com/ityouknow/p/8240976.html]

FastDFSの機能と問題の考え方[https://www.cnblogs.com/jym-sunshine/p/6397705.html]

FastDFS同期の問題に関するディスカッション[https://www.cnblogs.com/snake-hand/p/3161528.html]

元の記事を40件公開 賞賛を25件 100,000回以上の閲覧

おすすめ

転載: blog.csdn.net/yym373872996/article/details/105651008