• 検索結果がありません。

Java オンラインプラグイン機構

データプレーンがパケットのフォワーディングを続ける技術である。コントロールプレーンが停止 している間もパケットのフォワーディングは継続されるが、ルーチング処理は停止しているため、

headless forwardingという状態である。

non-stop forwardingの問題点は以下の2点である。

headless forwarding状態は、ルーチングのループや、ブラックホール(ダウンしたルートへの パケット送信によるパケット紛失)が発生するなど、危険が大きい。計画的(planned)なコン トロールプレーンの停止であれば、周囲の環境が変化しないようにオペレーションすることは 不可能ではないが、オペレーションコストがかかるのが問題である。

ステートレスなパケット中継であればデータプレーンによるパケット転送が可能であるが、SIP のようなステートフルなパケット処理ではコントロールプレーンの介在が必須である。

以上の理由により、ルータにおいても、オペレーションコストや信頼性の観点から、コントロー ルプレーンの停止を伴わないプログラム更新機能が求められている。

5.4.5 Linuxのプラグイン

Linuxにおいても、ライブパッチと呼ばれるC++のプラグインと同様の技術が存在する。我々は、

OSDLで検討されているCGL(Carrier Grade Linux) [66]の機能として、Pannusと呼ばれるLinux のライブパッチ機能を実装した [67]。

Pannusの実装は、C++のプラグイン同様、旧関数の先頭にジャンプパッチを当てて新関数にジャ

ンプさせる方式である。適用性や制限事項についてもC++のプラグイン同様である。また、同様の 実装として、鵜飼氏のライブパッチも存在する[68]。

5.4.6 既存の機構のまとめ

上記から、交換機のようなシステムにおいて、オンラインプラグイン機構が最も修正パターンの カバー率が高い。その他の機構は、Javaを扱うことができるが、適用範囲やパフォーマンスの点で 不十分である。従って、これらの機構の利点を考察し、筆者は、Javaオンラインプラグイン機構を 考案した。

5.5. Javaオンラインプラグイン機構 63

5.5.1 基本的な手順

既存の交換機におけるオンラインプラグイン(C++オンラインプラグイン)機構は、既存プログ ラムと別に修正プログラムを同時に存在させる方式である。オンラインJavaプラグイン機構の基本 的な考え方は、C++オンラインプラグインと同様である。

置換えの単位は、Javaのクラスである。

基本的な手順を下記に示す。

修正されたメソッドを含む新しいJavaクラスは、システムのメインメモリにロードされる。

この段階では、Java中間コードがロードされていることに注意。

ローダは、古いJavaクラスのメソッド呼出を、新しいJavaクラスのメソッド呼出に切替える。

オンラインプラグイン実行後に、もし異常が発生した場合は、保守者操作あるいはシステムが 自律的にロールバックを行ない、旧状態に復帰する。

オンラインプラグイン後、一定の監視期間を経過後も異常が発生しない場合は、オペレータ は、確認のコマンド(commit)により、投入したプラグインを確定することができる。

5.5.2 Javaオンラインプラグインファイルのインストールと切替え

Javaプログラムは、Java仮想機械(Java VM)によって制御・実行される。Javaプラグイン機構

はJava VMの中に組み込まなければならない。筆者は、前述のシーケンスに基づく基本的な機能を

明らかにした。

Javaにおいては、ツールの位置付けで、Javaクラスを入れ換えるための基本的な機能が存在し、

これを元にJavaオンラインプラグイン機構まで拡張できると考えた。

HotSwap [69–72]と呼ばれるこの機構は、JPDA(Java Platform Debugger Architecture)の一部 であり、そして、主として、システム開発の間のデバッグの効率化のために用いられる。

筆者は、HotSwapの機能修正および機能拡張により、HotSwapの基本機能に基づいたJavaオン ラインプラグイン機構を構築した。

HotSwapは、Javaのデバッグ機構であるJPDA(Java Platform Debugger Architecture)の一部 として開発されており、主にJava統合開発環境においてデバッグを効率化するために利用されて いる。

HotSwap機能は、旧クラス名(クラスパス)と、新クラスのディスク上の位置を指定することによ

り、クラスロードからメソッドの切り替えまでを実行する。

Javaプラグイン機構を図29に示す。

プラグインコンソールは保守者のためのユーザインタフェース部分であり、ここからコマンド投 入と状態参照を行う。

プラグインエージェントは、プラグインコンソールからの指示に従い、プラグインファイルの投 入/取り外し、投入したプラグインファイルの管理、コミット処理を行う。プラグインエージェント は、Javaのデバッグ機能(JDB)によってJavaVMと接続される。

target system in service J ava cl asses J avaV M

J D B

p l u g-in agent

o p eratio n terminal

p l u g-in co nso l e p l u g-in/

p l u g-o u t mech anism

p l u g-im management

p l u g-in management

tab l e

co mmit mech anism f il e o p eratio n

mech anism

p l u g-in interf ace

図29: Javaオンラインプラグイン機構