NHN Cloud Meetup 編集部
File Crafterサービス紹介
2024.03.29
154
大容量ファイルアップロード機能の問題点
ほとんどのWebサービス開発者は、ファイルアップロード機能を提供した経験があるはずです。 Webサービスで頻繁に使用される機能なので、Webサービスフレームワークが提供する便利な機能を利用して、多少面倒ではありますが、大きな困難を経験せずに機能を実装できます。
しかし、実際に大きな問題は機能提供後に発生します。あるユーザーが大容量のExcelファイル📊をアップロードすると、サーバーではExcelファイルを読み込んで解凍してレコード単位で処理する作業が実行されます。この過程でCPUやメモリなどのシステムリソースを占有することになり、ネットワークIOやディスクIOも発生します。当然、ファイルのサイズが大きければ大きいほど、要求されるシステムリソースのサイズも大きくなります。これにより、メモリ不足の例外が発生したり、サービスがユーザーのリクエストに応答しない状態に陥ることもあります。大容量ファイルのアップロードを同時に利用するユーザーが多い場合、単純にサービスレスポンスが遅延するレベルではなく、障害につながる可能性もあります。
開発者が気をつけなければならないこと
このような問題を解決するためには、Webサービス開発者が気をつけなければならないことがたくさんあります。メモリを少しずつしか使えないようにストリーム方式でファイルを処理する必要があり、CPUを占有しないようにファイル処理作業の優先順位を下げる必要があります。 作業完了まで長い時間がかかる場合があるので、作業状況をユーザーに知らせる機能も提供する必要があります。作業が長くなりすぎるとタイムアウトが発生するので、サービスの様々な階層でタイムアウトも余裕を持って調整する必要があります。 このような面倒な作業は、大容量ファイルの処理を同期方式で、Webサービス内部で処理しようとするために発生するものです。
File Crafter
NHN Cloudではこのような複雑な大容量ファイルの処理過程をFile Crafterというサービスで提供しています。File Crafterサービスを通じて、大容量ファイルを処理する過程をビジネスロジックを担当する顧客のサービスから分離し、非同期で処理することで、顧客のサービスがビジネスロジックだけに集中できるようにします。
File Crafterは大容量のExcel、CSV、JSONファイルを読み込んだり、作成する機能を提供しています。顧客のサービスに負荷を与えないように非同期で一定量のレコード単位で処理してくれます。
主な機能
Import
エンドユーザーがアップロードした大容量ファイルを一定単位で読み込み、顧客のサービスにアップロードしてくれる機能を提供します。File CrafterにImport開始リクエストを送りながらファイルを一緒に渡すと、1,000件ずつ顧客が用意した「Import Callback API」🔗にPOST methodを利用してアップロードします。このリクエストを繰り返して全データをアップロードします。詳しいプロセスは次のように図式化することができます。
お客様のWebサービスは大容量ファイルの処理を気にせず、File Crafterが処理したデータを一定単位で受け取って内部で使うだけです。この過程でメモリ不足や過剰なCPU占有を心配する必要がありません。
Validate
Import過程でデータ検証(validation)が必要な場合があるため、選択的な機能として提供しています。顧客のビジネスロジックによって個別に処理する必要があるので、Importと同じようにcallback API🔗が必要です。
下記の図で基本的なImport機能のプロセスと比較してみると、validateステップが先に行われていることが確認できます。
Validateステップが完了したら、検証(validation)の成功✅と失敗❌かどうかによって成功レポートと失敗レポートをそれぞれ提供します。これを利用して成功したデータだけImportするようにすることもできますし、失敗したデータを持って顧客のサービス内で再抽出する作業の参考にすることもできます。
Export
顧客のサービスに保存されているデータを大容量ファイル(Excel/CSV/JSON)にExportする機能も提供します。
顧客はFile Crafterがデータを照会できるように”Export Callback API”🔗を提供する必要があります。 このAPIを通じて一定件数単位でデータを照会し、ExcelやCSV、JSONなどのファイルを作成します。
最終成果物ファイルは顧客が保有しているS3互換ストレージに保存します。NHN CloudのObject Storageを利用することもできますし、外部クラウドのS3互換ストレージを利用することもできます。
Export Callback APIに過負荷をかけないように、一定単位の照会(pagination)機能を活用します。リソース効率的なAPI機能を提供するため、Export Callback APIにpagination機能を実装しておくことを推奨します。
便利な機能
パスワード🔒
Importする時、Excelファイルにパスワードがかかっている場合、ユーザー入力を受けて復号した後に処理する機能を提供しており、逆にExportする時、ユーザーが指定したパスワードを利用して暗号化する機能も提供しています。
Excelファイルの複数シート
Excelファイルは複数シートで構成することもできますが、追加パラメータを指定することで、シートごとに分離して保存する機能も提供しています。
Excelファイルの分割保存
Excelファイルは最大100万個程度のレコードを含めることができます。 そのため、これ以上のデータを持つ場合には、複数のExcelファイルに分割
して保存する必要があります。 分割保存のための便利な機能を提供しています。 必ず一つのファイルにExportする必要がある場合は、Excelの代わりにCSVファイルを使用することを検討してください。
参照文書
詳細はFile Crafterガイド📖を参照してください。
今後の予定
File CrafterWebコンソールを用いた便利な機能を拡充する計画です。 また、お客様のデータをより安全に保護する機能を継続的に強化する予定です。 既に作成されているCallback APIをそのまま使用できるようにハードコードされているパラメータをユーザー定義パラメータとして使用できるように利便性を高める予定です。
お客様がビジネスロジック開発に集中できるように、NHN Cloudはこのようなヘルパー(helper)サービスを安定的に提供いたします。