アーキテクチャ

単一バイナリ・単一コンフィグ

Goにより、AILERON Gateway は単一かつスタンドアロンのバイナリとしてビルドされています。
実行環境に環境に依存は不要です。 これにより、AILERON Gatewayは非常にポータブルで実行が簡単です。
コントロールプレーンやデータベースも不要です。

必要なのは 単一のバイナリと単一の設定ファイル だけです。

実行もとても簡単です。

aileron -f /path/to/config

機能の使い方については、Getting Started ガイドをご覧ください。

サーバー/クライアント アーキテクチャ

AILERON GatewayはGoアプリケーションの典型的なHTTPサーバーとクライアントのアーキテクチャを採用しています。

以下の図は基本的なネットワークプロトコルのレイヤーを示しています。
AILERON Gatewayはサーバーとクライアントの枠内に示されたすべてのプロトコルをサポートすることを目指しています。

サーバー側には主にMiddlewareHandlerの2つのコンポーネントがあります。
Middlewareは他の言語でフィルターやインターセプターと呼ばれることもあり、HTTPリクエストに対して中間処理を提供します。 HandlerはAPIリクエストに対する最終処理を提供します。
すべてのクライアントリクエストはMiddlewareとHandlerの組み合わせで処理されます。

Middlewareは複数のHandlerで共有可能です。
Mux(マルチプレクサ)はAPIリクエストを適切なHandlerに振り分けます。

  • Middleware の例
    • ロギング Middleware
    • タイムアウト Middleware
    • スロットル Middleware
    • CORS Middleware
    • CSRF Middleware
    • 認証 Middleware
    • 認可 Middleware
  • Handler の例
    • リバースプロキシ Handler
    • スタティック Handler(静的ファイルサーバー)
    • テンプレート Handler(テンプレートからのレスポンスコンテンツ)

以下の図は AILERON Gateway における HTTP サーバーのアーキテクチャを示しています。
HTTPサーバーは仮想ホストをサポートします。
Mux、Middleware、Handler はそれぞれ独自のインターフェースを持ちます。

クライアント側には TripperwareRoundTripper の2つの主要なコンポーネントがあります。
Tripperwareはクライアント側のMiddlewareで、HTTP クライアントに対する中間処理を提供します。
RoundTripperはHTTPクライアント自体で、HTTP クライアントに対する最終処理を提供します。

  • Tripperware の例
    • ロギング
    • リトライ
    • トレーシング

以下の図は AILERON Gateway における HTTP クライアントのアーキテクチャを示しています。

実行

AILERON GatewayはGoで書かれているため、
バイナリのエントリポイントは Go 言語仕様 に記載されている通り main()関数です。

AILERON Gateway の main 関数は cmd/aileron/aileron.go に記述されています。

func main(){
  // Starting up the AILERON Gateway.
}

main 関数に入ると、AILERON Gateway は ライフサイクル に記載されたライフサイクルで起動します。

ライフサイクル

main() 関数に入ると、AILERON Gateway は以下の処理を開始します。

簡単に説明すると、

  • コマンドライン引数を処理する

  • 設定ファイルを読み込み、処理する

  • エントリポイントリソースを実行する(=HTTPサーバーを起動する)

Entrypoint リソースはアプリケーションのエントリポイントです。 このリソースは任意の Runner リソースを実行できます。 Runner リソースとは、以下のランナーインターフェースを実装したリソースのことです。 HTTPサーバーはこの種類の典型的なリソースです。

type Runner interface {
  Run(context.Context) error
}

この図は、main関数がランナーを呼び出し、OSのシグナルがmainからランナーへ伝播される様子を示しています。
HTTPサーバーはシグナルを受け取るとシャットダウンされます。


最終更新 June 7, 2025: add japanese (f2a41f1)