DUICUO

オープンソースの API ゲートウェイを使用してスケーラブルな API を実装する

アーキテクチャは Apache APISIX API に基づいています。

APIゲートウェイは、API呼び出しのエントリポイントを提供する単一のノードです。ゲートウェイは要求されたサービスを集約し、それに応じて適切なレスポンス情報を返します。APIゲートウェイを効果的に機能させるには、信頼性が高く、効率的で、簡潔なAPIを設計することが不可欠です。この記事では設計スタイルを紹介しますが、その要点を理解していれば、関連する問題を解決できるはずです。

API主導のアプローチ

API主導のアプローチでは、アプリケーションとそれらがアクセスする必要があるビジネス機能間の通信の中核にAPIを配置することで、あらゆるデジタルチャネルにわたって一貫したシームレスな機能を提供します。API主導の接続とは、再利用可能で適切に設計されたAPIを使用してデータとアプリケーションを接続する方法を指します。

API駆動型アーキテクチャ

API駆動型アーキテクチャは、APIの再利用を実現するための最適な方法に焦点を当てたアーキテクチャアプローチです。以下の問題に対処します。

  • 権限のない第三者が API にアクセスできないように API を保護します。
  • アプリケーションが正しい API エンドポイントを見つけられることを確認します。
  • 継続的な可用性を確保するために、API へのリクエストの数を制限します。
  • 継続的インテグレーション、テスト、ライフサイクル管理、監視、運用、保守などをサポートします。
  • スタック間でエラーが伝播するのを防ぐ
  • APIのリアル​​タイム監視と分析
  • スケーラブルで柔軟なビジネス機能を実現します (例: マイクロサービス アーキテクチャのサポート)。

APIリソースルーティング

すべてのサービスとの通信のための単一のエントリポイントとして機能するAPIゲートウェイを実装することで、ユーザーはURLさえ知っていればAPIを利用できるようになります。APIゲートウェイの役割は、リクエストを適切なサービスエンドポイントにルーティングし、対応する関数を実行することです。

API ルーティング トラフィックを示す画像。

このアプローチにより、クライアントアプリケーションが複数のHTTPエンドポイントから関数を呼び出す必要がなくなるため、APIユーザーの運用上の複雑さが軽減されます。また、各サービスに対して認証、認可、スロットリング、レート制限のための個別のレイヤーを実装する必要もありません。オープンソースのApache APISIXなど、ほとんどのAPIゲートウェイには、これらのコア機能が既に含まれています。

APIコンテンツベースルーティング

コンテンツベースルーティングメカニズムでは、APIゲートウェイを使用して、リクエストの内容に基づいてルーティング呼び出しを行います。例えば、リクエストはターゲットURIだけでなく、HTTPリクエストヘッダーやメッセージ本文に基づいてルーティングされる場合があります。

次のようなシナリオを考えてみましょう。複数のデータベースインスタンス間で負荷を均等に分散するには、データベースパーティショニングが必要です。このアプローチは、レコードの総数が多く、単一のデータベースインスタンスでは負荷を管理するのが困難な場合によく使用されます。

さらに優れたアプローチは、レコードを複数のデータベースインスタンスに分散させることです。そして、APIゲートウェイを単一のエントリポイントとして、各データベースごとに複数のサービスを実装します。そして、HTTPヘッダーまたはペイロードから取得したキーに基づいて、適切なサービスへの呼び出しをルーティングするようにAPIゲートウェイを設定できます。

単一の顧客を公開する API ゲートウェイの画像。

上の図では、API ゲートウェイが単一の/customersリソースを、それぞれ独自のデータベースを持つ複数の顧客サービスに公開しています。

API 地理ルーティング

APIジオルーティングソリューションは、API呼び出しをその発信元に基づいて最も近いAPIゲートウェイにルーティングします。地理的な距離(例:アジアのクライアントが北米にあるAPIを呼び出す場合)に起因するレイテンシの問題を回避するために、複数のリージョンにまたがってAPIゲートウェイを展開できます。APIゲートウェイでは、リージョンごとに異なるサブドメインを使用できるため、アプリケーションはビジネスロジックに基づいて最も近いゲートウェイを選択できます。これにより、APIゲートウェイは内部負荷分散を提供し、受信リクエストが利用可能なインスタンス全体に分散されます。

DNS トラフィック管理システムのイメージ。

通常、DNS トラフィック管理サービスと API ゲートウェイは、そのリージョンのロードバランサーのサブドメインを解決し、最も近いゲートウェイを見つけるために使用されます。

APIアグリゲータ

このテクノロジーは、複数のサービスに対して操作(クエリなど)を実行し、その結果を単一のHTTPレスポンスとしてクライアントサービスに返します。APIアグリゲータは、クライアントプログラムが複数のAPI呼び出しを行うのではなく、APIゲートウェイを使用して、ユーザーに代わってサーバー側でこの作業を実行します。

異なるAPIを複数回呼び出すモバイルアプリがあるとします。これにより、クライアント側のコードが複雑になり、ネットワークリソースが過剰に消費され、レイテンシによってユーザーエクスペリエンスが低下します。ゲートウェイは、必要な情報をすべて受け取り、認証と検証を要求し、各APIからのデータ構造を理解することができます。また、レスポンスペイロードを渡すこともできるため、これらもユーザーが必要とする統一されたペイロードとしてモバイルデバイスに返送されます。

API ゲートウェイのイメージ。

API集中認証

この設計では、APIゲートウェイは集中型の認証ゲートウェイです。認証者として、APIゲートウェイはHTTPリクエストヘッダー内のアクセス資格情報(ベアラートークンなど)を検索します。そして、認証プロバイダーの支援を受けて、資格情報を検証するビジネスロジックを実行します。

API ゲートウェイの集中認証を示すツリーの画像。

APIゲートウェイを用いた集中認証は、多くの問題を解決します。アプリケーション内のユーザー管理モジュールを完全に置き換え、クライアントアプリケーションからの認証リクエストへの迅速な応答によってパフォーマンスを向上させます。Apache APISIXは、さまざまなAPIゲートウェイ認証方式をサポートする幅広いプラグインを提供しています。

Apache ASPISIS とさまざまなプラグインを示す画像。

API形式変換

APIフォーマット変換とは、同じトランスポート方式を使用してペイロードをあるフォーマットから別のフォーマットに変換する機能です。例えば、HTTPS経由でXML/SOAPをJSONに変換したり、その逆を行ったりできます。APIゲートウェイはREST APIをサポートしており、ペイロードとトランスポートの効率的な変換を可能にします。例えば、Message Queuing Telemetry Transport (MQTT)をJSONに変換できます。

APISIX 転送を示す画像。

Apache APISIX は HTTP リクエストを受信し、トランスコードして gRPC サービスに転送します。gRPC Transcode プラグインを介してレスポンスを取得し、HTTP 形式でクライアントに返します。

APIの可観測性

APIゲートウェイは、様々な宛先に向かうトラフィックの集中管理ポイントとして機能することをご理解いただけたかと思います。しかし、クライアント側とサーバー側の両方のトラフィックを監視できる独自の機能を備えているため、集中監視ポイントとしても機能します。APIゲートウェイをカスタマイズすることで、監視ツールに必要なデータ(構造化ログ、メトリクス、トレース)を収集できます。

Apache APISIX は、外部監視ツールとの統合を可能にする、あらかじめ構築されたコネクタを提供しています。これらのコネクタを使用することで、API ゲートウェイからログデータを収集し、有用なメトリクスを抽出して、サービスの使用状況の包括的なビューを提供できます。

APIキャッシュ

APIキャッシュは通常、ゲートウェイ内に実装されます。アップストリームレスポンスをキャッシュすることで、エンドポイントへの呼び出し回数を減らし、リクエストのレイテンシを改善できます。ゲートウェイキャッシュに要求されたリソースの新しいコピーがある場合、エンドポイントにリクエストを送信することなく、そのコピーを直接使用してリクエストに応答します。キャッシュされたデータが存在しない場合、リクエストは対象のアップストリームサービスに転送されます。

API ゲートウェイ キャッシュの機能を示した画像。

APIエラー処理

APIサービスは様々な理由で障害が発生する可能性があります。このような場合、APIサービスは予測可能なエラーに対処できる復元力を備えている必要があります。また、復元メカニズムが正しく機能していることも確認する必要があります。復元メカニズムには、エラー処理コード、サーキットブレーカー、ヘルスチェック、フォールバック、冗長性などが含まれます。最新のAPIゲートウェイは、自動再試行やタイムアウト設定など、さまざまな一般的なエラー処理機能をサポートしています。

最新の API ゲートウェイがサポートできる多くのメカニズムの一部を示す画像。

APIゲートウェイはコーディネーターとして、トラフィックの管理方法、正常なノードへの負荷分散、そして様々な要因に基づいた迅速なフェイルオーバーを決定します。また、異常発生時にはアラートを通知します。APIゲートウェイは、ルーティングやその他のネットワークレベルコンポーネントが連携してリクエストをAPIプロセスに確実に配信できるようにします。これにより、問題の早期検出と修正を支援します。ゲートウェイのエラー注入メカニズム(Apache APISIXで使用されるものと同様)は、様々なエラー発生時のアプリケーションまたはマイクロサービスAPIの耐障害性をテストするために使用できます。

APIバージョン管理

バージョン管理とは、APIの複数のバージョンを同時実行できる機能を指します。APIは時間の経過とともに進化するため、これは非常に重要です。APIの同時バージョンを管理することで、ユーザーは新しいバージョンに迅速に切り替えることができます。また、古いバージョンを廃止し、最終的には廃止することも可能です。他のアプリケーションと同様に、APIも新機能の開発やバグ修正など、進化のプロセスを経ます。

API Gateway を使用して API のバージョン管理を実装するイメージ。

APIゲートウェイを使用してAPIのバージョン管理を実装できます。バージョン管理は、リクエストヘッダー、クエリパラメータ、またはパスを通じて行うことができます。

APISIXゲートウェイ

APIサービスをスケーラブルにする必要がある場合は、APIゲートウェイを使用する必要があります。Apache APISIXは、堅牢なエントリポイントを作成するために必要な機能を提供し、そのメリットは明らかです。API駆動型アーキテクチャを採用しており、クライアントとホスト型サービスのやり取り方法を変える可能性を秘めています。

この記事は著者の許可を得て Apache APISIX ブログから改変し転載したものです。