ARMS Proxy サーバ

ARMS Proxyは、サービスアダプタと直接ARMSプロトコルを用いて通信する中継サーバの役割を果たします。

ARMS Proxyとして動作させるためのソフトウェアはスタンドアロンで動作するPythonスクリプトとして作成されており、SMF SDK からインストールを行い、適切に設定を行うことで、特に開発作業を行うことなくそのまま動作可能となります。

本章では、ARMS Proxyで実現している機能と、サービスアダプタとの通信部分のシーケンスや状態管理等について解説します。

ARMS Proxyの機能

ARMS Proxyは、サービスアダプタとRSの間を中継するProxyの役割を果たします。 ARMS Proxyの内部構造を図に表すと以下のようになります。

../_images/proxy-model1.png
Pullリクエスト処理部
SAからのコンフィグ探索リクエストなどを受信します。 SAとの通信にはARMSプロトコルを使用します。 受信したメッセージは対応するXML-RPCのメソッドに変換されてからRSに送信されます。
Push実行部
RSからのオペレーションリクエストをSAに対して実行します。 SAとの通信にはARMSプロトコルを使用します。 オペレーションを実行した結果はオペレーションリザルトとしてARMS Proxy内部に保存されます。
オペレーションリクエスト
SAに対するオペレーションリクエストを保持するためのバッファ領域です。 RSからのオペレーションリクエストの受理と、SAへの実行は非同期で行われるため、ARMS Proxy内部に一時的にバッファしておく必要があります。
オペレーションリザルト
SAに対するオペレーションの結果を保持するためのバッファ領域です。 Pushハンドラで取得したオペレーションの結果が保持され、XML-RPCインターフェイス経由で取得することができます。
XML-RPCインターフェイス
RSとの通信インターフェイスです。 RSとの通信はARMSプロトコルではなく、XML-RPCを用いて行います。

SA-Proxyインターフェイス

本節では、SAと通信を行う際のインターフェイスについて解説します。

SAとARMS Proxyの間の通信は、すべてARMSメッセージをHTTPS(HTTP over TLS)プロトコル上で送受信することで実現します。 ProxyはSAからのHTTPSリクエストをTCPポート443番で受け付けます。 ProxyがSAに対してPushオペレーションを送信する場合は、SAが指定したTCPポートに対して接続を行います。

ARMSメッセージの受信

ARMS ProxyはSAからのHTTPSリクエストを受信すると、まずRSからSAの認証鍵を取得し送信元の認証を行います。 認証に成功した場合、次に内容の妥当性を検証します。 ARMSメッセージはすべてXML文書であるため、XML文書としての妥当性(validity)を確認します。 そしてARMSメッセージの中に含まれるDistribution-IDが先の認証結果と一致してはじめて内容の処理を開始します。

受信したARMSメッセージがPullリクエストの場合、ARMSメッセージの内容をRS-ProxyインターフェイスのXML-RPCにおける表現形式に変換した後、RSに中継します。 RSがそれに対し処理結果を返してくると、処理結果をARMSメッセージに変換して応答メッセージを返します。

受信したARMSメッセージがPushリクエストの結果通知(done-request)の場合、処理結果をいったん内部形式に変換してからオペレーションリザルト格納領域に保管し、結果受理応答をSAに返します。 Proxyはその後、RSからRS-Proxyインターフェイスを介して結果取得要求を受信すると、オペレーションリザルトを取り出しXML-RPCにおける表現形式に変換してRSに受け渡します。

ARMSメッセージの送信

RSがRS-Proxyインターフェイスを介してPushオペレーションの実行をARMS Proxyに対して指令すると、ARMS Proxyはオペレーションの内容をいったんオペレーションリクエスト格納領域に保管し、続いて送信処理を開始します。

まずSAのARMSメッセージ待ち受け先URIに対してHTTPSで接続します。 この接続先URIはRSからARMS Proxyへの指示に含まれます。 接続確立後、ARMS ProxyはHTTPSプロトコル上でSAのサーバ証明書を要求します。 続けてサーバ証明書の検証を行い、接続先SAが正しいことを確認します。

次にオペレーションリクエスト格納領域に保持されているPushオペレーションの内容をARMSメッセージに変換し、送信します。 ARMSメッセージに記述されたオペレーションの内容によって、SAは2通り応答を返します。

SAが即時に処理可能なメッセージ(1way message)の場合、SAはARMS Proxyに対して処理結果をそのまま返します。 ARMS Proxy は処理結果を受け取るといったんオペレーションリザルト格納領域に保存し、オペレーションが成功したか失敗したかの簡単な情報だけをRSに通知します。 RSはその後の必要な時にRS-Proxyインターフェイスを介して処理結果を取得することができます。

SAが受信したARMSメッセージの処理に時間がかかる場合(2way message)、SAはARMS Proxyに対しメッセージを受信したことだけを応答します。 するとARMS ProxyはRSに対してSAで処理が始まったことを通知します。 その後SAで処理が完了または失敗すると、SAはARMS Proxyに対して結果通知(done-request)を送信します。 ARMS Proxyが結果通知を受信した後の動作は前節を参照下さい。