okuyamaを導入するまでに知っておきたいサーバリソースとの4つの関係

2011年10月12日(水)
岩瀬 高博

続いてMasterNodeですが、MasterNodeはClientとDataNodeの間を橋渡しするGatewayの役目と、DataNodeの管理を行います。ただしMasterNodeを複数台で構築した場合、全てのNodeが2種類の役目を担う訳ではありません。

MasterNodeの内1台がGatewayとDataNode管理を行い、残りはGatewayだけを行います。両方の役目を担うNodeをMainMasterNodeと呼びます。図3はMasterNode.propertiesで、MasterNodeを定義してる箇所です

図3:MasterNode定義部分

ここで定義されている(2)がMainMasterNodeとなります。つまり、(1)と(2)の設定内容が一致した場合に、自身がMainMasterNodeとして起動します。(3)は全てのMasterNodeが定義されており、MainMasterNodeはここの設定を利用して、DataNodeの状態を全てのMasterNodeに伝播します。そして、ここに定義された順番でMainMasterNode障害時にMainMasterNodeに昇格します。

※設定ファイルが利用されるのは起動時の初期化処理のみとなり、以降は設定の動的変更に対応すため全てのMasterNdoeが共有できるように、DataNodeに通常のデータと同じように永続化されそちらの変更などを検知して稼働します。

以上のように、2種類のMasterNodeが存在するため、それぞれでメモリの使い方は異なります。MainMasterNodeを担当する可能性が高いノード、つまり、(3)の先頭よりに定義されているMasterNodeには、Clientとの仲介時に発生するデータをメモリ内に展開する容量と、DataNodeのデータ復旧、再配置時のデータ転送の中間点として利用されるメモリ容量が必要になります。MainMasterNode以外は、Clientとの仲介時における転送分の容量が最低限必要になります。それぞれ図4の計算式で求めることが可能です。

図4:MasterNodeで必要なメモリ容量の計算式

上記は最低限なので、ここにその他のMasterNodeを構成する要素が利用するメモリが加算されます。この場合、少なくとも128MBはその他の要素として検討することをお勧めします。

最後にDataNodeですが、DataNodeはデータを保存する役目を果たすので、保存方式によって利用するメモリ量は大きく異なります。そのため、一概にこれだけあれば良いとは言えません。ただし、どのデータをメモリに保持するかは細かく決定できますので、そちらに関しては次の章で詳しく解説させていただきます。それ以外の部分は先ほどのMasterNodeと同じ計算式で求めることが可能です。

図5:DataNodeで必要なメモリ容量の計算式

そして、DataNodeはデータの保存にメモリを利用した場合にメモリ空間を効率的に利用するSerializeMapという機能を持っています。これはJavaのメモリ空間上にデータを保存する際、インスタンス化されたJavaのObjectではなく、デシリアライズ後に圧縮したbyte型の配列で保持するという機能です。この機能を使うことで(デ)シリアライズオーバーヘッドと引き換えにメモリ空間を効率的に利用できるようになります。DataNode.propertiesに図6の設定を行うことで利用可能です。

図6:SerializeMap機能の設定
株式会社神戸デジタル・ラボ

2006年神戸デジタル・ラボに入社。企業内業務アプリケーション開発に従事。
2008年末から大規模ECサイトのアプリケーション、インフラ周りの運用に従事。
2009年末に分散Key-Value Store”okuyama”をオープンソースとして公開。
2010年から各都道府県で開催されるオープンソースカンファレンスへの出展やセミナー登壇、「NOSQL afternoon in Japan」や、「JavaCloud Meeting Kansai」での登壇といった”okuyama”の普及活動の傍ら、”okuyama”を使ったアプリケーション開発などに従事し、現在に至る。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています