web-dev-qa-db-ja.com

モバイルデバイスからAmazon S3アーキテクチャにファイルをアップロードする

REST開発したAPIと通信するiOSアプリを持っています。画像ファイルと音声ファイルの保存にAmazon S3を使用しています。現在、直接ファイルをアップロード/ダウンロードできますモバイルアプリ(クライアント)。現在、小さなファイル(15-20 kB)のアップロード/ダウンロードの速度、およびAmazon S3などの問題が15分を超えるタイムスキューを許可しない(つまり、お客様のタイムゾーンまたは日時の構成が正しくない場合、S3からこれらのファイルをアップロードまたはダウンロードできません。

現在、これらの問題に対するアーキテクチャ上の決定に直面しています。つまり、S3から自分のAPIにファイルをアップロード/ダウンロードし、一時的に保存して、モバイルクライアントにアップロード/ダウンロードします。つまり、これから変更します。

S3 <----> iOS <----> REST API

これに:

S3 <----> REST API <----> iOS

利点:

  • すべてのデータはAPIによって処理および処理されます
  • クライアントとストレージ(S3)が同期していない場合は問題ありません(時間のずれ)
  • 顧客の電話は1つのWebサービスのみと通信します

短所:

  • すべてのファイル転送は双方向プロセスです
  • APIのWebトラフィックが大幅に増加します
  • データ/パケット損失の可能性が高まるため、プロセス全体を繰り返す必要がある

何が最良の選択でしょうか?そのままにするか、独自のAPIを使用してファイル転送の開発を開始しますか?

4
flizana

小さなファイルのダウンロードとアップロードの速度は、いくつかのファイルをアーカイブに入れることで簡単に回避できます(ファイルを圧縮する必要がない場合は、最終的にレベル0圧縮を使用します(JPEGファイルなど)。ユーザーが何百ものファイルをアップロードすると、2〜3個の大きなファイルになります。ユーザーが1つまたは2つのファイルのみをアップロードする必要がある場合、速度はそれほど重要ではありません。

不適切な日付と時刻の構成は、ユーザーの問題です(インターネットに接続されているほぼすべてのモバイルデバイスで同期が自動的に行われるべきではありませんか?)アプリケーションは、NIST ITSを使用してデバイスの時刻が正しいかどうかを確認できます。何らかの理由でこれが不可能な場合は、独自のREST APIを使用して、時刻が正しいかどうかを確認してください。時刻が正しくない場合は、時刻まで同期できないことをユーザーに通知してくださいアプリがデバイスの時刻を自動的に修正することを望んでいるかどうかを尋ねます。

アプリにAmazonのS3と直接やり取りさせるか、REST APIを仲介者として使用するかを選択することは、主にこれらの要因に依存します。

  • AmazonのAPIキーの所有者は誰ですか。 S3の使用量をユーザーに支払う準備ができていますか、それともユーザーが直接支払うことを好みますか?最初のケースでは、仲介者APIが理にかなっています。 2番目のケースでは、S3に直接接続します。

  • プライバシー、データの機密性、法的問題。サーバーを介してデータが移行している場合は、データにアクセスできることを意味し、youがS3にデータをアップロードしていることも意味します。

    最初の点はデータが機密である場合に問題があり、Amazonの代わりにサーバーでデータが終了することを顧客に適切に通知されない場合、最終的に訴えられる可能性があります(サーバーが稼働している場合、法的に言えば、さらに興味深いかもしれません) Amazonとは異なる国)。

    2番目の点は、ユーザーがAmazonのポリシーに違反するコンテンツをアップロードしている場合に問題があります。誰かが子供のポルノをアップロードしていると想像してください。アマゾンの場合、あなたがそれをアップロードしていたので、あなたが責任者になります。

  • 帯域幅。サーバーの帯域幅が高価な場合(そして、それがなぜそうならないのでしょうか?)、Amazonに支払うよりもはるかに多くの帯域幅を支払うことになります。さらに重要なのは、最初にファイルを受信して​​から送信するため、ファイルの実際のサイズの2倍を支払うことです。

1