〜znodeステータス編〜こんにちはfukuです。前回は実際にソースコードから内部的なデータノードの管理について解説を行いました。今回は、前回少し紹介を行なったznodeのステータスについて詳細に説明を行なって行きます。zxidznodeのステータスの説明に入る前に、zxidについての説明を行います。ZooKeeperはもともと、複数のサーバにて分散して動作するように設計がされています。そのため、各サーバが協調して動作するように、さらにはデータノードを定期的に永続化をする際に、データの整合性を保つためにzxid(ZooKeeperトランザクションID)というものがあります。zxidはスタンドアローンとクラスタとの実行で少し役割の範囲が異なりますが、ここではスタンドアローンでの場合を考えます。スタンドアローンでは主にデータの整合性を保つためにzxidを利用します。そのためノードの追加や変更などのデータ更新を行うたびに、シーケンシャルに増加する値としてzxidがあるという認識で大丈夫です。znodeのステータスではここで、znodeを操作することでどのようにステータスが変化するのかを見て行きましょう。/testノードを作成し、ステータスを参照します。0cZxidでは対象のznodeを作成した時のzxid、ctimeはznodeを作成したシステム時間がそれぞれ記録されます。上記から/testノードを作成した時のzxidは0x16であることがわかります。次にmZxidとmtimeは、それぞれznodeが最終更新された時のzxid、システム時間となるので、以下のように実際に更新してみます。0znodeを更新することでmZxidとmtimeが変更されていることがわかります。zxidの値もインクリメントされてセットされていることが確認できます。続いてpZxidですが、こちらは子ノードを最終更新したzxidとなります。cversionは子ノードのバージョン番号となっていて、子ノードが変更されるたびにバージョン番号が変更されます。1注意しなければならないのは、pZxidやcversionはあくまで直属の子ノードに対するものであるので、孫にあたるznodeに対してはステータスの変更は起こりません。1続いてdataVersionですがこちらはznodeに格納するデータのバージョンになります。このdataVersionを比較することによって、他のクライアントが対象データを書き換えを行ったかをチェックすることができます。znodeに対してデータの書き込みを行う際に、バージョンを指定するオプションがあり、指定したバージョンが現在のdataVersionと一致する時のみ、書き込みを行うことができます。これによって他のクライアントが書き込みを行った場合には、書き込みを避けると行ったことが可能になります。1aclVersionはデータノードに設定されているアクセス権のバージョンを示す値となります。1ephemeralOwnerはEPHEMERALモードのデータノードに対してセッションIDを格納ために利用されます。これによってZookeeperは特定のクライアントのセッションが切断された時に、対象のセッションIDとEPHEMERALモードのデータノードに格納されているephemeralOwnerを比較して一致すれば、そのデータノードを削除します。zkCliの起動ログ。0最後にdataLengthとnumChildrenの値ですが、こちらは文字の通りで、データノードに格納されているデータのバイト数と、子ノードの個数をそれぞれ表しています。おしまいに今回はデータノードのステータス管理について記述していきました。zxidやバージョン管理を行うことで、複数のクライアントがデータノードに関しての操作を行っても協調しながら状態管理が行えるようになります。〜データツリー編〜こんにちはfukuです。~ZooKeeper操作編~こんにちは、fukuです。採用情報フロムスクラッチは常に優秀なソフトウェアエンジニアを募集しています。vol.2月別アーカイブ検索リンクb→dashWantedly運営会社はてなブログをはじめよう!f-scratchさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。