現状のシステムは、同期サービスで実現されている。この方式だと、各サーバ間の通信の途中、サーバの負荷が高い場合等に処理を保留された場合に問題が発生する。例えば、EEからのHTTPリクエストがタイムアウトしてしまう等だ。
この問題を解決するために、非同期サービスで実装する。つまり、今まで一つのSOAPメソッドであったものを、
- サーバ上の要求(req)用のメソッドと、
- 応答受付(resp)用のメソッド
の二つに分ける。
サービス名の命名だが、これはシステム全体で一意になった方が良かろう、ということで、命名規則を作った。
[サーバ名]_[サービス名]_[方向]
ここで言う方向とは、上で述べたreqおよびrespのことである。
サーバ名を付けるのは例えば、PKCS#12ファイルの発行を要求するメソッド(issue_p12)は、RAserverにもCAにも存在する。何故なら、EEからのPKCS#12発行要求は、EEserverで受付けられ、これがSOAPでRAserverに送られ、RAserverからCAへSOAPで送られるためだ。
この方式を採用すると、サーバからクライアントへの通信(resp)のあて先がどこになるのかを、サーバが知る必要がある。これに関しては、
- SOAPの通信元IPを何らかの方法で知る
- クライアントからサーバへの通信(req)のパラメータに埋め込む
の二つが考えられる。前者が自然だが、SOAPの下位層をIPに固定したり、ポート番号を固定することになる。後者は面倒ではあるが柔軟であるので、後者で実装する。
後者でクライアントからサーバへ渡すべき情報は、URIのみになる。SOAPのRPC呼び出しには、URIの他にメソッド名が必要になるが、これは上の命名規則で決まっているので、渡さなくても問題はない。
書くのを忘れていたが、この非同期方式を採用すると、上り(req)下り(resp)の通信が一対であることを確認するため、セッションIDつける必要がある。
Posted by fujino at 2005年04月02日 16:03 | TrackBack