[レポート]AWS Global Acceleratorを使用してアプリケーションのパフォーマンスを向上 #AWSreInvent
ゲームソリューション部の えがわ です。
AWS re:Invent 2023の BreakOut セッション「Improve web application performance using AWS Global Accelerator」のセッションレポートをお届けします。
動画
概要
ユーザー トラフィックをパブリック インターネット経由でルーティングすると、インターネットの天候やネットワークの混雑によりパフォーマンスが不安定になる可能性があるため、より適切なソリューションが必要になる場合があります。AWS Global Accelerator は、ユーザーの所在地に関係なく、ユーザーのトラフィックを広大な AWS グローバル ネットワークに移動し、ユーザーからアプリケーションまでのネットワーク パスを最適化することでパフォーマンスを向上させることができます。このセッションでは、Global Accelerator を使用して、パフォーマンス、可用性、セキュリティが向上した優れたエクスペリエンスをエンド ユーザーに提供する方法について学びます。さらに、The Trade Desk のオンボーディングの過程と、Global Accelerator でユーザーにどのようにサービスを提供しているかについて学びます。
最初にまとめ
- AWS Global Acceleratorを利用することにより、すべてのコンポーネントが高可用性と復元力を実現するように設計が可能
- 高速で信頼性の高いネットワークため、アプリケーションの可用性・信頼性が向上
- エンドユーザーに対して、低遅延で一貫した高品質なアプリケーションエクスペリエンスを提供できる
内容
AWS Global Accelerator(以下AGA)は、アプリケーションのパフォーマンスと可用性を向上させるためのサービスです。
パフォーマンスの観点からは、エンドユーザーが世界中に分散しており、アプリケーションのレイテンシーや一貫性に対する要求が高い場合に適しています。
AGAは最適な経路でトラフィックをルーティングすることで、レイテンシーを改善します。
可用性の観点からは、アプリケーションが複数のアベイラビリティーゾーンやリージョンにデプロイされている場合に有効です。
AGAが自動的にヘルスチェックやフェイルオーバーを行うので、エンドユーザーを常に正常なエンドポイントにルーティングできます。
セキュリティの観点からは、パブリックIPアドレスやエンドポイントを最小限に抑え、アプリケーションの攻撃面積を小さくできます。
AGAで1つのエントリポイントを設定することで実現できます。
その他、複数リージョンでアプリケーションを提供している場合などに、AGAを利用するメリットがあります。
エンドユーザーに最寄りのリージョンからサービスを提供できるうえ、アプリケーションの前にネットワークのフロントドアを簡単に設置できます。
AGAは、エンドユーザーとAWSリージョン間のネットワークサービスです。
AGAは世界中に100個以上のEdgeロケーション(PoP)を持っていて、これらのPoPがクライアントの近くでトラフィックを受信します。
その後、AWSグローバルネットワークを通じて、アプリケーションが稼働しているAWSリージョンにトラフィックをルーティングします。
AGAがルーティングできる主な宛先には、アプリケーションロードバランサー、ネットワークロードバランサー、EC2インスタンスなどがあります。
TCPとUDPの両方のトラフィックをサポートしているので、Webアプリケーションだけでなく、ゲームや音声トラフィックなどにも利用できます。
AGAの主なメリットは、インターネット上の遅延を回避する点です。
エンドユーザー近くでトラフィックを受信した後、AWSグローバルネットワークを通じてアプリケーションサーバーに直接ルーティングすることで、インターネットトランジットをバイパスできるためです。
TCPとUDPの両方をサポートしているので、多様なワークロードでの利用が可能です。
AWSグローバルネットワークは、各Edgeロケーション間を複数の冗長リンクで接続し、AWSトラフィック専用の大容量回線を確保しています。
これがAGAの大きなメリットです。
実際に今年初めに東南アジアで発生した大規模インターネット障害では、地域のインターネットインフラを提供するサードパーティプロバイダーの障害で、48時間以上にわたりエンドユーザーがインターネットにアクセスできなくなりました。
この障害時にAGAを利用していたゲーム企業では、エンドユーザーのトラフィックをAGA Edgeロケーションで受信し、AWSグローバルネットワーク経由でゲームサーバーにルーティングすることで、インターネット障害を完全にバイパスできました。
そのため、この企業のゲームサービスは他社と比べて早期に回復できたのです。
AGAを利用することで、インターネット上の障害リスクを回避し、アプリケーションの可用性を大幅に向上させることができます。
AWSグローバルネットワークが高い冗長性を確保していることがその実現の鍵となっています。
まずAGAサービス自体ですが、110以上のEdgeロケーション(PoP)を2つの冗長インフラセットで構成しています。
これをネットワークゾーンと呼び、それぞれがAGAアクセラレータのIPアドレスに1対1で対応しています。
AGAアクセラレータ作成時には2つの静的IPアドレスが割り当てられ、それぞれが別々のネットワークゾーン/ハードウェアセットと紐付けられます。
したがって、一方のネットワークゾーン/PoPに障害が発生した場合でも、クライアントは他方のIPアドレスに対して再試行することができ、完全に独立したハードウェアに到達できるため、AGA自体の可用性は極めて高いです。
もう一つは、AGAの前後で発生するインターネットやAWSの障害です。
こちらもヘルスチェックや自動フェイルオーバーで対応しています。
エンドポイントグループを跨いで最適なエンドポイントにトラフィックをルーティングすることで、アプリケーションの可用性を向上させます。
各AGAネットワークゾーンには4つのセルがあり、複数の物理サーバーで構成されています。
顧客はネットワークゾーンごとに1つのセルに割り当てられる仕組みです。
さらに、シャッフルシャーディングと呼ばれる手法で、顧客をセルに割り当てます。
これは、最大1つのネットワークゾーン内でのみ他の顧客と同じセルを共有するというもの。
つまり、障害やノイジーネイバー問題が発生した場合でも、影響範囲を1つのネットワークゾーンに限定できるため、AGA全体の可用性が向上します。
複数の隔離レベルによって、サービスの耐障害性が高められていると言えます。
AGAアクセラレータのIPアドレスは、すべてのEdge PoPから通知されます。
これをエニーキャストルーティングと呼びます。
エンドユーザーは最寄りのPoPに自然にルーティングされるため、レイテンシーが低減します。
一方で、特定のPoPとエンドユーザー間のネットワーク接続が切断された場合なども考えられます。
この場合、そのPoPからのIPアドレス通知が停止し、別の正常なPoPにトラフィックが自動的にフェイルオーバーします。
つまり、AGAはPoPレベルでも障害に対応できる仕組みがあり、エンドユーザーから見た接続は中断されることなく、最寄りの正常PoPに引き継がれます。
インターネット上では常に障害が発生すると言われているだけに、このような細かいフェイルオーバー機能がアプリケーションの可用性を高めるうえで重要だと言えます。
AGAは登録したすべてのエンドポイントを定期的にヘルスチェックします。
複数AZ、複数リージョンにエンドポイントを登録でき、AGAが最適な場所にトラフィックをルーティングします。
障害が発生した場合、AGAは自動的に問題のエンドポイントへのルーティングを停止し、次に近い正常なエンドポイントにトラフィックをリダイレクトします。
Route 53などのDNSベースのフェイルオーバーもありますが、欠点はIPアドレスの変更通知に数分から数時間かかる点です。
長時間キャッシュされるデバイスもあるでしょう。
一方AGAは、静的IPアドレスを変更することなくフェイルオーバーを実現できます。
クライアントは自分で何もする必要がなく、シームレスに正常なエンドポイントに再ルーティングされるのです。
AGAなしの場合、アプリケーションはリージョンから複数のパブリックIPアドレスを公開します。
AWS ShieldでDDoS対策ができますが、個々のIPアドレスを登録する必要があります。
一方AGAを利用すると、トラフィックはまず110のEdgeロケーションでチェックされ、そこでAWS Shieldと連携したDDoS緩和が行われます。
攻撃者に近い場所で防御することで、効果的に攻撃を軽減できます。
加えて、アプリケーション自体をプライベートIPアドレス化できます。
パブリックなのはAGAの静的IPアドレス2つだけです。
これにより、ファイアウォールの許可リスト登録もシンプルになります。
AGAはレイテンシーとジッターの両方を改善できます。
レイテンシーはクライアントとアプリ間の絶対的な往復時間、ジッターはその変動性です。
AGAはエンドユーザーに近いEdgeロケーションでトラフィックを受信し、AWSグローバルネットワーク経由でアプリサーバーに配信することで、インターネットトランジットによる遅延や変動を回避できます。
実際のグラフでも、公共インターネットに比べてAGAははるかに低いレイテンシーとジッターを実現しています。
TCP接続時の「初期ハンドシェイク遅延」も大幅短縮化できています。
AGAの並列TCPハンドシェイクにより、接続時間が最大60%短縮化できます。
クライアントとアプリの距離が大きいほど効果は大きく、10ミリ秒単位の短縮が可能です。
加えてTCPバッファ制御やジャンボフレームといったTCP拡張機能を利用することで、1パケット当たりの最大データサイズを6倍に引き上げられます。
これらの効果により、AGA経由だとTCPスループット自体が40~60%改善します。
クライアントとアプリ間の距離が大きいほど、その効果は顕著となります。
最近のアップデート
IPv6サポートが全エンドポイントタイプで利用できるようになりました。
デュアルスタック時はIPv4に加えIPv6の静的IPアドレスが2つずつ割り当てられます。
ネットワークロードバランサーでのクライアントIPアドレス保存に対応し、アプリケーション側でも実際のクライアントIPが参照できるようになりました。
さらにクロスアカウントでのAGA利用も可能になっており、アカウント/チーム間での運用の柔軟性が高まっています。
AGAは高可用性、信頼性、セキュリティ、パフォーマンスを兼ね備え、インターネット上のあらゆる障害からアプリケーションを保護します。
エンドユーザーに最適な一貫したエクスペリエンスを提供することを目的としたサービスです。
最後に
AWS Global Acceleratorは、グローバルでサービスを提供している企業にとって大きなメリットがあるサービスだと思いました。
インターネットの性質上遅延や可用性の課題が避けられませんでしたが、AGAを利用することで、アプリケーションのパフォーマンスと信頼性を大幅に改善できるのは魅力的だと思います。
複数リージョンでのデプロイを検討している企業にとっては、ぜひ検討してみてはいかがでしょうか?