ホームページ  >  記事  >  バックエンド開発  >  リソースを不足させることなく S3 ファイルのダウンロードを処理する

リソースを不足させることなく S3 ファイルのダウンロードを処理する

WBOY
WBOY転載
2024-02-10 19:36:09903ブラウズ

处理 S3 文件下载而不耗尽资源

php エディタ Xinyi は、サーバー リソースの枯渇を避けるために S3 ファイルのダウンロードを処理する効率的な方法を紹介します。 S3 は Amazon が提供するスケーラブルなクラウド ストレージ サービスですが、大きなファイルのダウンロードを処理する場合、従来のダウンロード方法ではサーバー リソースが枯渇する可能性があります。この記事では、S3 ファイルのダウンロードを効果的に処理し、チャンク ダウンロードとストリーミングを通じてサーバーのパフォーマンスとユーザー エクスペリエンスを向上させる PHP ベースのソリューションを紹介します。この方法について一緒に学びましょう!

質問内容

S3で複数のファイルタイプをアップロードおよびダウンロードできるgo-ginアプリケーションを持っています。

s3 にアップロードする前のすべてのファイルは、AWS s3cryptoclient、AES GCM、および KMS のキーを使用して暗号化されます。したがって、s3 バケットに関する限り、すべてがバイナリです。

getObject の SDK コマンドを使用してファイルをサーバーにダウンロードし、復号化してから、io.write(tempfile) を使用してこのファイルをクライアントに提供してダウンロードできます。

ここでの問題は、S3 にサイズ 10 GB のファイルが含まれており、サーバーには毎日複数のユーザーがアクセスすることです。これまで見てきたように、16 GB の RAM を搭載したサーバーに一時ファイルを書き込むとメモリがすぐに使い果たされる可能性がありますが、そのようなサーバーの実行コストにも注意が必要です。

ボトルネックは、ファイルを提供する前に復号化する必要があることです。このユースケースでは、S3 署名付き URL で十分ですが、クライアントによって暗号化が行われない限り、S3 署名付き URL によって復号化は提供されません。私たちのケースでは AWS が暗号化を処理しているため、このソリューションは実現できません。

go-gin/NGINX を使用してクライアントに直接ファイルを書き込むことができる、この問題を解決するためのヒントや考えられる使用例を持っている人はいますか。

現在のユーザーによるファイルダウンロードの処理

リーリー

}

回避策

1 つのオプションは、オブジェクトを応答本文としてクライアントに直接書き込むことです。

リーリー

以上がリソースを不足させることなく S3 ファイルのダウンロードを処理するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。