🌏

【Maps APIの裏側】パフォーマンス最適化~AWS re:Invent 2022 セッション紹介~

2022/12/19に公開

この記事はMapbox Advent Calendar 2022の記事です。

筆者はMapboxの広告配信プラットフォームを作っているインフラ&データエンジニアです。普段はCDKでAWS上でインフラを構築したり、EKS上にデータ提供APIを作ったりしています。

概要

2022/11/29~12/2にUSのLas Vegasで開催されたAWS re:Invent 2022に参加してきました。

弊社のDirector of Maps APIsのBlake Tompsonが'Optimizing performance with CloudFront: Every millisecond matters'というタイトルで発表したので、その内容について紹介します。

AWSのCloudFrontを活用したMaps APIのパフォーマンス最適化の話になります。

https://www.youtube.com/watch?v=LkyifXYEtrg

Optimizing performance with CloudFront

前段:4つの柱


パフォーマンスを向上させるためには4つの柱があります。MapboxのMaps APIはこれらの柱に基づいて、パフォーマンスの最適化を行っています。

  1. 可用性(Availability)
  2. 最適化(Performance)
  3. エッジコンピューティングの利用(Edge compute)
  4. 効果的なモニタリング(Effective monitoring)

1.キャッシュの利用

CloudFrontは、静的コンテンツのキャッシュはもちろん、動的コンテンツのキャッシュも可能です。ただし、一歩間違えると古いコンテンツをユーザーに提供してしまう恐れがありますので注意が必要です。必要な時にOriginから最新のコンテンツを取得し、そうでないときはキャッシュを利用するように、Cache Policyを設定します。

具体的には、HTTP Headerに含まれている国や郵便番号やある特定のcookieを利用して、キャッシュを利用するかしないかを定義しています。

キャッシュポリシーを正しく設定することで、MapboxのMaps APIへのリクエストの40%はキャッシュで処理することに成功しています。(正確には、HTTPステータスコードの304を返却し、Clientはダウンロード済みのデータを利用する。)
詳細はAWSのドキュメント(ポリシーの使用)をご参照下さい。

2.Origin Shieldの使用

Mapboxのユーザーは複数リージョンに分散しています。通常では、リージョン間ではキャッシュは共有されません。そのため、同じ内容のリクエストが複数のリージョンから送られてきた場合、Originに複数リクエストが転送されます。それを防ぐために、Origin Shieldを利用しています。

Origin Shiled未使用 Origin Shiled使用

Origin Shieldを利用すると、全リージョンのリクエストがOrigin ShieldのCloudFrontを通過するようになるため、Originにはリクエストが1回しか送信されないようになります。Origin Shiledの詳細については、AWSのドキュメント(Amazon CloudFront Origin Shield の使用)をご参照下さい。

3.TLS 1.3の利用


TLS1.2ではTLSハンドシェイクを完了するために2回のラウンドトリップが必要でしたが、TLS1.3では1回のみです。そのため、TLS1.3ではTLS1.2と比較して高速です。また、TLS 1.3ではTLS1.2において安全性が低いとされた旧式の機能を削除しているため、よりセキュアです。

4.Brotliでの圧縮

CloudFrontを使用して特定のタイプのファイルを自動的に圧縮し、その圧縮オブジェクトを供給できます。ビューワーがGzipとBrotliの両方をサポートしている場合、CloudFrontではBrotliが優先されます。なお、BrotliはGoogle が開発したオープンソースの圧縮アルゴリズムです。

Mapboxでは、この機能を用いて8%のBandwidthの削減に成功しています。通常のWebアプリケーションの場合は、より大幅な改善が期待できます。(Mapboxは元々Binaryのファイルを利用しているのため、圧縮率が小さい)
詳細はAWSのドキュメント(CloudFront 圧縮の仕組み)をご参照下さい。

5.CloudFrontのログを用いたモニタリング


CloudFrontのログを利用してリアルタイムダッシュボードを作成しています。

4つの利用エリア Map上にLatencyの可視化

収集したログを用いて、最適化率やレイテンシー、エラー率、トラフィックのアラートを可視化し、さらなる改善に利用しています。


Mapboxはこららの値を用いながら、アプリケーションの改善を重ね、現在ではの90%以上の帯域をCloudFrontに担わせることに成功しています。言い換えると、Origin(APIサーバー)が処理しているのは10%以下です。

まとめ

AWS re:Invent 2022の'Optimizing performance with CloudFront'セッションの内容について紹介させて頂きました。MapboxのMaps APIの背後にあるテクノロジーの理解の一助になれば幸いです。

最後までお読み頂きありがとうございました。

Discussion