リレープロキシ
App Configuration リレープロキシは、SDKクライアントと IBM Cloud App Configuration サービスの間に位置します。 各SDKが IBM Cloud に直接接続するのではなく、SDKクライアントは自社ネットワーク内のプロキシに接続します。 プロキシは IBM Cloud App Configuration から設定情報を取得してキャッシュし、接続中のすべてのクライアントに配信します。
なぜRelay Proxyを使うのか?
次のようなシナリオでは、Relay Proxy の使用をご検討ください:
- IBM Cloud への発信トラフィックを削減 — このプロキシは、フリート内に展開されている SDK インスタンスの数にかかわらず、設定されたコレクションと環境の組み合わせごとに 1 つのアップストリーム接続を開きます。
- エアギャップまたはプライベートネットワークでの導入 — SDKクライアントは、ネットワーク内のプロキシとのみ通信します。 このプロキシは、 IBM Cloud へのすべての接続を処理します。
- 単一認証ポイント — プロキシ側で、 IBM Cloud のIAM APIキーが1つ必要です。 SDKクライアントは、ユーザーが定義したキーを使用してプロキシに対して認証を行います。
- プライマリおよびバックアップインスタンスのフェイルオーバー — プライマリインスタンスが利用できない場合、プロキシは自動的にバックアップの IBM Cloud App Configuration インスタンスに切り替わり、自動的に復旧します。
- ローカルのシードファイルからのスムーズな起動 — 高速起動モードでは、プロキシはバックグラウンドで IBM Cloud から最新のデータを取得しながら、ローカルのシードファイルから即座に設定情報を提供します。
SDKクライアントがRelay Proxyに接続する方法
SDKクライアントは、 IBM Cloud App Configuration に直接接続する際と同じ接続タイプを使用しますが、代わりにプロキシのホスト名とポートを指定します:
| SDK タイプ | 接続タイプ | 目的 |
|---|---|---|
| サーバー SDK | WebSocket | 設定変更イベントをリアルタイムで受信する |
| Client SDK | サーバー送信イベント(SSE) | 設定のスナップショットと更新情報の受信 |
| すべてのSDK | REST | 初期設定を取得する |
接続多重化
リレープロキシの主な利点の一つは、接続の多重化です。 プロキシには数百から数千のSDKインスタンスが接続できますが、プロキシは collection × environment の組み合わせごとに、 IBM Cloud App Configuration へのアップストリーム WebSocket 接続を1つだけ確立します。 その上流接続数は設定によって固定されており、フリートの規模が拡大しても増加することはありません。
たとえば、2つのコレクション(inventory および payments )を設定し、それぞれを2つの環境(dev および prod )で使用する場合、プロキシには、接続するSDKインスタンスの数にかかわらず、常に4つのアップストリーム WebSocket セッションが維持されます:
| WebSocket セッションの上流処理 | コレクション | 環境 |
|---|---|---|
| 第1セッション | インベントリー | dev |
| 第2セッション | インベントリー | prod |
| 第3セッション | 支払い | dev |
| 第4セッション | 支払い | prod |
IBM Cloud App Configuration がアップストリーム接続上で変更イベントを送信すると、プロキシはそのイベントを、その組み合わせを購読しているすべてのSDKクライアントに即座に配信します。
collection × environment の各組み合わせには、プロキシ内で専用の分離されたキャッシュスロットと、上流の WebSocket セッションが割り当てられています。
起動モード
Relay Proxy は、シードファイルが設定されているかどうかに応じて、2 つの起動モードをサポートしています。
通常起動
通常起動モードでは、プロキシはリクエストを処理する前に、 IBM Cloud App Configuration への接続に成功している必要があります。 設定の取得に失敗した場合、起動は中止されます。 このモードでは、クライアントが最初のリクエストから常に信頼できるデータを受け取れることが保証されます。
起動手順は以下の通りです:
- IBM Cloud App Configuration から設定を取得します。設定済みのすべての組み合わせが同期的に取得されます。
- すべての設定をメモリにキャッシュする。
- HTTP サーバーを起動し、クライアントからのリクエストを受け付けます。
- 変更のリアルタイム通知を受け取るために、 WebSocket のアップストリームセッションを、組み合わせごとに1つずつ開いてください。
早めのスタート
高速起動モードでは、シードファイルによってキャッシュが事前にウォームアップされるため、プロキシは IBM Cloud を待つことなく、直ちにリクエストの処理を開始できます。 新しい設定はバックグラウンドで取得され、利用可能になると、すでに接続済みのすべてのクライアントにプッシュされます。 このモードは、エアギャップ環境や耐障害性の高い導入環境に適しています。
起動手順は以下の通りです:
- ディスクからシードファイルを読み込みます。キャッシュは即座に予熱されるため、ネットワーク呼び出しは不要です。
- HTTP サーバーを直ちに起動します。
- IBM Cloud App Configuration からバックグラウンドで最新の設定を取得します。これにより、シードデータが上書きされ、接続中のすべてのクライアントに通知されます。
- 変更のリアルタイム通知を受け取るために、 WebSocket のアップストリームセッションを、組み合わせごとに1つずつ開いてください。
シードファイルの形式および設定オプションについては、『 App Configuration 』APIリファレンスを参照してください。
設定の変更がSDKに反映される仕組み
App Configuration コンソールで構成の変更が公開されると、その変更は次の手順に従ってSDKクライアントに反映されます
- IBM Cloud App Configuration 関連するアップストリーム・セッション上のプロキシに対して、 WebSocket メッセージを送信します。
- プロキシは、その組み合わせに対する更新された設定を再取得し、キャッシュに保存します。
- プロキシは、更新された設定を接続中のすべてのクライアントにブロードキャストします:
- サーバー SDK は、 WebSocket イベントを受信します。
- クライアント SDK は、更新された設定ペイロードを含む SSE イベントを受信します。
プライマリとバックアップのフェイルオーバー
バックアップインスタンスが設定されると、プロキシは WebSocket セッションおよび設定情報の取得に対して自動フェイルオーバー機能を提供します。
- WebSocket セッション — 各組み合わせは、それぞれ独自のアップストリーム WebSocket を保持します。 プライマリインスタンスが利用できなくなると、プロキシは直ちにバックアップに接続します。 プロキシは15秒ごとにプライマリインスタンスへの接続を再試行し、プライマリが復旧次第、バックアップ接続を閉じます。
- 設定の取得 — HTTP での設定の取得は、プライマリ→バックアップの順序で行われます。
SDKをRelay Proxyに設定する
SDKクライアントを IBM Cloud に直接接続するのではなく、Relay Proxyに接続するには:
- SDKの初期化設定にあるホスト名「 IBM Cloud 」を、プロキシのホスト名とポート番号に置き換えてください。
- Region、guid、API key、collection_id、および environment_id は、リレープロキシの設定で指定された値と同じである必要があります。
その他のSDKコードの変更は必要ありません。
Relay Proxy の利用を開始するには、 App Configuration のサポートまでお問い合わせください。