何回かに分けて FOBAS CSC Ver.3 の特徴のご紹介して行くシリーズの第2弾です。
3日坊主にならないように頑張ります。(^^;
今回は前回の予告通り、アーキテクチャの変更による具体的なメリットについてご紹介
していきます。
■アーキテクチャの変更
前回も触れましたが、Ver.2 では、Javaアプリケーションサーバ (jboss) をベースに
実装の全てが JavaEE の EAR としてパッキングされていました。
これは、アプリケーションをまとめてライフサイクル管理できたり、クラスローダ階層
を自由にコントロールでき、FOBAS CSC のようにオープンソースライブラリを多用する
アプリケーションには大きなメリットがありました。
ただ、ライフサイクルをひとつに出来る事は、FOBAS CSC のようなインターネット接続
を用いるアプリケーションにとっては諸刃の剣で、ネットワークの不測の障害や、アプ
リケーションの些細な問題で、ログレベルを変更したり再起動したいニーズは発生しま
す。その際に、ユーザから見て最も重要なファイルシステムサービスも停止してしまう
という問題がありました。
Ver.3 では、C言語実装への変更に伴い、ファイルシステムサービスとバックグラウンド
サービスのプロセスを分離し、バックグラウンドの問題やサービス停止がファイルシス
テムに影響しない構造にしました。
FOBAS CSC Ver.3 では、以下のプロセス構造を持っています。
1) cscfs3 (cscis3) ファイルシステム(iSCSIデバイスファイル) 実装
FUSE Low-Level API を用いたファイルシステム実装です。Ver.2 では High-Level
API を JNI でブリッジし、Java でエンジン処理が記述されていました。JNI コール
によるコンテキストスイッチコストが大きく、Ver.2 の性能ボトルネックになって
いました。Ver.3 では全て Native C で実装されていますので、ボトルネックが解消し
快適な性能で利用できるようになりました。
2) cscftaskd メタデータ更新機能(クラスタレプリケーション機能)実装
ファイルシステムの変更点をメタデータに反映する処理を担います。
cscfs3, cscis3 とは、ftaskq キューで非同期接続されています。このメッセージを
取り出して、メタデータを管理するデータベースを更新します。
さらに、5分毎にメッセージをアーカイブして、マスタテーブルの更新差分と併せて
クラウドストレージにアップロードします。これが差分スナップショット処理です。
別のスレッドでは、5分毎にクラウドストレージに他のクラスタノードの差分スナッ
プショットファイルが存在しないかチェックしています。ファイルがあればダウンロ
-ドしてデータベースを更新します。
3) cscsyncd ステージデータ作成機能実装
ファイルシステムに格納されたデータをクラウドに格納する形式に加工する処理を担
います。
cscftaskd とは、syncq キューで非同期接続されています。クラウドへの格納対象フ
ァイルを分割、圧縮、暗号化します。
4) cscslaved クラウドデータ入出力機能実装
クラウドストレージなどのバックグラウンドストレージとのデータ入出力を行います。
cscsyncd とは、slaveq* キューで非同期接続されています。存在するストレージサー
ビス数分のキューが存在し、それぞれにスレッドが起動されています。
実際のストレージへ格納するためのプログラムは、Java の SPI に合わせて実装され
ているため、JNI 経由で呼び出す構造になっています。ストレージへのコネクション
コストを下げるため、コネクションプールが実装されています。
cscslaved はもうひとつ重要な機能があります。格納データの重複排除です。各スレ
ッドは、データの格納前にハッシュ値とバイナリの比較により重複するデータの格納
を回避します。
バックグラウンドプロセスは、キャッシュアウトされたファイルのロード処理
(cscslavedが実行)を除いては、ファイルシステム実装とは切り離されており、一時
的なプロセス停止の影響はありません。
ファイルシステム実装を含む全てのプロセスは、cscfs3_mater デーモンにより 10秒間
隔で死活監視され、プロセス障害時には自動的にリカバリされます。
ユーザ視点で見た場合のメリットは、「障害やメンテナンスによるサービスへの影響が
小さくなった」とという短い一文で終わってしまうのですが、システムを保守する視点
から見れば、非常に大きな改善なのではないかと思います。
第2回目は、プロセスアーキテクチャの変更に伴う改善点についてご紹介しました。
次回は、様々な機能がファイルシステムネイティブでサポートされるようになった点を
ご紹介します。