Akamai Diversity

Akamai Japan ブログ

API Rate Limitingの解説

前回の記事前々回の記事ではキャッシングを使用してAPIのパフォーマンスを向上させる方法とアカマイのCDN配信、ルーティング、およびレスポンスキャッシュ機能を使用してアプリケーションキャッシングの結果を向上させる方法についてご説明しました。
今回はAPI Rate Limitingの2つの方法とアカマイソリューションの適用範囲についてご紹介します。
※ この記事は2018.5.31に執筆されたDeveloper Blogの記事を翻訳した内容を元に作成しています。


APIはインフラストラクチャ、サービス、デバイス、およびユーザーを統合して接続する「デジタル接着剤」のようなものです。ほぼ全ての組織においてAPIが急増していることから、APIを管理し、ガバナンスを効かせるための仕組みを持つことが非常に重要です。AkamaiがAkamai API Gatewayをリリースした理由は、お客様がAPIに対して容易にガバナンスを適用できるようにするためです。

APIガバナンスの重要な側面は、利用者がある時間枠で利用できるAPIリクエストの数を制限することです。APIリクエストを抑制するために使用される主な方法はRate LimitingとQuota Managementの2つです。これらのメソッドは異なるニーズに対応しておりますが、それらは非常に似ており、特定の状況でどのメソッドを使用するべきか混乱してしまう場合があります。

本ブログ記事ではRate LimitingとQuota Managementの違いを明らかにし、Akamaiソリューションを活用して、いずれかまたは両方の方法でAPIリクエストを抑制する方法について説明します。

まず、2つの定義から始めましょう。

Rate Limiting(レート制限):

Rate Limitingの主な目的は、正当なユーザーからのAPI要求によるインフラの圧迫を防ぎ、すべてのAPI利用者にとっての可用性と信頼性を確保することです。所定の時間内のリクエスト数をカウントし、それらのリクエストに対し制限を適用します。

Quota Management(クォータ管理):

利用者に対するQuota Managementではリクエスト数もカウントしますが、異なる目的を果たします。クォータ管理は、利用者が長い時間間隔で利用できるAPIリクエスト数を制限できるようにすることで、API利用者に対するSLA(ここでは利用者が合意した利用可能APIリクエスト数)を強化するのに役立ちます。

ここで、これらの2つの機能が実際の例でどのように設定されるかを見てみましょう。APIの提供者は、API利用者からのAPIリクエストを抑制するために、いずれかまたは両方の方法を使用することがよくあります。下記の画像は、API利用者に対して、15分ごとに180回のAPIリクエストの制限をおこなっているRate Limitingのみを行なっている会社の例です。

API_Rate_Limiting_IMG4
次の画像は、Rate LimitingとQuota Managementの両方を利用してAPIリクエストを抑制する会社を示しています。彼らが定義した制限は、4段階(Low、Medium、Sandbox、High)に分かれており、各段階で1日当たりの利用可能リクエスト数と1秒あたりのリクエスト数制限が定められています。
API_Rate_Limiting_IMG1
次に、Rate LimitingとQuota Managementについて、各メソッドの詳細をご説明します。 

Rate Limiting

正当なAPI利用者は、非常に短い時間(数分または数秒)の間に非常に多くのAPIリクエストを行う場合が多く、これらのリクエストがインフラに負荷をかけすべてのAPIをダウンさせてしまう可能性があります。これらの正当な(悪意のあるものではない)利用者が不正行為をしないようにする方法が必要です。

解決方法はレート制限です。通常、まずはAPI利用者が正当なものであることを確認します。(すべてのリクエストに存在するトークンまたはキーによって識別可能) 確認された後、利用者に対し1秒あたり一定数のリクエスト(たとえば10リクエスト/秒)のみを許可し、利用者がこの制限を超えた場合にユーザーをブロックします。リクエストをブロックすることで、一人のAPI利用者がAPIを占有できないようにし、幅広い利用者への可用性がもたらされます。

今日、AkamaiのAPI Rate LimitingはIPアドレスレベルに制限されており、Kona Site Defender(KSD)でのみ利用できます。KSDは、5秒間隔で各IPアドレスが行っているリクエスト数を評価することにより、レート制限をおこないます。この機能は、Volumetric DDoS攻撃からAPIを保護することを目的としており、API Rate Limitingのユースケース(トークン/キーを一意に識別するために各要求を評価する必要がある)で使用するには細かすぎる可能性があります。

多くの点で、レート制限はアンチパターンとなっていると私たちは考えています。API開発者はクライアントが行うことができるAPIリクエスト数を制限するのではなくAPI応答をキャッシュすることによって同じ結果を達成できるのではないかという検討をせずに、インフラを保護するためレート制限に依存してしまうことがよくあります。APIをできるだけ多くの利用者に提供するために、レート制限を受け入れないでください。アカマイによるAPIレスポンスのキャッシュはあなたがより多くの利用者にAPIを提供するための手助けとなります。オリジンサーバのコンピューティングパワーを節約し、ネットワークトラフィックを削減することができます。

APIレスポンスをキャッシュできない場合もアカマイには別の選択肢があります。API Prioritization Cloudletを活用して、インフラへのアクセスを制限することができます。このCloudletを利用することにより、特定のAPI利用者をAPIにルーティングして他の利用者に代替JSONレスポンスを提供することで、トラフィックの優先順位付けを行うことができます。

Quota Management

Quota Managementはレート制限ではありません。Quota Managementを実装する主な目的は、ビジネスSLAを適用することです。Quota Managementでは、一般的により長い時間(1時間あたり、1日あたりなど)間隔でAPIに対するアクセス制限が適用されます。

Akamai API Gatewayを活用すると、最短1時間間隔で利用者からのAPIリクエスト数を制限することができます。APIにアクセスするパートナーが100人いるとします。これらのパートナーの一部は、パートナーごとに1日に設定した範囲を超えてリクエストを行う可能性が非常に高いです。Quota Managementを使用すると、パートナーが許可するAPIリクエスト数を容易に制限し、範囲外のふるまいを防ぐことができます。 

もう1つの良いユースケースは、DaaS (Data as a Service)です。このケースにおいてAPI利用者はリクエスト数や返されるデータの数に基づいて課金されます。たとえばAPIプロバイダはAPIアクセスの階層(ブロンズ、シルバー、ゴールドレベルなど)を設定することが多く、各階層の利用者が付与された数のAPIリクエストしかアクセスできないようにする必要があります。その良い例はTwitterのクォータポリシーで、プレミアムサンドボックス、プレミアム、エンタープライズという3つの層があります。

API_Rate_Limiting_IMG2

Akamai API Gatewayは、APIキー毎にAPIリクエスト数を制限することによりビジネスSLAを強化し、APIを収益化することができます。

まとめ

下記の表に、どのようなAPIリクエストカウントにどのアカマイソリューションを適用できるのかをまとめました。
blogchart.png
本ブログ記事によってRate LimitingとQuota Managementの違いと、Akamai API Gatewayがどのように当てはまるのかが明確になれば幸いです。
またドキュメントとスタートアップガイドをご確認いただくことで、API Gatewayを容易にご利用いただくことができます。アカマイマーケットプレイスより90日間無料のAPI Gatewayトライアルを開始できますので、ぜひ本製品をお試しください。

Leave a comment