[Eコマースウェブサイト003] FastDFS分散ファイルシステム(プロジェクトの実践:写真、オーディオ、ビデオなどの静的リソースを保存します。eコマースウェブサイトには静的リソースが多すぎます。従来のファイルシステムの代わりに分散ファイルシステムを使用してください)

I.はじめに

FastDFS分散ファイルシステム(プロジェクトの実践:写真、オーディオ、ビデオなどの静的リソースを保存します。eコマースWebサイトには静的リソースが多すぎます。分散ファイルシステムを使用して、従来のファイルシステムを置き換えます)

第二に、分散ファイルシステムとは何ですか

2.1分散ファイルシステム

定義:ファイルシステムによって管理される物理ストレージリソースは、必ずしもローカルノードに直接接続されている必要はありませんが、コンピューターネットワークを介してノードに接続されています。

従来のファイルシステムと分散ファイルシステム
従来のファイルシステムで管理されているファイルは、このマシンに保存されます。
分散ファイルシステムによって管理されるファイルは、多くのマシンに保存されます。これらのマシンはネットワークを介して接続されているため、均一に管理する必要があります。ファイルのアップロードまたはアクセスに関係なく、管理センターを介して「
分散アーキテクチャ=分散ロック+分散トランザクション+分散ログイン(シングルサインオン)+分散ファイルシステム」にアクセスする必要があります。

分散ファイルシステムには、TaobaoのFastDFS、GoogleのGFS、HDFS(Hadoop)、TFS(Taobao)などがあります。

2.2 FastDFSは、TaobaoC言語によって開発された分散ファイルシステムです。

FastDFSの
定義:TaobaoのYu Qing氏によって開発され、純粋なC言語で開発された軽量で高性能なオープンソースの分散ファイルシステム。
機能:ファイルストレージ、ファイル同期、ファイルアクセス(アップロード、ダウンロード)、アクセス負荷分散、オンライン拡張、5つの機能は、大容量のストレージ要件を持つアプリケーションまたはシステムに適しています。
ps:大容量のストレージ要件を持つアプリケーションとシステムも、すべての分散ストレージに対して一貫した要件です。

第三に、FastDFSのアーキテクチャ

3.1FastDFSアーキテクチャ図

FastDFSアーキテクチャ図上の図の
、ソースサイトにリーチング防止メカニズムがある可能性があるため、画像を保存して直接アップロードすることをお勧めします(img-5t3AcB7B-1602495599286)(assets / 1526205318630.png))
説明:
FastDFSには、トラッカーサーバーとストレージサーバーの2つの主要な役割があります。
まず、Tracker Server:Tracker Serverは、主にストレージノードとクライアント間の通信のスケジュール設定、アクセスの負荷分散の役割、およびストレージノードの実行ステータスの記録を担当し、クライアントとストレージノードを接続するハブです。
次に、ストレージサーバー:ストレージサーバー、保存ファイル、ファイルメタデータ(メタデータ)。各ストレージサーバーは個別のスレッドを開始して、ディスク使用量などのステータス情報をトラッカークラスター内の各トラッカーサーバーにアクティブに報告します。ファイルの同期ステータスとファイルのアップロードおよびダウンロード時間の統計およびその他の情報
グループ:ファイルグループ、複数のストレージサーバーのクラスター。FastDFSは、同じグループ内のマシンにファイルをアップロードした後、そのファイルを同じグループ内の他のすべてのマシンに即座に同期して、バックアップの役割を果たします。異なるグループのサーバーは異なるデータを格納し、互いに独立しており、通信しません。
トラッカークラスター:トラッカーサーバーのグループで構成される追跡サーバーのクラスター。
ストレージクラスター:複数のグループで構成されるストレージクラスター。

3.2FastDFSアップロードプロセス

、ソースサイトにリーチング防止メカニズムがある可能性があるため、画像を保存して直接アップロードすることをお勧めします(img-Hsb1FSCg-1602495599286)(assets / 1526050664373.png)]
上図の説明について:

  1. クライアントは、トラッカーサーバーを介して利用可能なストレージサーバーを見つけます。
  2. トラッカーサーバーは、使用可能なストレージサーバーのIPアドレスとポート番号をクライアントに返します。
  3. クライアントは、ストレージサーバーの1つとの接続を直接確立し、トラッカーサーバーから返されたIPアドレスとポートを介してファイルをアップロードします。
  4. アップロードが完了すると、ストレージサーバーはファイルIDをクライアントに返し、ファイルのアップロードは終了します。

3.3FastDFSダウンロードプロセス

、ソースサイトにはリーチ防止チェーンメカ​​ニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします(img-u3BWhWSz-1602495599287)(assets / 1526205705687.png))
上図の説明について:

  1. クライアントは、トラッカーサーバーを使用して、ダウンロードするファイルが配置されているストレージサーバーを見つけます。
  2. トラッカーサーバーは、指定されたファイルを含む特定のストレージサーバーのIPアドレスとポート番号をクライアントに返します。
  3. クライアントは、トラッカーサーバーから返されたIPアドレスとポートを介して、ストレージサーバーの1つとの接続を直接確立し、ダウンロードするファイルを指定します。
  4. ファイルは正常にダウンロードされました。

3.4。インストールと使用

事前クラス情報を参照してください:「centosinstallFastDFS.md」

ここに写真の説明を挿入

3.5練習:javaクライアント

Yu Qing氏はJavaクライアントを提供しましたが、Cプログラマーとして、書かれたJavaコードを想像することができます。そして、それは長い間メンテナンスされていません。

これは、最新のSpringBoot2.0をサポートするオープンソースのFastDFSクライアントです。

構成と使用は非常に簡単で、接続プールをサポートし、サムネイルの自動生成をサポートし、気が狂ってクールです。何もありません。

アドレス:tobato / FastDFS_client

ここに写真の説明を挿入

3.5.1。mavenの依存関係を導入する

親プロジェクトでは、依存関係を管理しています。バージョンは次のとおりです。

<fastDFS.client.version>1.26.2</fastDFS.client.version>

したがって、ここで座標を直接紹介できます。

<dependency>
    <groupId>com.github.tobato</groupId>
    <artifactId>fastdfs-client</artifactId>
</dependency>

3.5.2。構成クラスの導入

純粋なJava構成:

@Configuration
@Import(FdfsClientConfig.class)
// 解决jmx重复注册bean的问题
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)
public class FastClientImporter {
    
    
}

3.5.3.FastDFS構成ファイル情報の書き込み

fdfs:
  so-timeout: 1501
  connect-timeout: 601
  thumb-image: # 缩略图
    width: 60
    height: 60
  tracker-list: # tracker地址
    - 192.168.56.101:22122

3.5.4。テストクラス

@RunWith(SpringRunner.class)
@SpringBootTest(classes = LyUploadService.class)
public class FdfsTest {
    
    

    @Autowired
    private FastFileStorageClient storageClient;

    @Autowired
    private ThumbImageConfig thumbImageConfig;

    @Test
    public void testUpload() throws FileNotFoundException {
    
    
        File file = new File("D:\\test\\baby.png");
        // 上传并且生成缩略图
        StorePath storePath = this.storageClient.uploadFile(
                new FileInputStream(file), file.length(), "png", null);
        // 带分组的路径
        System.out.println(storePath.getFullPath());
        // 不带分组的路径
        System.out.println(storePath.getPath());
    }

    @Test
    public void testUploadAndCreateThumb() throws FileNotFoundException {
    
    
        File file = new File("D:\\test\\baby.png");
        // 上传并且生成缩略图
        StorePath storePath = this.storageClient.uploadImageAndCrtThumbImage(
                new FileInputStream(file), file.length(), "png", null);
        // 带分组的路径
        System.out.println(storePath.getFullPath());
        // 不带分组的路径
        System.out.println(storePath.getPath());
        // 获取缩略图路径
        String path = thumbImageConfig.getThumbImagePath(storePath.getPath());
        System.out.println(path);
    }
}

結果:

group1/M00/00/00/wKg4ZVro5eCAZEMVABfYcN8vzII630.png
M00/00/00/wKg4ZVro5eCAZEMVABfYcN8vzII630.png
M00/00/00/wKg4ZVro5eCAZEMVABfYcN8vzII630_60x60.png

最初のパスにアクセスします。

、ソースサイトにはリーチ防止チェーンメカ​​ニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします(img-ivwOVayY-1602495599288)(assets / 1526215187172.png))

最後のパス(サムネイルパス)にアクセスし、グループ名の追加に注意してください。

ここに写真の説明を挿入

FastDFSとHDFS(Hadoop DFS)は、両方とも一緒に学習します

3.5.5。アップロードロジックの変換

@Service
public class UploadService {
    
    

    private static final Logger logger = LoggerFactory.getLogger(UploadController.class);

    // 支持的文件类型
    private static final List<String> suffixes = Arrays.asList("image/png", "image/jpeg");

    @Autowired
    FastFileStorageClient storageClient;

    public String upload(MultipartFile file) {
    
    
        try {
    
    
            // 1、图片信息校验
            // 1)校验文件类型
            String type = file.getContentType();
            if (!suffixes.contains(type)) {
    
    
                logger.info("上传失败,文件类型不匹配:{}", type);
                return null;
            }
            // 2)校验图片内容
            BufferedImage image = ImageIO.read(file.getInputStream());
            if (image == null) {
    
    
                logger.info("上传失败,文件内容不符合要求");
                return null;
            }

            // 2、将图片上传到FastDFS
            // 2.1、获取文件后缀名
            String extension = StringUtils.substringAfterLast(file.getOriginalFilename(), ".");
            // 2.2、上传
            StorePath storePath = this.storageClient.uploadFile(
                    file.getInputStream(), file.getSize(), extension, null);
            // 2.3、返回完整路径
            return "http://image.leyou.com/" + storePath.getFullPath();
        } catch (Exception e) {
    
    
            return null;
        }
    }
}

ファイルを保存する元のロジックを削除して、FastDFSにアップロードするだけです。

3.5.6。テスト

RestClientによるテスト:

ここに写真の説明を挿入

3.6。ページテストのアップロード

アップロードが成功したことがわかりました。

ここに写真の説明を挿入

ただし、このページにアクセスすると、次のようになります。

ここに写真の説明を挿入

これは、画像が仮想マシンにアップロードされているためです。IPは192.168.56.101です。

したがって、image.leyou.comを192.168.56.101にマップする必要があります

ホストを変更します。

ここに写真の説明を挿入

再度アップロード:
ここに写真の説明を挿入

四、黄金の指にインタビュー

4.1 FastDFSとHDFS(Hadoop DFS)が一緒に学習する

まず、FastDFSとHDFS(Hadoop DFS)が一緒に学習します
。FastDFSとHDFS(Hadoop DFS)が一緒に学習します。どちらも分散ファイルストレージシステムです。どちらも大容量ストレージ要件に対応するアプリケーションとシステムです。使いやすいです。インタビュー吹き飛ばしたい場合は、FastDFSとHDFSのアーキテクチャを導入する必要があります。

次に、分散ファイルシステムFastDFSを使用する理由
FastDFS分散ファイルシステム(プロジェクトの実践:写真、オーディオ、ビデオなどの静的リソースを保存する、eコマースWebサイトには静的リソースが多すぎる、従来のファイルシステムの代わりに分散ファイルシステムを使用する)

4.2分散ファイルシステム+ FastDFS

4.2.1分散ファイルシステム

定義:ファイルシステムによって管理される物理ストレージリソースは、必ずしもローカルノードに直接接続されている必要はありませんが、コンピューターネットワークを介してノードに接続されています。

従来のファイルシステムと分散ファイルシステム
従来のファイルシステムで管理されているファイルは、このマシンに保存されます。
分散ファイルシステムによって管理されるファイルは、多くのマシンに保存されます。これらのマシンはネットワークを介して接続されているため、均一に管理する必要があります。ファイルのアップロードまたはアクセスに関係なく、管理センターを介して「
分散アーキテクチャ=分散ロック+分散トランザクション+分散ログイン(シングルサインオン)+分散ファイルシステム」にアクセスする必要があります。

分散ファイルシステムには、TaobaoのFastDFS、GoogleのGFS、HDFS(Hadoop)、TFS(Taobao)などがあります。

4.2.2 FastDFSは、TaobaoC言語によって開発された分散ファイルシステムです。

FastDFSの
定義:TaobaoのYu Qing氏によって開発され、純粋なC言語で開発された軽量で高性能なオープンソースの分散ファイルシステム。
機能:ファイルストレージ、ファイル同期、ファイルアクセス(アップロード、ダウンロード)、アクセス負荷分散、オンライン拡張、5つの機能は、大容量のストレージ要件を持つアプリケーションまたはシステムに適しています。
ps:大容量のストレージ要件を持つアプリケーションとシステムも、すべての分散ストレージに対して一貫した要件です。

4.3FastDFSのアーキテクチャ

4.3.1FastDFSアーキテクチャ図

FastDFSアーキテクチャ図上の図の
、ソースサイトにリーチング防止メカニズムがある可能性があるため、画像を保存して直接アップロードすることをお勧めします(img-5t3AcB7B-1602495599286)(assets / 1526205318630.png))
説明:
FastDFSには、トラッカーサーバーとストレージサーバーの2つの主要な役割があります。
まず、Tracker Server:Tracker Serverは、主にストレージノードとクライアント間の通信のスケジュール設定、アクセスの負荷分散の役割、およびストレージノードの実行ステータスの記録を担当し、クライアントとストレージノードを接続するハブです。
次に、ストレージサーバー:ストレージサーバー、保存ファイル、ファイルメタデータ(メタデータ)。各ストレージサーバーは個別のスレッドを開始して、ディスク使用量などのステータス情報をトラッカークラスター内の各トラッカーサーバーにアクティブに報告します。ファイルの同期ステータスとファイルのアップロードおよびダウンロード時間の統計およびその他の情報
グループ:ファイルグループ、複数のストレージサーバーのクラスター。FastDFSは、同じグループ内のマシンにファイルをアップロードした後、そのファイルを同じグループ内の他のすべてのマシンに即座に同期して、バックアップの役割を果たします。異なるグループのサーバーは異なるデータを格納し、互いに独立しており、通信しません。
トラッカークラスター:トラッカーサーバーのグループで構成される追跡サーバーのクラスター。
ストレージクラスター:複数のグループで構成されるストレージクラスター。

4.3.2FastDFSアップロードプロセス

、ソースサイトにリーチング防止メカニズムがある可能性があるため、画像を保存して直接アップロードすることをお勧めします(img-Hsb1FSCg-1602495599286)(assets / 1526050664373.png)]
上図の説明について:

  1. クライアントは、トラッカーサーバーを介して利用可能なストレージサーバーを見つけます。
  2. トラッカーサーバーは、使用可能なストレージサーバーのIPアドレスとポート番号をクライアントに返します。
  3. クライアントは、ストレージサーバーの1つとの接続を直接確立し、トラッカーサーバーから返されたIPアドレスとポートを介してファイルをアップロードします。
  4. アップロードが完了すると、ストレージサーバーはファイルIDをクライアントに返し、ファイルのアップロードは終了します。

4.3.3FastDFSダウンロードプロセス

、ソースサイトにはリーチ防止チェーンメカ​​ニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします(img-u3BWhWSz-1602495599287)(assets / 1526205705687.png))
上図の説明について:

  1. クライアントは、トラッカーサーバーを使用して、ダウンロードするファイルが配置されているストレージサーバーを見つけます。
  2. トラッカーサーバーは、指定されたファイルを含む特定のストレージサーバーのIPアドレスとポート番号をクライアントに返します。
  3. クライアントは、トラッカーサーバーから返されたIPアドレスとポートを介して、ストレージサーバーの1つとの接続を直接確立し、ダウンロードするファイルを指定します。
  4. ファイルは正常にダウンロードされました。

V.まとめ

FastDFS分散ファイルシステムが完成しました。
毎日コーディングし、毎日進歩してください!

おすすめ

転載: blog.csdn.net/qq_36963950/article/details/109037723