[レポート] AWSサービスを通じて様々なコンテンツを素早く送信する(入門) #AWSSummitOnlineKorea

本ポストはAWS Summit Online Koreaに参加して聞いたセッション「AWSサービスを通じて様々なコンテンツを素早く伝送する」についてのレポートです。 また、CloudFrontとGlobal Acceleratorの機能と特性を紹介し、これによってそれぞれウェブコンテンツとnon-HTTPコンテンツを伝送する方法をご紹介します。
2020.05.21

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

初めに

こんにちは! 新卒エンジニアのホンギです。

韓国で2020.05.13(水)、AWS Summit Online Koreaが開催されました。
アマゾンドットコムのCTOであるDr. Werner Vogelsの基調演説を皮切りに、AWSクラウド活用の基礎について紹介するAWSome Dayや様々なセッションでAWS技術を活用した好事例などを聞くことができます。
参加したセッションの内容を韓国語で投稿しました。この内容を皆さんとも共有したいと思い、日本語で書いてみました。

本ポストでは、技術トラック1番のCompute、Storage、Networking/CDNパートである「AWSサービスを通じて様々なコンテンツを素早く送信する(入門)」セッションをポスティングしたいと思います。 ポストで使用された当該セッションの資料はPDF資料(韓国語)をお読みください!

よろしくお願いします!

Speaker

  • Joo Yoonhong - Architect of Solutions, AWS

AWSのEdgeサービスを利用して様々なコンテンツを素早く伝送する方法

Edgeサービスとは?

AWS上に構築・運営しているビジネスアプリまたはウェブサイトを エンドユーザーに安全かつ迅速に伝送する機能を提供するサービス

つまり、ユーザの観点で「サービスをいかに迅速かつ安全に利用できるか?」を考慮したサービスです。

なぜ速い伝送が重要なのか

様々なサービス、ソフトウェア、メッセンジャーなどのコンテンツは、素早く送信されなければならず、そうでない場合ビジネスに悪影響を及ぼします。

  • 遅いデータ転送による影響
    • SEO : ウェブサイトの場合、コンテンツの配信が遅いと検索露出に影響を受ける。
    • E-Commerce : ページローディングが長引くと購入者の離脱率が高くなる。
    • Live Stream : バッファリングが発生すると、ユーザーの経験に悪影響を及ぼす。

コンテンツ配信が遅い理由

単にアプリケーションにアクセスしてコンテンツを受け取るのではなく、実際には複数のネットワークを経てAWSのリージョンに到着し
1
リクエストと応答のネットワークは同じでないことがあるからです。 2

AWS Edgeサービスはどのようにコンテンツを配信するのか?

近くのエッジロケーションにつながり、AWSグローバルネットワークを通じてAWSリージョンまで行ってくるため、インターネットの複数のネットワークホップを経ることがないため、素早くコンテンツを伝送することができます。
3

一般的に私たちがアプリケーションにアクセスする際、AWSリージョンのインターネットにアクセスすることになるが、 AWSグローバルネットワークは、100Gbpsの光ケーブルを多重に接続しているため、性能と可用性が高いです。
AWSグローバルネットワーク

(AWSグローバルネットワーク)

Edgeサービスを利用すると、近くのエッジロケーションに先に接続し、上記のAWSネットワークを利用することになります。

エッジロケーションの主な特徴

  • 現在216のエッジロケーションが存在
  • 11リージョンエッジキャッシュ
  • 42ヶ国84都市に位置
  • 年間50%以上拡張されている
  • ユーザーとより近い場所で素早くサービスを提供するため、複数のISPとネットワーク接続を結んでいる

エッジロケーションで動作するサービス

代表サービス

(代表的なサービス)

様々なサービスがありますが、今回の講演ではAmazon CloudFrontAWS Global Acceleratorについてご紹介します。

共通点:AWS専用ネットワークを利用して、コンテンツを素早くやり取りすることができます。

Amazon CloudFrontとは?

Cloud native Content Delivery Network(CDN)

  • 動作流れ
    1. ユーザーに最適のエッジロケーションを探す。( DNSを通じて接続 )
      1. 自分が使うISPのDNSに質疑し、これらの質疑は連結されCloudFrontのNameServerに伝達される。
      2. CloudFront Name Serverでは、DNSクエリを見て、当該ネットワークに最も性能の良いPOPを探して接続し、
      3. 最適なエッジロケーションIPをユーザーに回答
      4. ユーザーは応答したIPアドレスを通じて実際にHTTP通信をするようになる。 6
    2. HTTPでサポートするキャッシュ機能を利用して静的なコンテンツをすぐに応答

    3. APIや個人情報などの動的なコンテンツの場合、AWSグローバルネットワークを通じて素早く伝送
  • メリット
    他のAWSサービスと簡単に連動でき、AWSリージョンData Transfer Outの費用が免除されるため、コスト削減効果を得ることができます。

キャッシュを利用した応答

  • 3階層(layer)構造
    • L1 : 頻繁に要請されるコンテンツ処理。 hotコンテンツキャッシュlayerにて応答。見つからない場合には
    • L2 : 型キャッシュ階層で探し、ここでも見つからない場合
    • L3 : L3階層は原本まで接続を維持(TCP Connection)しているため、速やかに回答 7

動的コンテンツの場合には?

  • L1からキャッシュ階層をスキップしてL3に直接接続します。
  • L3からOriginへ接続 ( ユーザが一度接続したり、何度接続してもオーバーヘッドを避けて最適化された通信ができる )

CloudFrontを使った事例(Tinder)

使用する前(US Region)

8
グローバルユーザーの増加に伴い、ネットワークの遅延が発生

すべてのRequestをCloudFrontで配信するよう構成した後

9
TLS handshakeの遅延が大幅に改善され、ユーザー経験が高まる結果に繋がりました。( API性能が最大45%改善 )

CloudFron構築例

10
上記のように、1つの配布構成をすれば、動的/静的なリソースをすべて転送することができます。
HTTPをサポートするAWSのサービスやオンプレミスのサーバも、CloudFrontの原本となることができます。

CloudFrontの設定

11

  • 動的コンテンツの場合 : Cache Based on Selected Request Headersの設定ををすることで、当該URLでは常にキャッシュをせず、Originに行って加速された応答を読み込ませることができます。
  • 静的コンテンツの場合 : 同じ設定でNoneに設定すると、そのコンテンツはキャッシュが可能になります。

AWS Global Acceleratorとは?

固定されたIPとトラフィック制御

  • 固定された2つのIPを使用してエッジロケーションに接続できる。
  • 多重リージョン構成で最適なリージョンにトラフィックを自動連結してくれる。 ( グローバルロードベランス機能とも呼ばれる )
  • AWSグローバルネットワークを通じてコンテンツを素早く伝送できる。

CloudFrontとは異なる点

  • 上位プロトコルとは無関係にTCP/UDP すなわち、L3・L4のプロトコルで加速( HTTP以外のプロトコルでも加速可能 )
  • キャッシュ機能がない

固定されたIPが近いロケーションに繋がる過程( Anycastを利用 )

12

  1. エッジロケーションは物理的に複数箇所に分かれており、接続する際に同一のIPで接続することになります。
  2. ユーザーは自分が接続しているネットワークを通じて近くのエッジロケーションに自動でアクセスし、
  3. このユーザーに近いAWSリージョンにトラフィックを接続します。

トラフィックを細かく制御したいとき( ダイヤル機能 )

13

  • もし特定のリジョンがトラフィックを受けられない状況や、メンテナンスをしなければならないとき、ダイヤルでトラフィックを調整することができます。
  • ダイヤルを0%に設定すると、該当リージョンに近いユーザーでもトラフィックを受けないようにできます。 例)アメリカにいるユーザーでもダイヤル機能で東京リージョンに接続させることができます。

他のリジョンに行かせると速度が低下しないか?

  • グローバルネットワークを通じて接続するため、トラフィック加速効果を受けることができます。
  • また、問題発生時、Health Check機能により障害が発生しても自動的にトラフィックを制御してくれるため、ユーザーに与える影響を最小化することができます。

Global Acceleratorの設定

  1. Listener設定 - ポートとプロトコルを設定  14
  2. Endpoint Group設定 - どんなリージョンを通じてListenerのトラフィックを受けるか設定( 多重リージョン時、追加可能 )
    15
  3. Endpoint登録 - 実際のリージョン内にあるリソース(エンドポイント)を登録( Health Checkも登録できる )
    16

CloudFrontとGlobal Acceleratorの比較

CloudFront Global Accelerator
特徴 HTTP、HTTPSコンテンツのキャッシュ·加速伝送に最適 TCP/UDP上のすべてのトラフィックに対して加速伝送
アクセス方式 DNSによるリアルタイムに最適なロケーションを提供 固定された2つのAnycast IPで自動的にアクセス
多重リージョン支援 多重リージョンおよびオンプレミス原本対応 多重リージョン対応
原本のHealth Check Route53と連動すれば可能 可能
課金 HTTP request、Byte課金( オリジンdata transfer out費用の免除 ) Byte課金( オリジンdata transfer out費用に追加 )

速度を比べたら?

17

  • 速度自体は大きな差はありません。しかしオリジンよりは早くて安定的です。
  • CloudFrontのキャッシュ機能を使用すると、他の機能より優れた速度を誇ります。(キャッシュから取り出して応答するため)
  • 逆に考えると、サービスをする時、キャッシュが可能なコンテンツを最大限探してキャッシングをする戦略が重要です!

まとめ

  1. コンテンツ配信の遅れはビジネスやユーザ経験に否定的な影響を与える。
  2. HTTP基盤のアプリケーションは、Amazon CloudFrontにより性能向上が可能
  3. Non-HTTPアプリケーションのような場合には、Global Acceleratorに性能を向上させることができる。
  4. Global Acceleratorはリージョン間距離に比例して効率が出る。

参考

AWS CloudFront

AWS Global Accelerator