NRIネットコム Blog

NRIネットコム社員が様々な視点で、日々の気づきやナレッジを発信するメディアです

Global AcceleratorとCloudFrontの違いが見えてきたら解るCloudFrontの活用方法

本記事は  初夏のAWSアワードエンジニア祭り  2日目の記事です。
🍦  1日目  ▶▶ 本記事 ▶▶  3日目  💻

 2019年より務めていたAWS Ambassadorsを、退任することになりました。Ambassadorであったお陰で、貴重な体験をさせて頂くとともに、沢山の人と交流できたことは本当に感謝しかないです。ありがとうございます。そして、組織内に後任が誕生し、引退できる状態になったのも喜ばしいかぎりです。ただ、Top Engineersとしては継続で選んでいただいているので、その名に恥じぬようにしっかりと実績を残していきたいです。ということで、NRIネットコムの初夏のAWSアワードエンジニア祭りの2日目です。

 某書籍の執筆で、AWS Global Accelerator(Global Accelerator)について解説していました。紙面の都合上、1ページくらいにまとめる必要があったのですが、これがなかなかに難しいです。概要や機能を伝えるのは簡単ですが、なぜそれが必要なのか、Amazon CloudFront(CloudFront)とのユースケースの違いは何かを簡潔に説明するのに難儀しました。そちらの方は上手く成功したのかは気になるところですが、ブログで字数を気にすることなく解説してみようと思います。Global Acceleratorを理解すると、恐らくあまり知られていないCloudFrontの効用についても気が付きます。その辺りの解説してみます。

AWS Global Accelerator(Global Accelerator)とは?

 AWS Global Accelerator(Global Accelerator)は、ネットワークパフォーマンスを最適化するサービスです。インターネットのトラフィックをAWSが保有するグローバルネットワークを通じて効率的にルーティングすることで、通信のレイテンシーの改善や、アプリケーションの保護などが可能となります。
 一文で説明すると上記の説明に尽きるのですが、これだけだと70%くらいの人が???となると思います。AWSが保有するグローバルネットワークを利用すると、なぜインターネットのトラフィックが改善するのでしょうか?私も初見でこの説明を聞かされたとしても、サッパリわかりません。理解を助けるために、まず2つの前提について説明します。

AWSのリージョン間の接続はAWSのプライベートネットワークによって結ばれている

 まず前提としてAWSのリージョンは、中国リージョンを除く各リージョンの間はAWSのプライベートネットワークで接続されています。つまり、AWSのリージョンからリージョンの通信が、インターネットを経由することなくAWSが管理するネットワークを通るということです。なお、集合体の事をAWSのグローバルネットワークと読んでいます。これが、先ほどの「インターネットのトラフィックをAWSが保有するグローバルネットワークを通じて」が言及している部分になります。

インターネット接続は、レイテンシー観点で最適化されている訳ではない

 つづいてインターネット接続に関する解説です。一般的にインターネットの通信は、レイテンシー観点で常に最適な経路を選ばれる訳ではありません。インターネットの接続とは、インターネットサービスプロバイダ(ISP)同士のリレーによって成り立っています。リレーの方式は、主にピア接続とトランジット接続の2つがあります。詳しい説明は省きますが、どのISP同士もつながっている訳ではありません。よって、A地点からB地点の通信でも、実は物凄く遠回りしている可能性があります。これが、「効率的にルーティングされていない」ということです。

Global Acceleratorによる通信のレイテンシーの改善

 ここまでの説明を組み合わせると、Global Acceleratorを使うことによって通信が改善する理屈が説明できるようになります。Global Acceleratorは、世界各地にアクセスポイントを提供します。ローカルISPから最寄りのアクセスポイントに接続すると、その後の通信はAWSのグローバルネットワークを通信します。AWSのグローバルネットワークは、AWSの各リージョンを効率的に接続しているので、インターネット接続のように迂回せず、効率的にルーティングが可能です。結果、ネットワークのレイテンシーを最小化できます。図にすると、次のような形となります。

 この辺りの事情をもう少し詳しく知りたい方は、こちらのブログも併せてご覧ください。また、Global Acceleratorは、他にも機能やメリットがありますが、今回は割愛します。

tech.nri-net.com

CloudFrontとGlobal Acceleratorの違い

 Global Acceleratorの効果について、理解できたでしょうか?そこで通信の効率化であれば、CloudFrontを使えばよいじゃないかと思う方もいると思います。それも正解です。ただし、CloudFrontとGlobal Acceleratorは、通信の効率化の考え方が違います。CloudFrontはキャッシュを使い、できるだけ近くからコンテンツを返すことで通信する距離自体を最小化します。そのため一番効果を発揮するのは、画像などキャッシュ可能な静的コンテンツです。
 これに対して、Global Acceleratorはあくまでオリジンに必ずアクセスさせる必要があるという前提で、その通信経路の最適化によるレイテンシーを小さくするサービスです。そのため、動的なサイトなどに効果的です。またCloudFrontの対応プロトコルがHTTP/Sなのに対して、Global AcceleratorはTCP/UDPと対応プロトコルが広くなっています。そのため、Webサイト以外にもレイテンシー低減の効果を発揮できます。

 Global AcceleratorとCloudFrontの違いをまとめると、上の図のようになります。構成要素的には、ほぼ同じということに気がつくでしょう。 その分、AWSとしてもGlobal Acceleratorの存在が解りにくいものと自覚しているのか、効果を実感できるテストサイトを用意しています。

speedtest.globalaccelerator.aws

 ここでは、AWSが用意したテスト用のサイトに対して、自分の回線で直接行く場合とGlobal Acceleratorを経由する場合の比較ができるようになっています。

 埼玉から試してみた結果、地理的に遠いところや、ネットワーク的に迂回しているのだろうな思われるリージョンについては、大きな効果がありました。フランクフルトリージョンなどは、直接行くと3秒のところがGlobal Accelerator経由だと1.3秒と大幅な改善が見られました。一方で、東京リージョンなど近いところは、削減率という意味では効果があるものの絶対的な秒数では効果が小さいというのも見て取れます。名前の通り、グローバルで使うということですね。

動的コンテンツに対してのCloudFrontの効用

 ここまで読んで、勘の良い人は気がつくと思います。CloudFrontもグローバルネットワークを通っているので、例えキャッシュが無かったとしてもレイテンシーの低減効果があるんじゃないかと?答えは、実はそのとおりです。しかし、どのような条件でも無条件で速くなる訳ではありません。この辺りは長くなったので、次回検証編として掲載します。

まとめ

 Global AcceleratorとCloudFrontは、兄弟のようなサービスです。バックエンドのアセットはほぼ同じだと推測できますが、それを使って違うユースケースを解決しているという事実は面白いです。こういった柔軟な発想で新規のサービスが出てくるところが素晴らしいですね。
 CloudFrontを使って動的サイトで改善するケースという宿題も残ったので、近いうちにまた続編を書こうと思います。

執筆者 佐々木拓郎

Japan AWS Ambassadors 2019-2022
ワイン飲みながら技術書を書くのが趣味なおじさんです

Twitter:https://twitter.com/dkfj

Facebook:https://www.facebook.com/takuro.sasaki

個人ブログ:https://blog.takuros.net/

Amazon著者ページ:Amazon.co.jp:佐々木 拓郎:作品一覧、著者略歴

Booth:https://takuros.booth.pm/

コーポレートサイト:https://www.nri-net.com/

ソリューションサイト:https://cloud.nri-net.com/