APIゲートウェイ領域@マイクロサービスアーキテクチャ¶
はじめに¶
本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。
01. APIゲートウェイ¶
APIゲートウェイとは¶
クリーンアーキテクチャでいうインフラ層とインターフェース層のような機能を担う。
主要な機能として、受信した通信を適切なマイクロサービスのAPIにルーティング
- ルーティング
- 認証
- トレースIDの付与
- キャッシュの作成
- リクエストのレートリミット
- 通信の暗号化
- ...
なお、APIゲートウェイをサービスメッシュに参加させることで、これらの機能の一部 (認証、トレースIDの付与、通信の暗号化、リクエスト制限) をサイドカーに委譲できる。
分割パターン¶
▼ APIゲートウェイの分割パターンとは¶
APIゲートウェイの責務をどのように分割するかに応じて、分割パターンがある。
▼ Central Aggregating Gateway¶
マイクロサービスにリクエストを送信するアプリケーションの種類に関係なく、APIゲートウェイを1
個だけ作成する。
▼ BFF:Backends For Frontends¶
マイクロサービスにリクエストを送信するクライアントアプリケーションの種類 (Webアプリケーション、モバイルアプリケーション、他社向けアプリケーションなど) を単位として、APIゲートウェイ (Web APIゲートウェイ、Mobile APIゲートウェイ、他社向けAPIゲートウェイなど) を作成する。
ただし、ドメインによっては同じクライアントアプリケーションの種類であっても、APIゲートウェイを分割することもある。
例えば、送金ドメインであれば、クライアントアプリケーションには銀行ダイレクトアプリや銀行系決済サービスアプリがあり、これらが同じモバイルアプリケーションであっても、APIゲートウェイを分割する。
なお、BFFはRESTful-APIであってもGraphQL-APIであっても、どちらでも問題ない。
▼ Federated Gateway¶
BFFではアプリケーションの種類ごとにAPI Gatewayを作成したが、Federated Gatewayでは各APIゲートウェイのエンドポイントを統合する。
API形式パターン¶
▼ APIゲートウェイのAPI形式パターンとは¶
APIゲートウェイのAPI形式に応じて、分割パターンがある。
▼ RESTful-API¶
記入中...
▼ GraphQL-API¶
記入中...
▼ RPC-API¶
記入中...
責務パターン¶
▼ Gateway Offloadingパターン¶
APIゲートウェイは、マイクロサービス間で共通する課題 (認証、ロギング、SSL証明書など) を処理する責務を持ちます。
▼ Gatewayルーティングパターン¶
APIゲートウェイは、複数のマイクロサービスにリクエストをルーティングする責務を持ちます。
▼ Gatewayアグリゲーターパターン¶
APIゲートウェイにAPI Compositionを適用した方法である。
実装パターン¶
▼ 自前で実装する場合¶
APIゲートウェイを自前 (例:フルスクラッチ、GraphQLを使用したフルスクラッチなど) で実装する。
Kubernetes内で管理できるメリットがある。
GraphQLでAPIゲートウェイを実装する場合は、特に注意が必要である。
フロントエンドとAPIゲートウェイの両方でGraphQL特有の実装が必要になるので、フロントエンドとAPIゲートウェイの開発が分業にしくくなってしまう。
ただ、フロントエンドとAPIゲートウェイの開発チームの両方がGraphQLの知識を持ってれば、これは起こらない。
- https://techblog.zozo.com/entry/zozotown-phased-istio-service-meshing-strategy
- https://qiita.com/takurUN/items/aace0e60744d0ec92cf6#2-4-api%E3%82%B2%E3%83%BC%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A4%E3%82%92kong%E3%81%A7%E6%A7%8B%E7%AF%89%E3%81%97%E3%81%9F%E7%90%86%E7%94%B1%E3%82%B3%E3%82%B9%E3%83%88%E6%9C%80%E9%81%A9
▼ OSSを使用する場合¶
APIゲートウェイのOSS (Kong、Tyk、Apigee、Kuma、Nginx、Envoy、Apache APISIXなど) を使用する。
Kubernetes内で管理できるメリットがある。
- https://www.moesif.com/blog/technical/api-gateways/How-to-Choose-The-Right-API-Gateway-For-Your-Platform-Comparison-Of-Kong-Tyk-Apigee-And-Alternatives/
- https://qiita.com/takurUN/items/aace0e60744d0ec92cf6#2-4-api%E3%82%B2%E3%83%BC%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A4%E3%82%92kong%E3%81%A7%E6%A7%8B%E7%AF%89%E3%81%97%E3%81%9F%E7%90%86%E7%94%B1%E3%82%B3%E3%82%B9%E3%83%88%E6%9C%80%E9%81%A9
▼ クラウドプロバイダーのマネージドサービスを使用する場合¶
クラウドプロバイダー (例:AWS、Google Cloud) が提供するAPIゲートウェイ (例:AWS API Gateway、Google API Gateway) を使用する。
クラウドプロバイダーの対応状況によっては、Kubernetes内で管理できない可能性がある。
その場合、フロントエンドアプリケーションがAPIゲートウェイに通信できるように、フロントエンドアプリケーションとバックエンドアプリケーションを異なるKubernetesで動かす必要がある。
- https://aws.amazon.com/jp/blogs/news/api-gateway-as-an-ingress-controller-for-eks/
- https://qiita.com/takurUN/items/aace0e60744d0ec92cf6#2-4-api%E3%82%B2%E3%83%BC%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A4%E3%82%92kong%E3%81%A7%E6%A7%8B%E7%AF%89%E3%81%97%E3%81%9F%E7%90%86%E7%94%B1%E3%82%B3%E3%82%B9%E3%83%88%E6%9C%80%E9%81%A9
02. APIアグリゲーション層¶
APIアグリゲーション層とは¶
全てのAPIまたは複数のAPIのセットとして機能する。