APIはリアルタイムですか?NGINXのrtapiツールでレイテンシをテスト

NGINX | 2020年3月11日

[編集者注 – この投稿は、rtapiバージョン 0.2.0で導入された改訂版レポートに関する情報を追加して更新されました。]

APIは、最新のアプリケーションと進化するデジタルアーキテクチャの中核を担っています。Akamai State of the Internet Security Reportによると、全Webトラフィックの83%をAPI呼び出しが占めています。消費者がデジタル分野の競合サービスへ簡単に乗り換えられる現在、サイトやアプリで優れた体験を提供することが極めて重要です。特に重視されるのが速度であり、その鍵を握るのは、応答性、健全性、適応性に優れたAPIです。競合他社よりも高速なAPIを実現できれば、開発者に選ばれます。

IDCのレポート「API — デジタルビジネスの成否を分ける決定要因」によると、90%を超える組織が50ミリ秒(ms)未満のレイテンシを期待しており、約60%は20 ms以下を期待しています。(レイテンシとは、APIインフラストラクチャがAPI呼び出しに応答するまでの時間、つまりリクエストがAPIゲートウェイに到達してから、レスポンスの最初のバイトがクライアントに返されるまでの時間を指します。)

このデータとAPIライフサイクルのエンドツーエンド分析に基づき、レイテンシが30 ms以下のAPIを「リアルタイムAPI」と定義しました。さらに、処理されたリクエストの99パーセンタイルまで、レイテンシを30 ms以下に維持する必要があります(つまり、30 msを超えるリクエストは平均で100件に1件のみです)。詳しくは、API管理ソリューションのパフォーマンスベンチマークに関するブログをご覧ください。

ほとんどの企業にとって、API呼び出しを可能な限りリアルタイムに近い形で処理することは大きな課題です。特に、アーキテクチャが複雑なAPIゲートウェイをAPIエンドポイントへの入口として使用している場合はなおさらです。では、APIのパフォーマンスはどの程度でしょうか。すでにリアルタイムと見なせるほど高速ですか。それとも改善が必要でしょうか。製品の動作がやや遅いと感じても、その原因を特定できずにいませんか。APIのレイテンシーを正確に把握できていない可能性もあります。

そこで登場するのが、rtapiです。NGINXが開発したリアルタイムAPIレイテンシベンチマークツールで、APIゲートウェイとエンドポイントの応答性をテストし、同僚と簡単に共有して活用できるレポートを生成します。レポートは、概要グラフを含むPDFと、詳細なメトリクスをまとめたASCII形式の表の2種類です。

実行方法:rtapi

  1. GitHubからrtapiバイナリを、次の2つの方法のいずれかでダウンロードします。
    • Golangがインストールされている場合は、次のコマンドを実行します。
$ go get github.com/nginxinc/rtapi
  • Golangがインストールされていない場合は、github.com/nginxinc/rtapi/releasesにアクセスし、お使いのプラットフォーム用のバイナリをダウンロードして、実行可能にします。
  1. 次の例のように、クエリを実行する1つ以上のAPIエンドポイント(ターゲット)をJSONまたはYAML形式で指定します。JSONまたはYAMLは、endpoints.jsonまたはendpoints.ymlという名前のファイルに保存することを推奨します。(JSONの場合は、次の手順でrtapiコマンドラインの--dataフラグのパラメーターとしてデータを直接指定することもできます。)各エンドポイントで必須のパラメーターは、target.urlとtarget.methodのみです。target.bodyとtarget.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
    }
  }
]
  1. 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
  1. 次のコマンドを実行します。ここで、--fileには、JSON/YAML形式のAPIエンドポイント一覧を含むファイルを指定し、--outputには、rtapiで生成するPDFレポートを指定します。(ステップ2で説明したように、コマンドラインでJSON入力を指定することもできます。その場合は、--file endpoints.jsonの代わりに、--dataに続けてJSON文字列を指定します。)
$ rtapi --file endpoints.json --output report.pdf
  1. メトリクスのASCII形式の表をターミナルに表示するには、--printフラグを--outputフラグの代わりに(または併用して)指定します。
$ rtapi --file endpoints.json --print

PDFレポートの見方

The PDF report generated by rtapiによって生成されるPDFレポートには、次のような応答レイテンシーのHDRヒストグラムが含まれます(NGINX Controller API Management Moduleを使用して構成されたNGINX Plus APIゲートウェイの例)。Y軸はレイテンシーをミリ秒単位で示し、X軸は所定のレイテンシー未満で処理された呼び出しの割合をパーセンタイルで示します。(次の例では、スペースの都合上、Y軸を圧縮しています。)

APIの結果を強調するため、各軸に平行な破線の交点によって、APIで測定された99パーセンタイルのレイテンシ(グラフ上の99%)が示されます。APIがリアルタイムと見なされるには、交点のレイテンシが30 ms未満である必要があります。

NGINXはどのように役立つのか

APIのレイテンシは30 ms未満ですか?

F5がお話を伺う多くの企業と同様、30 ms未満ではない可能性が高いでしょう。多くのAPIゲートウェイおよびAPI管理ソリューションでは、100 msのレイテンシーが一般的で、500 msに達することも珍しくありません。

APIパフォーマンスの向上を支援します。NGINXとNGINX Plusは業界最速のAPIゲートウェイであり、NGINX Controllerと組み合わせることで、30 ms未満でAPI呼び出しのルーティング、認証、保護、トラフィック制御、キャッシュを行えるよう支援します。リアルタイムAPIの実現に向けてNGINXがどのように役立つか、詳しい情報やNGINXのエキスパートへのご相談については、nginx.com/real-time-apiをご覧ください。


共有

著者について

Alessandro Fael Garcia
Alessandro Fael Garciaテクニカルマーケティングエンジニア

Alessandro Fael Garciaのその他のブログ記事

関連するブログ記事

チュートリアル:NGINXを使用してアプリケーション向けにOpenTelemetryを構成する
NGINX | 2024/01/18

チュートリアル:NGINXを使用してアプリケーション向けにOpenTelemetryを構成する

OpenTelemetryを使用してNGINXサーバーの状態と健全性をより明確に把握することで、問題のトラブルシューティングを行い、Webアプリケーションのパフォーマンスを向上できます。

AkitaのNGINX Plus認定モジュールでAPIエンドポイントの問題を特定・修正
NGINX | 2023/05/31

AkitaのNGINX Plus認定モジュールでAPIエンドポイントの問題を特定・修正

Akita SoftwareのAPIオブザーバビリティ向け新しいNGINX Plus Certified Moduleを活用して、APIエンドポイントの問題をより迅速に特定し、修正できます。

JavaプロジェクトをスキャフォールディングしてKubernetesネイティブアプリを構築する方法
NGINX | 2023/02/09

JavaプロジェクトをスキャフォールディングしてKubernetesネイティブアプリを構築する方法

Red HatのシニアプリンシパルデベロッパーアドボケイトであるDaniel Oh氏が、Javaプロジェクトをゼロから構築するためのひな形を作成し、Kubernetesネイティブアプリケーションとしてビルドする方法を解説します。

F5 NGINXaaS for Azureのご紹介:Microsoft Azureでネイティブに利用できるSaaS型ロードバランシング
NGINX | 2022/05/24

F5 NGINXaaS for Azureのご紹介:Microsoft Azureでネイティブに利用できるSaaS型ロードバランシング

NGINXaaS for Azureは、NGINX PlusをAzureネイティブのSaaSとして利用できるサービスです。NGINXの設定を容易にリフト&シフトできるため、クラウド導入とモダンアプリの展開を加速できます。

SELinuxでNGINXおよびNGINX Plusを使用する
NGINX | 2018/08/17

SELinuxでNGINXおよびNGINX Plusを使用する

Red Hat Enterprise Linux(RHEL)および関連ディストリビューションでSecurity-Enhanced Linux(SELinux)を有効にすると、デフォルト設定によりNGINXとNGINX Plusの一部の操作が制限されます。この記事では、すべての機能を利用できるようにSELinuxの設定を変更する方法について説明します。

NGINX PlusによるAWS Auto Scalingグループの負荷分散
NGINX | 2017/03/06

NGINX PlusによるAWS Auto Scalingグループの負荷分散

新しいnginx-asg-sync統合ソフトウェアにより、NGINX PlusはAWS Auto Scalingグループの負荷を直接分散できるため、クラウドでの負荷分散がさらに柔軟になります