Akamai Diversity

Akamai Japan ブログ

Akamai API Gatewayを使用したアプリケーションキャッシング結果を改善する方法

※ この記事は2018.5.31に執筆されたDeveloper Blogの記事を翻訳した内容を元に作成しています。
 
前回の記事ではキャッシングを使用してAPIのパフォーマンスを向上させる方法について説明しました。
今回はアカマイがCDN配信、ルーティング、およびレスポンスキャッシュ機能を使用してアプリケーションキャッシングの結果を向上させる方法を見てみましょう。最初に説明するテストでは、テストAPIを使用してアカマイでのキャッシュの有無にかかわらずスループット率を比較します。次にアカマイでのキャッシュ実装による効果を説明します。最後にAkamai API Gatewayを使用して環境を構成するための手順について説明します。

まず、DNSプロバイダに「origin-api.jeffcosta.com」という新しいDNS Aレコードを作成し、Digital OceanサーバーのIPアドレスを指定します。これは、各エッジサーバーがトラフィックをAPIサーバーに転送するために使用するホスト名です。dig コマンドを使用して、このDNSエントリが設定され、正しく動作していることを確認しましょう
 
api_part2_image1.png
これは期待どおりに動作しています。次に、「api.jeffcosta.com」へのリクエストをアカマイにルーティングするために、DNS CNAMEチェーンで使用されるエッジホスト名を作成します。アカマイの設定ツールであるプロパティマネージャーまたはPAPIインターフェースを使用して、エッジホスト名を作成します。作成後、エッジホスト名にマップするためにDNSゾーンにCNAMEエントリを作成する必要があります。
dig コマンドを実行して、api.jeffcosta.comのリクエストがCNAMEチェーン経由でアカマイに正しくルーティングされていることを確認しましょう
 
api_part2_image2.png
ここではアカマイがCNAMEチェーンを "api.jeffcosta.com"としてトラックし、APIクライアントに対して地理的に最も近いエッジサーバー(209.xxxで始まる最後の2つのIPアドレス)をマッピングしています。これはダイナミックマッピングと呼ばれるAkamai Intelligent Platformの中核機能です。
このマッピングが行われた後、アカマイの設定ツールであるプロパティマネージャを使用して、これらのエントリをAPIの設定ファイルに追加します。これは管理ポータルであるAkamai Luna Control Centerを介して行うことができます。以下のLuna画面では、Origin Hostname欄にorigin-api.jeffcosta.comを、Property Hostnameの欄にapi.jeffcosta.comを追加しました
 
api_part2_image3.png
この設定を保存し、アカマイネットワーク上のプロダクション環境にプッシュします。APIトラフィックはアカマイ上を流れるようになります。アカマイがトラフィックを実際に処理していることを確認するためにHTTPリクエストを作成しテストします。確認するために最も簡単な方法は、アカマイの "Pragma"デバッグヘッダーをリクエストに追加することです。Pragmaヘッダーを追加する方法は次のとおりです。ここではPostmanをリクエストツールとして使用しています
 
api_part2_image4_1.png
Pragmaヘッダーを有効にしたので、Postmanからhttp://api.jeffcosta.com/catsにリクエストして、レスポンスヘッダーを確認します。これらのヘッダーでは、アカマイが返すレスポンス関する情報を見ることができます
 api_part2_image5.png
 
X-Cache → "TCP_MISS"は、オブジェクトがキャッシュになく、サーバーがJSONレスポンスオブジェクトをオリジンからフェッチしたことを意味します。X-Check-Cacheable→"NO"は、この特定のURLがアカマイにキャッシュされないことを示します。アカマイが機能していることがわかったので、今度はAkama化されているAPIに対してSiegeツールを実行しましょう。ここでも同じコマンドライン呼び出しを使用しますが、GETリクエストのターゲットを "api.jeffcosta.com"に変更します。
 
$ siege -c 5 -time = 5m -content-type "application / json" GET http://api.jeffcosta.com/cats
 
結果は次のとおりです(ここはアプリケーションキャッシングは使用していません): 
 
api_part2_image6_1.png
 
アカマイのルーティングとネットワーク機能を使用するだけで、Digital Ocean VPSと比較してヒット数とトランザクション数が26%増加していることに注目してください。次のステップでは、アカマイを使用しているAPIに対してAPIのアプリケーションレベルのキャッシュを有効にした結果です: 
 
api_part2_image7_1.png
 
ヒット数、1秒あたりのトランザクション数が増えています。繰り返しになりますがこれらの改善はAkamai Intelligent Platformのネットワークとルーティングの最適化によって提供されます。
最後の例では、アプリケーションレベルのキャッシュを維持し、アカマイで/ catsリソースのキャッシュを有効にしてみましょう。これにより、すべてのエッジサーバーがJSONレスポンスのキャッシュを開始します。/ catsリソースのキャッシュを5分間有効にすることで、Akamai API Gateway内でこれを実行します
 
api_part2_image8.png
次に、更新されたキャッシュルールを含むこの新しい設定をアカマイのプロダクション環境にプッシュします。展開完了後、設定を確認するためにPostmanで別のリクエストを実行します。アカマイは次のレスポンスヘッダーを返します
 
api_part2_image9.png
ここでは、Pragmaヘッダーのいくつかの変更を確認します。
  • Expiresがあり、アカマイでキャッシュされたオブジェクトの存続期間が明らかになりました。
  • アカマイはTCP_MISSの代わりにX-CacheにTCP_MEM_HITを表示するようになりました。これは、オブジェクトがエッジサーバー上のメモリから提供されたことを示します。
  • X-Cache-Keyにオブジェクトに自動的に定義されたキャッシュキーが表示されます。
  • X-Check-CacheableにNOの代わりにYesが表示され、オブジェクトがキャッシュ可能であることが示されます。
最後にSiegeを再実行してみましょう: 
 
api_part2_image10.png
 
Digital Oceanでアプリケーションレベルのキャッシュを有効にした場合よりもトランザクション数は上昇しています。ローカルホストを使用したベースライン値にまだ近くはありませんが、ヒット数とトランザクション数は大幅に改善しています。
 
最後に、アカマイによるキャッシングがAPIにどのように役立つかを理解しやすくするために結果を表形式で要約します
api_part2_image12.png

このようにお客様のAPIもAkamai API Gatewayを使用することでパフォーマンス改善のメリットを得ることができます。

Leave a comment