BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース UberがAPIゲートウェイのアーキテクチャを公開

UberがAPIゲートウェイのアーキテクチャを公開

ブックマーク

原文(投稿日:2021/06/02)へのリンク

Uberは最近、自社で構築したAPIゲートウェイのアーキテクチャについて詳しく説明した。そこでは、独立したレイヤー化されたコンポーネントがゲートウェイで各リクエストをどのように処理するかが説明されており、各レイヤーはリクエストライフサイクルの異なる面を担当する。YAMLApache Thriftの組み合わせがゲートウェイ構成を定義し、Goでコード生成されたアーティファクトがゲートウェイ実装を構成する。

プロトコルマネージャー、ミドルウェア、エンドポイントハンドラー、クライアントは、ゲートウェイを構成するコンポーネントである。プロトコルマネージャは、スタックの最初のレイヤーである。ここには、ゲートウェイでサポートされている各プロトコル (JSON、Thrift、Protobufなど) のシリアライザーとデシリアライザーが含まれている。次に、ミドルウェアは認証、承認、レート制限などの横断的なテーマを実装する。

エンドポイントハンドラーは、リクエストの検証、ペイロードの変換、エンドポイントリクエストオブジェクトのクライアントリクエストオブジェクトへの変換を担当するレイヤーである。最後に、プロトコルに対応するクライアントは、バックエンドサービスへのリクエストを実行する。クライアントは、スキーマ検証、サーキットブレーク、再試行ポリシー、エラー処理などの動作をカプセル化している。


出典: https://eng.uber.com/architecture-api-gateway/

著者のMadan Thangavelu氏、Abhishek Parwal氏、Rohit Patali氏は、階層化されたコンポーネントを構成する方法を説明している。

各コンポーネントの構成は、Thriftおよび/またはYAMLファイルにキャプチャされます。YAMLファイルはコンポーネントの情報を提供し、コンポーネント間の一種の接着剤として機能します。Thriftファイルは、ペイロードとプロトコルのセマンティクスを定義します。

ゲートウェイthriftファイルは、さまざまな機能とプロトコルに信頼できる唯一の情報源を提供するために、thrift IDLのアノテーション機能を多く使います。以下のセクションでは、各コンポーネントの構成について詳しく見ていきます。

たとえば、「Hello World」サービスを公開するようにHTTPプロトコルマネージャーを構成するには、次のYAMLおよびThrift構成ファイルが使われる。Thriftファイルは、JSON要求および応答ペイロードのデータ型、HTTPパス、HTTP述部を記述する。HTTPプロトコルは、Thriftのアノテーション機能を使ってThriftスキーマ内で定義される。ユーザは内部カスタム UIを使ってこれらの構成ファイルを管理し、Gitリポジトリがそれらをバックアップする。


JSON構成ファイル
出典: https://eng.uber.com/architecture-api-gateway/


Thrift構成ファイル
出典: 
https://eng.uber.com/architecture-api-gateway/

最後に、必要な設定があれば、UberはZanzibarを使って、高スループットゲートウェイを実装するGoコードを生成する。下の画像は、YAML & Thriftのユーザ構成がビルドシステムへの入力としてどのように使われるかを示している。ビルドシステムは、特定の構成に対するゲートウェイで実行可能なファイルを出力する。


出典: https://eng.uber.com/architecture-api-gateway/

著者は「一元化されたシステムの利点は、すべてのユーザに利益をもたらす機能を構築できること」と述べている。いくつかの例には、豊富なメタデータと共にアクセスログを出力する監査パイプラインと、ユーザがエンドポイント用に選択できる認証と承認のための再利用可能な実装が含まれている。もう1つの例は、データセンターアフィニティである。そこでは、ビジネスユニットが複数のデータセンターにまたがるワークロードシャーディングを定義でき、ゲートウェイがそれを実装する。

APIゲートウェイは、近年のマイクロサービスアーキテクチャの不可欠な部分である。これらはAPIフロントエンドとして機能し、APIリクエストを受信し、スロットリングとセキュリティポリシーを適用する。最終的にAPIゲートウェイは要求をバックエンドサービスに渡し、その後、要求元に応答する。

この記事に星をつける

おすすめ度
スタイル

BT