kvs okuyama-20110818
TRANSCRIPT
Kobe Digital Labo, Inc.
岩瀬 高博
Twitter: @okuyamaoo
Mail: [email protected]
http://www.facebook.com/okuyama.jp/
Distributed Key-Value Store
1.okuyamaについて
2.okuyamaのユニークな機能
3.現在の利用事例のご紹介
4.最後に
アジェンダ
okuyamaとは? ・概要
・全体イメージ
・各コンポーネントとそれぞれの仕組み
・データ一貫性
・スケールアウトによる性能向上
・SPOFの存在しない構成
・okuyamaは全てJavaで作られている
分散Key-Value Storeです
>2009年の12月から開発をはじめ
現在 Version 0.8.7.2
・全て一からの実装になります
>永続化の仕組み, ネットワークI/O周りの仕組み,
レプリケーションの仕組み全てオリジナルとなります
概要
・全体イメージ
・Client → Master Node → Data Node(×3)
Master Node
Data Node
Data Node
Client
Client
Master Node Client
Data Node
Data Node
Data Node Data Node
Data Node Data Node
全体イメージ
Data Node
Data Node
Data Node
Data Node
・クライアント
Client
Client
Client
okuyamaへの問い合わせを実現
・専用クライアントはJavaとPHPが実装済み
クライアントコンポーネント
・MasterNode
MasterNode
MasterNode
・クライアントからのI/F
・サポートプロトコル
>オリジナル
>Memcached
・set ・get ・add
・delete ・incr ・decr
・gets ・cas
※expire、flagも対応
>HTTP
・GET
・データノード管理
>データ入出力
サポート分散アルゴリズム
1. ConsistentHash
>生存監視
起動時のデータリカバリ
・パーティション
・制限台数なしに冗長化可能
MasterNodeコンポーネント
ネットワークの仕組み ・ネットワークメカニズム >接続毎にWorkerスレッド(プロセス)を生成すると
CPUに高い負荷となる
>Workerをあらかじめ生成していると
生成負荷はないが、クライアントが接続を
切断しないとWorkerが枯渇する
Client
Client
Client
Client
Server
Worker
生成
ネットワークの仕組み ・ネットワークメカニズム
Accept Queue
Connect Client
Accept Queue
Worker
I/O Read
Queue
Write Client
I/O Read Queue
Worker
Main Job
Queue
Client
Main Job Queue
Worker
Respond to 処理別キューイングメカニズム
>タスクQueue + Workerプール
処理を分類し段階的に処理
各Workerの処理終了後は
Queueに返却
処理別のQueue
・ネットワークメカニズム
内部ではこの仕組みを多重化している
Accept Queue
Connect Client
I/O Read
Queue
Write Client
Main Job
Queue
Respond to
Main Job
Queue
Main Job
Queue
I/O Read
Queue
I/O Read
Queue
Accept Queue
Accept Queue
ネットワークの仕組み
・DataNode
DataNode
・データの保存を実現
・データ保存方式を選択可能
・最大3ノードにデータを保存
・アクセスバランシング
・連鎖的ダウンの予防
DataNode
DataNodeコンポーネント
DataNode DataNode
DataNode DataNode
DataNode DataNode
DataNode
DataNode
DataNode
DataNode
・データノードへの保存方式を選択可能
1.全てのデータをメモリに保存
>非永続型
2.データ操作履歴のみファイルに保存
>永続型
3.データ本体をファイルに保存
>永続型
4.全てをファイルに保存
>永続型
ストレージの仕組み
Key = メモリ
Value = メモリ
Key = メモリ
Value = メモリ + 操作記録ファイル
Key = メモリ
Value = ファイル
Key = ファイル
Value = ファイル
+ 操作記録ファイル
+ 操作記録ファイル
Data Node
・データへの操作を全てファイルに時系列に書き出し
Key5 = Value5
[履歴記録ファイル]
登録,Key1,Value1 登録,Key2,Value2
登録,Key3,Value3 登録,Key4,Value4
登録,Key5,Value5
DataNode
処理内容を最後尾に追記
Key5 = Value5
永続媒体へ
メモリ or ファイル
データ変更処理
ストレージの仕組み
・記録ファイルからデータを復元
Key1 = Value1 Key2 = Value2
Key3 = Value3 Key4 = Value4
②メモリに反映
[データノードのメモリ]
DataNode
登録,Key1,Value1
登録,Key2,Value2 登録,Key3,Value3
登録,Key4,Value4 登録,Key5,Value5
削除,Key5,Value5
[履歴記録ファイル]
①記録ファイルから順次操作を読み込み
復元完了!!
ストレージの仕組み
・仮想メモリ機構 ・完全ディスクモード以外の場合にメモリ使用量が
上限に達した場合に自動的にディスクをメモリとして利用
・Value圧縮機構 ・Valueを保存する際に圧縮し保存する(zipアルゴリズム)
圧縮しても意味がないデータは自動判定
・Valueがメモリモードの場合のみ利用可能
・データファイル遅延書き込み機構 ・トランザクション、データ両ファイルのディスクへの書き込みを
遅延させることが可能
・データ保全性の面ではトレードオフ
ストレージの仕組み
・複数データノードでのデータ一貫性
複数のノードに同一の値を保持していると
データが異なるタイミングが発生する
データ一貫性
DataNode DataNode DataNode
データ保存 保存 保存 未保存
データ取得 データ取得 !=
データ一貫性 ・データ一貫性の性質を選択
1.弱一貫性
>全てのデータノードにランダムにアクセス
2.中一貫性
>常に最後に保存したデータノードからアクセス
3.強一貫性
>データノードの値を検証
MasterNode
スケールアウトによる性能向上 ・ノード追加による性能向上
DataNode
DataNode DataNode
DataNode
DataNode
DataNodeは仮想的に
円上に配置され
アルゴリズムに従って
データ配分される
対応範囲が広いと
多くのデータを保持
スケールアウトによる性能向上 ・ノード追加による性能向上
DataNode
DataNode
DataNode
DataNode
DataNode
DataNode ノードを追加
この範囲のデータを
新しいノードに移行
新しいノードへの
データ移行は全て
自動で行われる
スケールアウトによる性能向上 ・ノード追加による性能向上 データ移行中は2つのサークルを使用
1.データへの登録 2データ取得、削除
>新しいサークル >新しいサークル > 古いサークル
システム停止無しでスケールアウト可能
MasterNode
古いサークル 新しいサークル
SPOFの存在しない構成 ・データノード障害発生
MasterNode
DataNode クライアント MasterNode
①データ取得
DataNode
もう一つのノードから取得
②データ保持
ノード割り出し
DataNode
DataNode
Data Node
Data Node
Data Node
Data Node
MasterNode
SPOFの存在しない構成 ・マスターノード障害発生
クライアント
①データ取得
別のマスター ノードに再接続 処理続行
障害発生!!
MasterNode
DataNode
DataNode
DataNode
DataNode
Data Node
Data Node
Data Node
Data Node
SPOFの存在しない構成 ・自動データリカバリー機能
③定期的に再起動していないか確認
②障害発生を検知
⑤片側のノードから データを復元
復元中もシステムは停止しない
①各データノードを定期的に監視
④再起動を検知
※別筐体で起動しても問題ない
MasterNode
MasterNode
DataNode
DataNode
DataNode
DataNode
Data Node
Data Node
Data Node
Data Node
1台のマスターノード、データノード構成で
900クライアントから負荷テストを実施
あらかじめ750万件を登録
1分間で実行したGet、Set処理の合計と
1秒当たりの処理件数を算出
Get Set
480万回/min 290万回/min
8万回/sec 4.8万回/sec
・1台でも非常に高いパフォーマンスを発揮
・CPU:Core i5(3.2GHz)
・Memory:4GB
・HDD:SATA500GB (7200rpm)×2
・NIC:1000Base-T
・OS:CentOS5.5(64bit)
使用マシンスペック クライアント クライアント クライアント クライアント
クライアント クライアント クライアント クライアント クライアント
DataNode
クライアント クライアント クライアント クライアント クライアント
クライアント クライアント クライアント クライアント クライアント
900クライアント
MasterNode
永続化モード
Valueメモリ
Key長:100-105バイト Value長:100-105バイト
性能
ユニークな機能
・タグ機能
・JavaScript機能
・パーティション機能
・全文検索機能
タグ機能
Key Value Tag KVS
RDBMS
KVS
タグをデータに付加することができる
Key Value memcached
MySQL
okuyama
“The world‟s most popular open source database”
memcached
MySQL
okuyama
“The world‟s most popular open source database”
“The world‟s most popular open source kvs”
“Distributed Key Value Store implemented in Java”
“The world‟s most popular open source kvs”
“Distributed Key Value Store implemented in Java”
タグ機能
タグ”KVS”を指定すると
Key Value Tag KVS
RDBMS
KVS
memcached
MySQL
okuyama
“The world‟s most popular open source database”
“The world‟s most popular open source kvs”
“Distributed Key Value Store implemented in Java”
関係するキーをまとめて取得できる
(Valueも取得可能)
{“memcached”, “okuyama”}
タグをデータに付加することができる
JavaScript実行機能
Client
Key=“okuyama”
JavaScript=”if (dataValue == „nosql‟) { …..”
Request
Key=okuyama
Value=“nosql”
Execute JavaScript
結果を取得できる
(更新することも可能)
DataNode MasterNode
JavaScriptをDataNodeで実行
データを移動せずにDataNode側の資源で
処理可能
okuyamaのクラスター内に個別領域を作成
・1つのokuyamaクラスターを複数の用途で共有利用
パーティション機能
・パーティションの容量は可変
>初期設定は不要
・パーティション数の限度はなし
>追加、削除の制限なし
・利用側はMasterNodeのポート単位
>memcachedクライアント等でも意識
せずに利用可能
・内部的にはパーティション単位での
プレフィックス付加での分離
・暗号化などは今後の検討課題
全文検索機能 標準機能として全文検索機能を搭載
>機能特徴
1.N-Gram方と、辞書方式のMix(ダブルバイト文字対応)
2.N-GramのNの部分はIndex作成・検索時に
自由に設定可能
3.作成Indexのグルーピングが可能
全文検索機能 ・検索Indexをグルーピング
データ登録時に任意のグループを指定することで
検索時の範囲を限定することが可能
>検索対象の文字列の内容を
グループを決めて検索可能
twitterのグループから
“XXX検索ワード”を検索
他のグループは検索対象から
外せる
blog
ATND
利用事例
・共有キャッシュサーバ
・データ集約ストレージ
・ソーシャルアプリ向けホスティングサービスの
“アプリプラットフォーム”で利用
>アプリプラットフォームを利用されている
ユーザにネットワーク越しに利用できる
memcachedサーバとして提供
okuyamaは冗長構成で構築しサーバメンテナス
などは全てプラットフォーム側で実施
共有キャッシュサーバ ~リンク様
・okuyamaを利用して構築したクラスターを
サービス利用ユーザにパーティション単位で提供
構築事例(1) ~リンク様~
・利用側は使った容量のみの
料金で冗長化された、メンテナン
スフリーのストレージを利用可能
・管理は個別管理ではなくクラス
ターの管理のみで多数のユーザ
にサービス提供できる
・現在キャッシュサーバ用途で展開
今後はログサーバ・画像サーバなど
企画中
・複数のシステムで利用するデータを
集中管理するストレージ基盤に利用
データ集約ストレージ
>商品販売時に利用するマスター情報などを
システム単位で管理していたところを1箇所で
管理して各システムは集約ストレージ経由で
データ参照するよう変更
・システムの持つ共有意義の強いデータを
集中管理するストレージ基盤を開発
構築事例(2) 某アパレル企業様
・商品マスタ、ユーザマスタ、
在庫情報など複数のシステムが
利用するデータを集中管理
・okuyama内にパーティションを
使ってデータ単位の領域を作成
・データ別にアクセス用APIを
WebAPIとして随時開発、追加
アプリケーションはAPIを利用
することでokuyamaを意識しな
い利用を実現
最後に
・Information
UserGroup
http://groups.google.com/group/kvs_okuyama/
Development
http://sourceforge.jp/projects/okuyama/
http://www.facebook.com/okuyama.jp