S3を直接使用するか、S3プラスCloudFrontを使用するかを判断する方法


Thu 17 August 2017 作成者: Arnaud Kervern

ファイルをNuxeo Platformに保存してAWSクラウドソリューションのメリットをすべて得るには、Nuxeo Platformに格納されているブロブにアクセスする方法を決定しなければならない時があります。そして、それは常にチャレンジになります。効率性を維持しつつ、最高のパフォーマンスを引き出したい時は特にそうです。Amazon S3かAzureいずれかで最良のソリューションを見つけてから、CDNの使用について考えるのは、それほど容易なことではありません。そこで、この記事では、AWSベースのソリューションについて説明して、S3を直接使用するか、CloudFrontでS3バケットに転送するかを判断する際に役立つ情報を提供します。

これらのオプションの価格面については説明しませんが、CloudFrontを使用してデータを送信するほうがS3、つまり、CDNが設計上対応できるものより安価であることは想定できます。

しばらく前に、ブロブのダウンロード速度を向上させる方法について話しました。Nuxeo Platformを簡単に設定してS3を直接使用して署名付きURLを生成するか、またはS3を使用して署名付きURLを生成する前にCloudFrontオブジェクトのURLを取得できることが分かりました。

次のシナリオを考えてみましょう。

Edgeロケーションに顧客がいることを知っています。CloudFrontはAWSのCDNだと分かっています。速度を上げる必要も分かっています。しかし、S3はリージョンレプリケートされていると考えなければなりませんが、利用できるEdgeロケーションのCloudFrontエンドポイントが十分にないことは間違いありません。

スタイルシート、GIF、JPEG、.jsなど、CDNで複数の典型的なWebアセットを取得することで得られる利益を比較しているわけではありません。これはNuxeo Platformが設計上対応できるものではありません(可能性はあるものの、ご存知のように、作業量を増やせば、処理量が少なくなることもあります。私たちは、一度に1つずつ取り込む大きなデジタル資産を保管しているのです)。

たとえば、1つの要求で取得できるものです(1つの要求は1回のダウンロードを意味します。平均的なアセットは1回のダウンロードで、通常は約5MBで、サイズがそれより小さくなることはまれであることに注意してください)。

比較してみましょう!社内の最高の製品所有者の一人としてあなたがNuxeo Platformで2種類の設定のいずれかを決定しなければならない日を想像してみてください。

  • S3にブロブを格納し、S3に直接アクセスしてアセットをダウンロードするように設定する。
  • S3の代わりにCloudFrontにリダイレクトします。これはS3のディストリビューションで設定され、セキュリティも備えています。

その日はこんな感じになるでしょう。

  • S3の前にCloudFrontを使いたいと思う。最適の選択 - 当社の最後のブログでスピードアップする方法を知っていますが、スクラムチームにこれを正当化する必要があります。そのことを考えると、迷いが出てきます。
  • あなたは、優先順位付けの時にS3とCloudFront + S3のどちらがよいのか躊躇し、パフォーマンスに関する記事をブログからブログへ読み漁ることになります。(あなたがブログ読書のウサインボルトならば、1時間... でも、私たちと同じ普通の人間ならば、3時間かかります!)
  • あなたはチームにそのアイデアを説明し、チームもそれについて話し合いたいでしょう。チームメンバーは繰り返し、「でも、どうして?なぜCloudFrontを使うのか?」と聞き返してくるでしょう。(この議論は10分は続くでしょう。)
  • 最終的にチームは同意し、シニア開発者はあなたの「カンバン」の「進行中」の列にそのタスクを移します - やりました! - (5秒)
  • その後、開発チームはタスクを開始する前に休憩をとります(コーヒーの場合は10分、食事が必要な場合はそれ以上の時間がかかります)。
  • 開発者は、自分が何をしなければならないかをよく分かっています。そうです、マニュアルを読む必要はないのです。(0秒)
  • 開発者は、保護されたURLを必要とする場合、CloudFrontキーを取得するようにAWS管理者に依頼します。これは、AWSルートアカウントのみがNuxeo Platformから署名済みURLを生成するために必要なキーペアを作成できるからです。(2分)
  • それから、AWS管理者がかなりの間ログインしていない場合、その管理者は、ログインするためにルートのMFAキーを取得し直します。これは、安全を確保するためにキーの設定を行うためです。(20分)
  • 最後に、AWS管理者が秘密キーを生成し、開発者と共有します(秘密キーの管理については、開発者に依頼します)。(理論的には、45分ですが、おそらくもっと時間がかかるでしょう)
  • 最終的に、開発者はS3バケットを作成し、Nuxeo Platformのデフォルトブロブストレージとして設定することができます(30分以内で、とても簡単です)。
  • 開発者はCloudFrontのキーペアの保存方法、プロダクション環境での使用方法を見つけようとします。そうするためには、展開スクリプトを変更しなければなりませんでした。スクリプトを安全に確保し、主要ソースリポジトリに格納しないようにするためです。(間違いなく、2時間)
  • そして、展開の内容を変更すると、CIチェーンが破損します。開発者はそれを修正しなければなりません(1時間、おそらくJenkinsの調子が悪い場合にはもっとかかるでしょう!)
  • 最終的に、タスクが完了しました。

所要時間:359分5秒、秒単位で、21,545秒

一方、作業を単純なものにしたいと思って、リンクに直接リダイレクトされたダウンロード要求を持つ最小限のS3を試してみたいとしましょう「(nuxeo.s3storage.directdownload = true)」。

  • あなた(PO)はタスクの優先順位付けを行います。(30秒)
  • あなたはチームにタスクを次のように説明します。「特に、S3がCloudFrontほど多くのロケーションではないが世界中のデータセンターでブロブを複製しているので、十分ですが、当面はこれでいいのではないかと思います。」(2分)
  • 開発者は、タスクを「進行中」の列に移動します。やりました!(5秒)
  • 開発者はタスクを開始する前に休憩をとります。(10分)
  • 最終的に、開発者はS3バケットを作成し、Nuxeo Platformのデフォルトブロブストレージとして設定することができます(30分以内で、とても簡単です)。
  • 最後に、タスクが完了しました。

所要時間:42分35秒、秒単位で、2,555秒

したがって、18,990秒、およそ316分、つまり、これらの2種類の設定には5時間以上の違いがあるのです。

S3は設定時間が短くなりますが、CloudFrontを併用すると、速度は向上します。

結果が私のロケーションや私が制御できない他のダークネットワークの問題に関連しているので、私は実際のベンチマークを行っていません。しかし、S3と比較して、Cloudfront + S3では、リクエストあたり100ミリ秒の効果的な利益(非常に大きな利益)が得られていることを想像してください。

つまり、この特定の部分の設定に時間をかける前にCloudFrontから189,900ダウンロードが必要になります。これには、以下が含まれます。

  • AWSアカウントのルートアクセスを処理する。
  • Nuxeo Platformから署名済みURLを取得するために、CloudFrontキーペアを生成する。
  • 開発環境からプロダクション環境への機密ファイル(キーペア)を処理する。

... S3を直接使用する代わりに。このダウンロード量は、ターゲットの使用状況や予想されるアクティブなユーザーの数に応じて大きくなる場合もあります。

これらの数字を念頭に置いておきましょう。正しい選択を行うことによって、少なくとも1時間は節約できます。今回の比較で強調した選択肢では特にそうです。

AWSの設定を大いに活用してください!


タグ付き: Nuxeo Platform, AWS, How to