NGINX.COM

NGINXはF5ファミリーの一員となりました。新体制の詳細はこちらを御覧ください。

リアルタイムAPI管理とは? NGINXのrtapiツールを使用したレイテンシのテスト

[注記 – このブログの更新時点は、rtapiバージョン0.2.0で導入された修正点が反映されています]

Akamaiの『インターネットの現状 – セキュリティ』レポート(英語)によると、APIはモダンアプリケーションや進化を続けるデジタルアーキテクチャの中核となっており、APIコールは全Webトラフィックの83%を占めています。消費者が簡単に競合他社に乗り換えることができる現在のデジタル環境では、自社のサイトやアプリに優れたユーザーエクスペリエンスを実現することが何よりも大切となっています。スピードの価値が非常に高くなっており、そのスピードが最終的な優れた応答性、健全性、適応性を実現する鍵となります。これを正しく理解し、競合他社よりも高速なAPIを実現することで、優れた開発が実現します。

IDCレポート『APIs — The Determining Agents Between Success or Failure of Digital Business(API – デジタルビジネスの成否を決定する重要な要因)』(英語)によると、90%以上の組織で50ミリ秒未満のレイテンシが期待されており、約60%は20ミリ秒以下のレイテンシを期待しています(レイテンシは、APIインフラストラクチャがAPIコールに応答するのにかかる時間、具体的にはAPIゲートウェイにリクエストが到達した瞬間から、応答の最初のバイトがクライアントに返されるまでにかかった時間として定義されます)。 NGINXでは、このレポートに示されたデータと、APIライフサイクルのいくつかのエンドツーエンドの分析結果より、リアルタイムAPI(英語)の基準をレイテンシが30ミリ秒以下として定義しています。

特に構造的に複雑なAPIゲートウェイをAPIエンドポイントの入口として使用しているほぼすべての企業にとって、APIコールを可能な限りリアルタイムで処理することは、非常に重要な課題となっています。では、その基準を満たすためにはどうしたらよいのでしょうか?すでにリアルタイムと評価できるだけの十分なスピードを満たしているのか、もしくは改善が必要であるのか、これを判断するにはどうしたらよいのでしょうか。また、自社製品の処理が少し低速のように感じられるのに、その原因がどこにあるのかよくわからないことはないでしょうか。さらには、APIのレイテンシがどの様になっているか確認する方法がわからないという状態になってないでしょうか。

ここで、rtapi(英語)について話しましょう。これは、NGINXが作成したリアルタイムAPIレイテンシベンチマークツールであり、APIゲートウェイとエンドポイントの応答性をテストし、その結果としてレポートを生成できます。レポートは簡単に配布したり、同僚と共有したりすることができます。調査結果を示すグラフが含まれるPDF形式、または詳細な指標を参照できるASCII形式の表の2つのレポート形式を使用できます。

rtapiの実行

  1. 次の2つの方法のいずれかを使用して、GitHubからrtapiバイナリをダウンロードします。

    • Golangがインストールされている場合は、次のコマンドを実行します。

      $ go get github.com/nginxinc/rtapi
    • Golangがインストールされていない場合にはgithub.com/nginxinc/rtapi/releasesにアクセスし、お使いのプラットフォーム用のバイナリをダウンロードして、実行可能ファイルを作成します。
  2. 次の例のように、クエリする1つ以上のAPIエンドポイント(ターゲット)をJSONまたはYAML形式で指定します。JSONまたはYAMLは、それぞれendpoints.jsonまたはendpoints.ymlという名前のファイルに保存することをお勧めします(JSONの場合、--dataフラグのパラメータとして、次のステップでrtapiコマンドラインにこのデータを含めることもできます)。

    各エンドポイントで必要なパラメータは、target.urltarget.methodだけです。target.bodytarget.headerを指定しない場合、値は空のままになります。query_parametersオブジェクトでパラメータを指定しない場合、rtapiは次の例に示すようにデフォルトの値を使用します。

    JSON入力のサンプル

    [
      {
        "target": {
          "url": "https://www.example.com",
          "method": "POST",
          "body": "{\"id\":\"0\"}",
          "header": {
            "Content-Type": [
              "application/json"
            ]
          }
        },
        "query_parameters": {
          "threads": 2,
          "max_threads": 2,
          "connections": 10,
          "duration": "10s",
          "request_rate": 500
        }
      }
    ]

    YAML入力のサンプル

    - target:
        url: https://example.com/api/id
        method: POST
        body: '{"id":"0"}'
        header:
          Content-Type:
            - application/json
      query_parameters:
        threads: 2
        max_threads: 2
        connections: 12
        duration: 10s
        request_rate: 500
  3. 次のコマンドを実行します。--fileは、APIエンドポイントのJSON/YAML形式のリストを含むファイルを指定し、--outputは、rtapiによって生成されるPDFレポートを指定します。(ステップ2で説明したように、コマンドラインでJSONを入力することもできます。コマンドの--file endpoints.jsonで指定する箇所を、--dataの後にJSON文字列を続けて入力したものに置き換えてください。)

    $ rtapi --file endpoints.json --output report.pdf

    ターミナルでASCII形式の表を表示するには、--outputフラグの代わりに(またはこのフラグに加えて)--printフラグを含めます。

    $ rtapi --file endpoints.json --print

PDFレポートに記録される内容について

rtapiによって生成されるPDFレポートには、次のような応答レイテンシのHDRヒストグラムが含まれています。このデータは、API Management Module for NGINX Controllerを使用して構成されたNGINX Plus APIゲートウェイから取得されたものです。Y軸はレイテンシをミリ秒単位で示し、X軸は特定のレイテンシ未満で処理されたコールの割合をパーセンタイルで示します(次の例では、紙面の都合上Y軸を圧縮しています)。

APIの結果を強調するために、軸に平行な破線が交差している場所は、測定されたAPIのレイテンシが99パーセンタイル(グラフの99%)であることを示します。APIがリアルタイムであると評価するためには、交差ポイントにおけるレイテンシが30ミリ秒未満である必要があります。

NGINXができること

お使いのAPIのレイテンシは30ミリ秒以下を満たしていましたか?

NGINXではこれまでに多くの企業からレイテンシについて相談を受けています。貴社のAPIはこのレイテンシレベルに達していますか?多くのAPIゲートウェイとAPI管理ソリューションでは、レイテンシは一般的に100ミリ秒ほどであり、500ミリ秒になっていることもそれほど珍しくありません。

NGINX製品は、APIのパフォーマンス向上をサポートします。NGINXおよびNGINX Plusは業界最速のAPIゲートウェイであり、NGINX Controllerと組み合わせることで、30ミリ秒未満でAPIコールに対してルーティング、認証、セキュリティの保護、データの応答、およびキャッシュできます。詳細については、nginx.com/real-time-apiをご覧いただき、ご質問等あればいつでもNGINXまでご相談ください。NGINXは、リアルタイムAPIを実現するための最適なソリューションを提供いたします。