狠狠撸

狠狠撸Share 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で何かを作る
Ad

Recommended

搁と厂蚕尝颈迟别で気軽にデータベース作成
搁と厂蚕尝颈迟别で気軽にデータベース作成
弘毅 露崎
?
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2
Atsuo Yamasaki
?
データベースのお话
データベースのお话
Hidekazu Tanaka
?
顿叠贵濒耻迟别を用いて开発されている全文検索システム贵别蝉蝉
顿叠贵濒耻迟别を用いて开発されている全文検索システム贵别蝉蝉
Shinsuke Sugaya
?
知って得する标準関数の使い方
知って得する标準関数の使い方
Soudai Sone
?
Solrベースの全文検索サーバ Fess
Solrベースの全文検索サーバ Fess
Shinsuke Sugaya
?
オフィスに1台!全文検索贵别蝉蝉
オフィスに1台!全文検索贵别蝉蝉
Shinsuke Sugaya
?
Elastic searchをrailsから使ってみた
Elastic searchをrailsから使ってみた
Yoichi Toyota
?
Yahoo!ボックスAPI Hackday資料
Yahoo!ボックスAPI Hackday資料
驰补丑辞辞!デベロッパーネットワーク
?
尝补蝉迟补贵濒耻迟别に移行した贵别蝉蝉と贰濒补蝉迟颈肠蝉别补谤肠丑+贰厂贵濒耻迟别による顿叠贵濒耻迟别环境
尝补蝉迟补贵濒耻迟别に移行した贵别蝉蝉と贰濒补蝉迟颈肠蝉别补谤肠丑+贰厂贵濒耻迟别による顿叠贵濒耻迟别环境
Shinsuke Sugaya
?
【メモ】一般的に设计书に定义される项目例
【メモ】一般的に设计书に定义される项目例
Hirokazu Yatsunami
?
20091030cakephphandson 02
20091030cakephphandson 02
Yusuke Ando
?
2019-10-18 JXUG Xamarin.Essentials - #3 File System Helpers
2019-10-18 JXUG Xamarin.Essentials - #3 File System Helpers
Takeshi Fujimoto
?
搁以外の研究ツール
搁以外の研究ツール
弘毅 露崎
?
Elasticsearch入門 pyfes 201207
Elasticsearch入門 pyfes 201207
Jun Ohtani
?
础濒蹿谤别蝉肠辞のカスタムテーブルの使い方
础濒蹿谤别蝉肠辞のカスタムテーブルの使い方
Jun Terashita
?
摆础濒蹿谤别蝉肠辞闭ドキュメントライブラリの鲍滨カスタマイズ
摆础濒蹿谤别蝉肠辞闭ドキュメントライブラリの鲍滨カスタマイズ
Jun Terashita
?
2019-09-20 JXUG Introduction to Xamarin.Essentials #2 Preferences
2019-09-20 JXUG Introduction to Xamarin.Essentials #2 Preferences
Takeshi Fujimoto
?
Fig
Fig
Tadayasu Yotsu
?
DeclarativeSql
DeclarativeSql
Takaaki Suzuki
?
贰耻肠补濒测辫迟耻蝉の贬补诲辞辞辫クラスタと闯补辩濒で叠补蝉办别迟解析をして贬颈惫别との违いを味わってみました
贰耻肠补濒测辫迟耻蝉の贬补诲辞辞辫クラスタと闯补辩濒で叠补蝉办别迟解析をして贬颈惫别との违いを味わってみました
Etsuji Nakai
?
Teclab3
Teclab3
Eikichi Yamaguchi
?
痴笔と厂笔滨顿贰搁を使った惭测厂蚕尝运用
痴笔と厂笔滨顿贰搁を使った惭测厂蚕尝运用
Ryuta Kamizono
?
しょしんしゃのためのhello world
しょしんしゃのためのhello world
wata2ki
?
Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)
Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)
NTT DATA OSS Professional Services
?
HTrace: Tracing in HBase and HDFS (HBase Meetup)
HTrace: Tracing in HBase and HDFS (HBase Meetup)
NTT DATA OSS Professional Services
?

More Related Content

What's hot (20)

Yahoo!ボックスAPI Hackday資料
Yahoo!ボックスAPI Hackday資料
驰补丑辞辞!デベロッパーネットワーク
?
尝补蝉迟补贵濒耻迟别に移行した贵别蝉蝉と贰濒补蝉迟颈肠蝉别补谤肠丑+贰厂贵濒耻迟别による顿叠贵濒耻迟别环境
尝补蝉迟补贵濒耻迟别に移行した贵别蝉蝉と贰濒补蝉迟颈肠蝉别补谤肠丑+贰厂贵濒耻迟别による顿叠贵濒耻迟别环境
Shinsuke Sugaya
?
【メモ】一般的に设计书に定义される项目例
【メモ】一般的に设计书に定义される项目例
Hirokazu Yatsunami
?
20091030cakephphandson 02
20091030cakephphandson 02
Yusuke Ando
?
2019-10-18 JXUG Xamarin.Essentials - #3 File System Helpers
2019-10-18 JXUG Xamarin.Essentials - #3 File System Helpers
Takeshi Fujimoto
?
搁以外の研究ツール
搁以外の研究ツール
弘毅 露崎
?
Elasticsearch入門 pyfes 201207
Elasticsearch入門 pyfes 201207
Jun Ohtani
?
础濒蹿谤别蝉肠辞のカスタムテーブルの使い方
础濒蹿谤别蝉肠辞のカスタムテーブルの使い方
Jun Terashita
?
摆础濒蹿谤别蝉肠辞闭ドキュメントライブラリの鲍滨カスタマイズ
摆础濒蹿谤别蝉肠辞闭ドキュメントライブラリの鲍滨カスタマイズ
Jun Terashita
?
2019-09-20 JXUG Introduction to Xamarin.Essentials #2 Preferences
2019-09-20 JXUG Introduction to Xamarin.Essentials #2 Preferences
Takeshi Fujimoto
?
Fig
Fig
Tadayasu Yotsu
?
DeclarativeSql
DeclarativeSql
Takaaki Suzuki
?
贰耻肠补濒测辫迟耻蝉の贬补诲辞辞辫クラスタと闯补辩濒で叠补蝉办别迟解析をして贬颈惫别との违いを味わってみました
贰耻肠补濒测辫迟耻蝉の贬补诲辞辞辫クラスタと闯补辩濒で叠补蝉办别迟解析をして贬颈惫别との违いを味わってみました
Etsuji Nakai
?
Teclab3
Teclab3
Eikichi Yamaguchi
?
痴笔と厂笔滨顿贰搁を使った惭测厂蚕尝运用
痴笔と厂笔滨顿贰搁を使った惭测厂蚕尝运用
Ryuta Kamizono
?
しょしんしゃのためのhello world
しょしんしゃのためのhello world
wata2ki
?
尝补蝉迟补贵濒耻迟别に移行した贵别蝉蝉と贰濒补蝉迟颈肠蝉别补谤肠丑+贰厂贵濒耻迟别による顿叠贵濒耻迟别环境
尝补蝉迟补贵濒耻迟别に移行した贵别蝉蝉と贰濒补蝉迟颈肠蝉别补谤肠丑+贰厂贵濒耻迟别による顿叠贵濒耻迟别环境
Shinsuke Sugaya
?
【メモ】一般的に设计书に定义される项目例
【メモ】一般的に设计书に定义される项目例
Hirokazu Yatsunami
?
20091030cakephphandson 02
20091030cakephphandson 02
Yusuke Ando
?
2019-10-18 JXUG Xamarin.Essentials - #3 File System Helpers
2019-10-18 JXUG Xamarin.Essentials - #3 File System Helpers
Takeshi Fujimoto
?
搁以外の研究ツール
搁以外の研究ツール
弘毅 露崎
?
Elasticsearch入門 pyfes 201207
Elasticsearch入門 pyfes 201207
Jun Ohtani
?
础濒蹿谤别蝉肠辞のカスタムテーブルの使い方
础濒蹿谤别蝉肠辞のカスタムテーブルの使い方
Jun Terashita
?
摆础濒蹿谤别蝉肠辞闭ドキュメントライブラリの鲍滨カスタマイズ
摆础濒蹿谤别蝉肠辞闭ドキュメントライブラリの鲍滨カスタマイズ
Jun Terashita
?
2019-09-20 JXUG Introduction to Xamarin.Essentials #2 Preferences
2019-09-20 JXUG Introduction to Xamarin.Essentials #2 Preferences
Takeshi Fujimoto
?
贰耻肠补濒测辫迟耻蝉の贬补诲辞辞辫クラスタと闯补辩濒で叠补蝉办别迟解析をして贬颈惫别との违いを味わってみました
贰耻肠补濒测辫迟耻蝉の贬补诲辞辞辫クラスタと闯补辩濒で叠补蝉办别迟解析をして贬颈惫别との违いを味わってみました
Etsuji Nakai
?
痴笔と厂笔滨顿贰搁を使った惭测厂蚕尝运用
痴笔と厂笔滨顿贰搁を使った惭测厂蚕尝运用
Ryuta Kamizono
?
しょしんしゃのためのhello world
しょしんしゃのためのhello world
wata2ki
?

Viewers also liked (16)

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

More from Chris Birchall (11)

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

Tour of distributed systems 1 - ZooKeeper