DUICUO

FastDFS を放棄して、Spring Boot は MinIO を統合して分散ファイル サービスを実装します。すばらしいですね。

今日は、オープンソースの優れた分散ストレージコンポーネント、MinIOをご紹介します。多くの方が利用しているので、ぜひコメント欄にご意見をお寄せください。

MinIOとは何ですか?

Minioは、Go言語で記述され、Apache License v2.0に基づいてライセンスされているオープンソースのオブジェクトストレージスイートです。軽量でありながら、優れたパフォーマンスを誇ります。Amazon S3クラウドストレージサービスのインターフェースと互換性があり、Node.js、Redis、MySQLなどの他のアプリケーションと簡単に統合できます。

1. アプリケーションシナリオ

MinIO は、プライベート クラウド オブジェクト ストレージ サービスとしてだけでなく、Amazon S3 や Microsoft Azure にシームレスに接続し、クラウド オブジェクト ストレージのゲートウェイ レイヤーとしても使用できます。

写真

2. 特徴

  1. 高性能:高性能ストレージデバイスとして、標準的なハードウェア条件下では、読み取り速度と書き込み速度はそれぞれ55Gbpsと35Gbpsに達します。さらに、MinIOは数キロバイトから最大5TBまでのあらゆるサイズのオブジェクトファイルをサポートします。
  2. スケーラブル: さまざまな MinIO クラスターを統合してグローバル名前空間を形成し、複数のデータ センターをサポートできます。
  3. クラウド ネイティブ: コンテナ化、Kubernetes ベースのオーケストレーション、マルチテナント サポート。
  4. Amazon S3 互換:Amazon S3 v2/v4 API を使用します。Minio サーバーには、Minio SDK、Minio クライアント、AWS SDK、AWS CLI を使用してアクセスできます。
  5. SDK サポート:
  1. GO SDK: https://github.com/minio/minio-go
  2. JavaSDK: https://github.com/minio/minio-java
  3. PythonSDK: https://github.com/minio/minio-py
  1. グラフィカルインターフェース:操作ページ付き
  2. イレージャーコーディングのサポート:MinIOは、イレージャーコーディングとチェックサムを使用することで、ハードウェアエラーやサイレントデータ破損を防止します。最高の冗長構成では、ディスクの半分が失われた場合でもデータを復旧できます。

これは非常に強力な機能です。この記事はあくまでも入門編です。ご興味のある方は、ぜひご自身で調べてみてください。

MinIOをインストールする

インストールは非常に簡単です。ここではDockerを使ってインストールします。手順は以下のとおりです。

1. 画像を取得する

実行するコマンドは次のとおりです。

 docker pull minio/minio

2. 画像を開始する

実行するコマンドは次のとおりです。

 docker run -p 9000:9000 -p 9001:9001 --name minio -d --restart=always -e "MINIO_ACCESS_KEY=admin" -e "MINIO_SECRET_KEY=admin" -v /home/data:/data -v /home/config:/root/.minio minio/minio server --console-address ":9000" --address ":9001" /data

コマンドの説明は次のとおりです。

  • -p: 9000はグラフィカルインターフェースのポート、9001はAPIのポートです。SDKを使用して接続する場合は必須です。
  • MINIO_ACCESS_KEY: グラフィカル インターフェイスのユーザー名を指定します。
  • MINIO_SECRET_KEY: グラフィカル インターフェイスのパスワードを指定します。

上記の 2 つの手順を実行すると、プロセスは成功します。

3. グラフィカルインターフェース操作

インストールが成功したら、以下に示すように、次のアドレス http://ip:9000/login にアクセスします。

写真

ユーザー名とパスワードで正常にログインすると、次のように表示されます。

写真

メニューはたくさんあるので、ここでは詳しく説明しません。下の画像のように、「Buckets」メニューで「test」という名前のバケットを作成します。

写真

次のように、このバケットのプライバシー ルールをパブリックに設定します。

写真

MinIO のインストールとセットアップが正常に完了しました。

ファイルアップロードのための MinIO との Spring Boot 統合

MinIOはグラフィカルインターフェースで手動アップロード機能を提供していますが、SDK経由でもアップロード可能です。以下では、MinIOとSpring Bootを統合してファイルをアップロードする方法を紹介します。

1. accessKeyとsecretKeyを取得する

ここでのaccessKeyとsecretKeyは、グラフィカルインターフェースのログイン名とパスワードではありません。これらは簡単に取得できます。下の画像に示すように、グラフィカルインターフェース内で直接取得できます。

写真

写真

2.依存関係を追加する

次のように MinIO 依存関係を追加します。

 <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.2.1</version> </dependency>

3. 設定を追加する

ここでは、SDKのシンプルなラッパーを作成しました。サンプルソースコードも提供します。以下にコードの一部のみを掲載します。

次のように、MInIO 関連の構成を application.yml ファイルに追加します。

 minio: # 访问的url endpoint: http://192.168.47.148 # API的端口port: 9001 # 秘钥accessKey: HQGWFYLWGC6FVJ0CQFOG secretKey: pUGhAgQhZDxJaLmN3uz65YX7Bb3FyLdLglBvcCr1 secure: false bucket-name: test # 桶名我这是给出了一个默认桶名image-size: 10485760 # 我在这里设定了图片文件的最大大小file-size: 1073741824 # 此处是设定了文件的最大大小

4. 新しいファイルアップロードインターフェースを作成する

ここでは、次のようにファイルアップロード インターフェイスを定義しました。

 /** * @author 公众号:码猿技术专栏*/ @RequestMapping("/minio") @RestController public class MinioController { @Autowired private MinioService minioService; @PostMapping("/upload") public String uploadFile(MultipartFile file, String bucketName) { String fileType = FileTypeUtils.getFileType(file); if (fileType != null) { return minioService.putObject(file, bucketName, fileType); } return "不支持的文件格式。请确认格式,重新上传!!!"; } }

5. テスト

上記の4つのステップが統合されました。では、以下のようにAPIを使って画像を直接アップロードしてみましょう。

写真

API によって返される URL はファイル アクセス アドレスです。ブラウザに入力するだけでアクセスできます。

保存されたファイルは、次の画像に示すように、MinIO でも表示できます。

写真

他の人と共有する必要がある場合は、手動で共有することもできます。有効期間は7日間で、期間が過ぎると以下のように期限切れになります。

写真

ソースコードはGitHubにアップロードされています。WeChat公式アカウント「Code Monkey Technology Column」をフォローし、キーワード「9535」を返信すると入手できます!

要約

MinIOはオープンソースプロジェクトですが、非常に強力です。小規模プロジェクトでオブジェクトストレージを実装したり、無料の画像ホスティングサービスを構築したりするのに使用できます。