SlideShare a Scribd company logo
Apache ZooKeeper
分散システムのツアー #1
Chris
2014/7/1
#m3dev
https://github.com/m3dev/distrib-systems-tour
Apache ZooKeeper
http://zookeeper.apache.org/
元Hadoop子プロジェクト
(Yahoo!発)
2008年(?)からApacheトップレベル
ZooKeeperとは
“ZooKeeper is a centralized service for
maintaining configuration information, naming,
providing distributed synchronization, and
providing group services.”
と言うと…?
ZooKeeper とは
ZKの用途・使い道を考える前、
まず基本機能を知っておくと良い
基本機能1:ツリー構造
ZKはファイルシステムっぽいツリー構造を提供す
る。
ただし「フォルダ」と「ファイル」を区別しない。どちら
も「ZNode」と呼ぶ。
ZNodeはデータも入れ子も持てる。
基本機能1:ツリー構造
/
/hoge
- data: “hello world”
/hoge/foo
- data: “I am a foo”
/hoge/bar
- data 無し
ZNodeデータについて
● 少量の想定(最大1MB)
○ 大量のデータを持たせると性能が著しく落ちる
● バイナリデータ(byte[])
○ ZKは中身を気にしない
○ 文字列とかJSONが一般的
ZNodeデータ:バージョン管理
ZNodeのデータを変更すると、
バージョン番号がインクリメントされる。
バージョンを指定し条件付き操作ができる。
(Compare-and-swapやETagのイメージ)
“まだバージョン123であれば、
データをこれに更新してください”
基本機能2:ZNode監視
● ZNode作成・削除
● ZNodeデータ変更
● ZNodeの子ノードの作成・削除
のウォッチを登録できる
注意:一度通知を発行したらウォッチは消え、再登
録が必要。
その際、イベントを見落とすかもしれない。
基本機能3:Ephemeral(短命)node
ZNodeを作成したクライアントのセッション終了時
に自動化に消える、特殊なZNode
ZNode監視と組み合わせると便利:
1. クライアントAが短命Node /hoge を作成
2. クライアントBがウォッチを登録
3. クライアントAの突然の死!
4. Nodeが消えて、Bさんに通知が飛ぶ
基本機能4:シーケンシャルZNode
一意のZnode名を保証する仕組み
“create sequential node /hoge/foo-”
→ /hoge/foo-0000000000
“create sequential node /hoge/foo-”
→ /hoge/foo-0000000001
短命+シーケンシャルなZNodeも作れる。
基本機能4:可用性
ZKを複数台のクラスタで運用できる。
(1台構成もアプリ組み込みでも可能)
書き込みはクォーラム(Ex:3台)にレプリケートし
てからACKする。
(Split-brain問題を防ぐため
クォーラムをN/2以上にしなさい)
基本機能4:可用性
ZK1 ZK2 ZK4 ZK5ZK3
クライアント
WRITE ACK
ZooKeeperの使い道
以上の基本機能を使って何ができるか?
● 設定情報の一元管理
● サービス登録・ディスカバリ
● リーダー選挙
● 分散ロック
● バリアー
● FIFOキュー
使い道:設定情報の一元管理
多数のマシンの設定管理は面倒。
ZKに入れれば一元管理できて便利。
アプリ アプリ アプリ アプリ アプリ アプリ
ZK
設定
使い道:サービス登録・ディスカバリ
Hoge
サービス
Hoge
サービス
アプリ
ZK
Hoge
サービス
登録
”Hogeサービスをください”
使い道:サービス登録・ディスカバリ
サービス登録:
● 短命ノード /hogeServices/{id} を作成
○ 短命だからインスタンスが落ちたら消える
● データ=サービスのIPアドレス、など
ディスカバリ:
● /hogeServices/ の子供一覧を取得
● 利用するインスタンスを選ぶ
○ ラウンドロビン、など
使い道:リーダー選挙
Hoge
サービス
Hoge
サービス
ZK
Hoge
サービス
リーダー
リソース
書き込み 読み込み only
使い道:リーダー選挙
リーダー立候補:
● 短命+シーケンシャルZNodeを作成
○ /election/myId_000000N
● Nより小さいノードが
○ 無い → やったー!自分がリーダー
○ ある → 誰かが既にリーダー
■ そのZNodeをウォッチする
■ 消えたら自分がリーダーになる
使い道:分散ロック
基本的にリーダー選挙と同じ仕組み
使い道:バリアー
バリアーをセット:
● ZNode /barrier を作成
バリアーをチェック:
● /barrier の有無をチェック
○ 無い → 進んでOK
○ ある → ウォッチを設定
■ ZNodeが削除されたら進んでOK
使い道:FIFOキュー
Consumer
Producer ZK
Producer
コンシューマが1個しかない想定
使い道:FIFOキュー
要素の追加:
● シーケンシャルZNodeを作成
○ /queue/0000000N
○ データ=要素自体
要素の取得・処理:
● /queue/ の子供一覧を取得
● 名前昇順で処理する
○ 処理したらZNodeを削除
ZooKeeper インタフェース
● TCP(defaultポート=2181)
● API
○ Java
○ Ruby (zk gem)
○ ...
● CLI ツール
○ ZooKeeperのtarballに入っている
Apache Curator
http://curator.apache.org/
ZKの標準APIは正直、面倒くさい
Curatorは使い勝手の良いAPIでラップする
+よく使うレシピが実装してある
+いくつかの便利ユーティリティ
その他のおもしろプロジェクト
Ordasity
● https://github.com/boundary/ordasity
● クラスタでの自動ワーク分担
強い依存は要注意
http://engineering.pinterest.
com/post/77933733851/zookeeper-
resilience-at-pinterest
ZKをSPoFにするな!
Quick start (OS X)
$ brew install zookeeper
$ zkServer start
$ zkCli
Connecting to localhost:2181
Welcome to ZooKeeper!
[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 1] create /hoge "hello"
Created /hoge
[zk: localhost:2181(CONNECTED) 2] get /hoge
"hello"
cZxid = 0x8
ctime = Sun Jun 29 12:54:03 JST 2014
...
ハンズオン!
https://github.com/m3dev/distrib-systems-tour
ひな形プロジェクト
● Skinny, Play1
アイデア
● 遅延タスク(メール配信とか)の管理
● サービスディスカバリを使ってみる
● バリアー+WebSocketsで何かを作る

More Related Content

What's hot (20)

PDF
Yahoo!ボックスAPI Hackathon向け資料
Yahoo!デベロッパーネットワーク
 
PDF
Yahoo!ボックスAPI Hackday資料
Yahoo!デベロッパーネットワーク
 
PDF
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
Shinsuke Sugaya
 
PDF
【メモ】一般的に設計書に定義される項目例
Hirokazu Yatsunami
 
PDF
20091030cakephphandson 02
Yusuke Ando
 
PDF
2019-10-18 JXUG Xamarin.Essentials - #3 File System Helpers
Takeshi Fujimoto
 
PDF
R以外の研究ツール
弘毅 露崎
 
PDF
Elasticsearch入門 pyfes 201207
Jun Ohtani
 
PDF
Alfrescoのカスタムテーブルの使い方
Jun Terashita
 
PDF
[Alfresco]ドキュメントライブラリのUIカスタマイズ
Jun Terashita
 
PDF
コード読経会報告書
Masahiko Toyoshi
 
PDF
2019-09-20 JXUG Introduction to Xamarin.Essentials #2 Preferences
Takeshi Fujimoto
 
PDF
DeclarativeSql
Takaaki Suzuki
 
PDF
EucalyptusのHadoopクラスタとJaqlでBasket解析をしてHiveとの違いを味わってみました
Etsuji Nakai
 
PDF
Teclab3
Eikichi Yamaguchi
 
PDF
VPとSPIDERを使ったMySQL運用
Ryuta Kamizono
 
PDF
Sc2009autumn s2robot
Shinsuke Sugaya
 
PPTX
しょしんしゃのためのhello world
wata2ki
 
Yahoo!ボックスAPI Hackathon向け資料
Yahoo!デベロッパーネットワーク
 
Yahoo!ボックスAPI Hackday資料
Yahoo!デベロッパーネットワーク
 
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
Shinsuke Sugaya
 
【メモ】一般的に設計書に定義される項目例
Hirokazu Yatsunami
 
20091030cakephphandson 02
Yusuke Ando
 
2019-10-18 JXUG Xamarin.Essentials - #3 File System Helpers
Takeshi Fujimoto
 
R以外の研究ツール
弘毅 露崎
 
Elasticsearch入門 pyfes 201207
Jun Ohtani
 
Alfrescoのカスタムテーブルの使い方
Jun Terashita
 
[Alfresco]ドキュメントライブラリのUIカスタマイズ
Jun Terashita
 
コード読経会報告書
Masahiko Toyoshi
 
2019-09-20 JXUG Introduction to Xamarin.Essentials #2 Preferences
Takeshi Fujimoto
 
DeclarativeSql
Takaaki Suzuki
 
EucalyptusのHadoopクラスタとJaqlでBasket解析をしてHiveとの違いを味わってみました
Etsuji Nakai
 
VPとSPIDERを使ったMySQL運用
Ryuta Kamizono
 
Sc2009autumn s2robot
Shinsuke Sugaya
 
しょしんしゃのためのhello world
wata2ki
 

Viewers also liked (16)

PDF
Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)
NTT DATA OSS Professional Services
 
PDF
HTrace: Tracing in HBase and HDFS (HBase Meetup)
NTT DATA OSS Professional Services
 
PDF
Sparkコミュニティに飛び込もう!(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)
NTT DATA OSS Professional Services
 
PDF
Hadoop2.6の最新機能+
NTT DATA OSS Professional Services
 
PDF
Hadoop ecosystem NTTDATA osc15tk
NTT DATA OSS Professional Services
 
PDF
Ansibleで構成管理始める人のモチベーションをあげたい! (Cloudera World Tokyo 2014LT講演資料)
NTT DATA OSS Professional Services
 
PDF
Apache Spark 1000 nodes NTT DATA
NTT DATA OSS Professional Services
 
PDF
Sparkをノートブックにまとめちゃおう。Zeppelinでね!(Hadoopソースコードリーディング 第19回 発表資料)
NTT DATA OSS Professional Services
 
PDF
Apache Hadoop 2.8.0 の新機能 (抜粋)
NTT DATA OSS Professional Services
 
PDF
データ活用をもっともっと円滑に! ~データ処理・分析基盤編を少しだけ~
NTT DATA OSS Professional Services
 
PDF
Hadoopのシステム設計・運用のポイント
Cloudera Japan
 
PDF
日々進化するHadoopの 「いま」
NTT DATA OSS Professional Services
 
PDF
Spark MLlibではじめるスケーラブルな機械学習
NTT DATA OSS Professional Services
 
PDF
Hadoopの概念と基本的知識
Ken SASAKI
 
PDF
ちょっと理解に自信がないな という皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)
hamaken
 
PDF
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
hamaken
 
Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)
NTT DATA OSS Professional Services
 
HTrace: Tracing in HBase and HDFS (HBase Meetup)
NTT DATA OSS Professional Services
 
Sparkコミュニティに飛び込もう!(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)
NTT DATA OSS Professional Services
 
Hadoop2.6の最新機能+
NTT DATA OSS Professional Services
 
Hadoop ecosystem NTTDATA osc15tk
NTT DATA OSS Professional Services
 
Ansibleで構成管理始める人のモチベーションをあげたい! (Cloudera World Tokyo 2014LT講演資料)
NTT DATA OSS Professional Services
 
Apache Spark 1000 nodes NTT DATA
NTT DATA OSS Professional Services
 
Sparkをノートブックにまとめちゃおう。Zeppelinでね!(Hadoopソースコードリーディング 第19回 発表資料)
NTT DATA OSS Professional Services
 
Apache Hadoop 2.8.0 の新機能 (抜粋)
NTT DATA OSS Professional Services
 
データ活用をもっともっと円滑に! ~データ処理・分析基盤編を少しだけ~
NTT DATA OSS Professional Services
 
Hadoopのシステム設計・運用のポイント
Cloudera Japan
 
日々進化するHadoopの 「いま」
NTT DATA OSS Professional Services
 
Spark MLlibではじめるスケーラブルな機械学習
NTT DATA OSS Professional Services
 
Hadoopの概念と基本的知識
Ken SASAKI
 
ちょっと理解に自信がないな という皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)
hamaken
 
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
hamaken
 
Ad

More from Chris Birchall (11)

PDF
Scala.js & friends: SCALA ALL THE THINGS
Chris Birchall
 
PDF
Rust 超入門
Chris Birchall
 
PDF
Tour of Distributed Systems 3 - Apache Kafka
Chris Birchall
 
PPTX
Tour of distributed systems 2 - Cassandra
Chris Birchall
 
PDF
Guess the Country - Playing with Twitter Streaming API
Chris Birchall
 
PDF
ScalaCache: simple caching in Scala
Chris Birchall
 
PDF
Hydra
Chris Birchall
 
PDF
Load testing with gatling
Chris Birchall
 
PDF
Debugging and Testing ES Systems
Chris Birchall
 
PDF
Phone Home: A client-side error collection system
Chris Birchall
 
PDF
Branching Strategies: Feature Branches vs Branch by Abstraction
Chris Birchall
 
Scala.js & friends: SCALA ALL THE THINGS
Chris Birchall
 
Rust 超入門
Chris Birchall
 
Tour of Distributed Systems 3 - Apache Kafka
Chris Birchall
 
Tour of distributed systems 2 - Cassandra
Chris Birchall
 
Guess the Country - Playing with Twitter Streaming API
Chris Birchall
 
ScalaCache: simple caching in Scala
Chris Birchall
 
Load testing with gatling
Chris Birchall
 
Debugging and Testing ES Systems
Chris Birchall
 
Phone Home: A client-side error collection system
Chris Birchall
 
Branching Strategies: Feature Branches vs Branch by Abstraction
Chris Birchall
 
Ad

Tour of distributed systems 1 - ZooKeeper