SpringBootの大きなファイル(100M以上)のアップロードとダウンロードの実装テクノロジー

1つの  背景

ユーザーがローカルのtxtまたはcsvファイルを持っている場合、それはビジネスデータベースからエクスポートされたものか、他の手段で取得されたものかを問わない。データ処理、マイニング、および共作成アプリケーションにAntのビッグデータ分析ツールを使用する必要がある場合は、最初にローカルファイルをODPSにアップロードする、通常の小さなファイルはブラウザーを介してサーバーにアップロードされ、レイヤー転送を実行することで実現できますが、ファイルが10GBレベルまで非常に大きい場合は、この記事で説明する別の形式の技術的ソリューションについて考える必要がありますプログラム。

技術要件には、主に次の側面が含まれます。

  • 10Gレベルを超える超大容量のデータをサポート

  • 安定性:ネットワークの異常を除いて100%成功

  • 精度:データ損失なし、読み取りと書き込みの100%の精度

  • 効率:1Gファイル分レベル、10Gファイル時間レベル

  • 経験:リアルタイムの進行状況の認識、異常なネットワーク中断の送信の再開、カスタマイズされたキャラクターの特別な処理

ファイルアップロードの選択

ファイルをODPSにアップロードする基本的な考え方は、ファイルを転送領域にアップロードしてストレージに保存し、次にODPSに同期することです。ストレージメディアによれば、1つはアプリケーションサーバーディスクであり、もう1つは中間メディアです。OSSはAlibaba Cloudによって推奨されていますその大規模で安全な低コストのクラウドストレージサービスと豊富なAPIサポートにより、中間メディアの最初の選択肢となっています。OSSへのファイルのアップロードは、Web直接アップロードとSDKアップロードの2つのスキームに分かれています。したがって、次の3つのアップロードスキームがあります。詳細な利点と欠点は次のとおりです。

Antのテキストアップロード機能の進化中に、1番目と2番目のスキームの両方が実行されます。欠点は明らかです。上の表にあるように、ビジネスニーズを満たしていません。したがって、大きなファイルをアップロードするための最終的なスキームはスキーム3です。

全体計画

以下は、オプション3のプロセス全体の概略図です。

 

リクエストの手順は次のとおりです。

  1. ユーザーは、アプリケーションサーバーからアップロードポリシーとコールバック設定を取得します。

  2. アプリケーションサーバーはアップロードポリシーとコールバックを返します。

  3. ユーザーはファイルのアップロード要求を直接OSSに送信します。
         ファイルデータがアップロードされた後、OSSは、OSSがユーザーに応答を返す前に、ユーザーのコールバック設定に従ってユーザーのサーバーを要求します。アプリケーションサーバーが成功を返すと、ユーザーに成功を返し、アプリケーションサーバーが失敗を返すと、OSSもユーザーに失敗を返します。これにより、ユーザーのアップロードが成功し、アプリケーションサーバーが通知を受信します。

  4. アプリケーションサーバーはOSSに戻ります。

  5. OSSは、アプリケーションサーバーによって返されたコンテンツをユーザーに返します。

  6. バックグラウンド同期エンジンを起動して、ossからodpsへのデータ同期を実行します。

  7. 同期されたリアルタイムの進行状況がアプリケーションサーバーに返され、同時にユーザーに表示されます。

4つの  技術ソリューション

4.1  アップロード

OSSは、単純なアップロード、フォームのアップロード、再開可能なアップロードなど、豊富なSDKを提供します。サイズの大きなファイルによって提供されるアップロード機能には、再開可能なアップロード機能を使用することをお勧めします。大きなファイルを並列にアップロードしてフラグメント化できるという利点があります。並列処理機能、中間の一時停止も現在の場所からアップロードを続行できるため、ネットワーク環境への影響を最小限に抑えることができます。

4.2  ダウンロード

通常のダウンロード、ストリーミングダウンロード、再開可能なダウンロード、範囲ダウンロードなど、OSSファイルをダウンロードする方法も数多くあります。ローカルエリアに直接ダウンロードする場合は、再開可能なダウンロードも推奨されますが、ファイルをダウンロードするだけではありません。 OSSからODPSにデータを同期するためにファイルを読み取る代わりにローカルストレージ。中間ストレージがなく、直接読み取りと変更を行う一方で、一方でOSSストリーミング読み取りを使用し、他方でODPSトンネルアップロードで、マルチスレッドの読み取りと書き込みモードを使用します。同期レートを上げます。

4.3  2段階のデータ転送

ローカルからODPSへのファイルは2つのステージに分割できます。最初のステージでは、フロントエンドがローカルファイルをOSSにフラグメント化され、中断された転送でアップロードします。次の図に示すように、2番目のステージでは、バックエンドストリーミングの読み取りと書き込みがOSSからODPSにデータを同期します。

 

関連する技術的ポイント:

4.3.1  フロントエンド、安全にアップロードするためのSTSトークン付きのjs sdk

アップロードするファイルが大きい場合、multipartUploadインターフェースを介して複数の部分にアップロードできます。マルチパートアップロードの利点は、大きなリクエストが複数の小さなリクエストに分割されて実行されるため、一部のリクエストが失敗した場合、ファイル全体ではなく失敗したフラグメントのみを再アップロードする必要がないことです。一般に、100MBを超えるファイルの場合、フラグメントでアップロードする方法を使用することをお勧めします。アップロードがフラグメントで実行されるたびに、新しいOSSインスタンスを作成することをお勧めします。

Alibaba Cloudセグメントのアップロードプロセスは、主に次の3つのAPIを呼び出します

  1. InitiateMultipartUpload、断片化タスクを初期化するためのインターフェース。

  2. UploadPartは、個別のパーツアップロードインターフェイスです。

  3. CompleteMultipartUpload、セグメントのアップロードが完了した後のタスク完了インターフェース

一時的なアクセス認証情報は、Alibaba Cloud Security Token Service(STS)を介して認証を行う方法です。実装については、STS Java SDKを参照してください。一時的なアクセス資格情報のフローは次のとおりです。

  1. クライアントは、サーバーへの承認要求を開始します。サーバーは最初にクライアントの正当性を検証します。正当なクライアントの場合、サーバーは独自のAccessKeyを使用して、STSへの承認リクエストを開始します。詳細については、アクセス制御をご覧ください。

  2. 一時的な認証情報を取得した後、サーバーはクライアントに戻ります。

  3. クライアントは、取得した一時的な認証情報を使用して、OSSへのアップロードリクエストを開始します。リクエストの構造の詳細については、一時的な承認済みアクセスをご覧ください。クライアントは資格情報をアップロードするためにキャッシュし、資格情報が期限切れになるまでサーバーに新しい資格情報を要求できます。

4.3.2  バックエンド、マルチスレッドストリーミングの読み取りと書き込み

OSS側:ダウンロードするファイルが大きすぎる場合、または1回のダウンロードに時間がかかりすぎる場合は、マルチスレッドストリーミングをダウンロードして、ファイルのダウンロードが完了するまで、コンテンツの一部を一度に処理できます。
ODPS側:トンネルSDKはOSSストリーミングデータを直接書き込みます。完全なデータ書き込みプロセスには通常、次の手順が含まれます。
最初にデータを分割します。

  1. 各データブロックのブロックIDを指定します。つまり、openRecordWriter(id)を呼び出します。

  2. 次に、1つ以上のスレッドを使用してこれらのブロックを個別にアップロードします。ブロックのアップロードが失敗した後、ブロック全体を再送信する必要があります。

  3. すべてのブロックがアップロードされたら、検証のために正常にアップロードされたブロックIDリストをサーバーに提供します。つまり、
         ブロック管理、接続タイムアウトなどに関するサーバーの制限により、session.commit([1,2,3、...])を呼び出します。 、アップロードプロセスのロジックはより複雑になります。アップロードプロセスを簡略化するために、SDKはより高度なRecordWriter—TunnelBufferWriterを提供しています。

実現プロセスと圧力測定

たくさんあります。私が書いたこの記事を参照してください:http : //blog.ncmem.com/wordpress/2019/08/09/%e5%a4%a7%e6%96%87%e4%bb%b6% e4%b8%8a%e4%bc%a0%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88 /

まとめ

実際のテスト結果は、この記事のアップロードスキームがセクション1の技術要件を次のように満たしていることを示しています。

  • 大量のデータをサポートし、10Gレベルを超える圧力はありません。主な理由は、フロントエンドが断片化割り当てをアップロードすることです(最大10000個、1個あたり最大100G)。現在、1個あたり1Mが10Gの需要を満たすように設定されています。

  • 安定性:実際のネットワークにはほとんど異常がなく、ファイルの内容は通常の状態で100%成功しています。

  • 精度:測定データの損失はなく、読み取りと書き込みの精度は100%です。

  • 効率:オフィスのネットワーク帯域幅が1.5M / s、1Gファイル分レベル、10Gファイル時間レベルの場合、実際の速度はクライアントの現在のネットワーク帯域幅によって異なります。

  • エクスペリエンス:リアルタイムの進行状況の認識、異常なネットワーク中断の再開可能な送信、カスタマイズされたキャラクターの特殊処理などの高度な機能により、ユーザーエクスペリエンスを向上させることができます。


グループに参加して一緒に議論することを歓迎します:374992201

 

 

おすすめ

転載: blog.csdn.net/weixin_45525177/article/details/108513636