kvs okuyama-20110818

38
Kobe Digital Labo, Inc. 岩瀬 高博 Twitter: @okuyamaoo Mail: [email protected] http://www.facebook.com/okuyama.jp/ Distributed Key-Value Store

Upload: takahiro-iwase

Post on 25-May-2015

1.545 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Kvs okuyama-20110818

Kobe Digital Labo, Inc.

岩瀬 高博

Twitter: @okuyamaoo

Mail: [email protected]

http://www.facebook.com/okuyama.jp/

Distributed Key-Value Store

Page 2: Kvs okuyama-20110818

1.okuyamaについて

2.okuyamaのユニークな機能

3.現在の利用事例のご紹介

4.最後に

アジェンダ

Page 3: Kvs okuyama-20110818

okuyamaとは? ・概要

・全体イメージ

・各コンポーネントとそれぞれの仕組み

・データ一貫性

・スケールアウトによる性能向上

・SPOFの存在しない構成

Page 4: Kvs okuyama-20110818

・okuyamaは全てJavaで作られている

分散Key-Value Storeです

>2009年の12月から開発をはじめ

現在 Version 0.8.7.2

・全て一からの実装になります

>永続化の仕組み, ネットワークI/O周りの仕組み,

レプリケーションの仕組み全てオリジナルとなります

概要

Page 5: Kvs okuyama-20110818

・全体イメージ

・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

Page 6: Kvs okuyama-20110818

・クライアント

Client

Client

Client

okuyamaへの問い合わせを実現

・専用クライアントはJavaとPHPが実装済み

クライアントコンポーネント

Page 7: Kvs okuyama-20110818

・MasterNode

MasterNode

MasterNode

・クライアントからのI/F

・サポートプロトコル

>オリジナル

>Memcached

・set ・get ・add

・delete ・incr ・decr

・gets ・cas

※expire、flagも対応

>HTTP

・GET

・データノード管理

>データ入出力

サポート分散アルゴリズム

1. ConsistentHash

>生存監視

起動時のデータリカバリ

・パーティション

・制限台数なしに冗長化可能

MasterNodeコンポーネント

Page 8: Kvs okuyama-20110818

ネットワークの仕組み ・ネットワークメカニズム >接続毎にWorkerスレッド(プロセス)を生成すると

CPUに高い負荷となる

>Workerをあらかじめ生成していると

生成負荷はないが、クライアントが接続を

切断しないとWorkerが枯渇する

Client

Client

Client

Client

Server

Worker

生成

Page 9: Kvs okuyama-20110818

ネットワークの仕組み ・ネットワークメカニズム

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

Page 10: Kvs okuyama-20110818

・ネットワークメカニズム

内部ではこの仕組みを多重化している

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

ネットワークの仕組み

Page 11: Kvs okuyama-20110818

・DataNode

DataNode

・データの保存を実現

・データ保存方式を選択可能

・最大3ノードにデータを保存

・アクセスバランシング

・連鎖的ダウンの予防

DataNode

DataNodeコンポーネント

DataNode DataNode

DataNode DataNode

DataNode DataNode

DataNode

DataNode

DataNode

DataNode

Page 12: Kvs okuyama-20110818

・データノードへの保存方式を選択可能

1.全てのデータをメモリに保存

>非永続型

2.データ操作履歴のみファイルに保存

>永続型

3.データ本体をファイルに保存

>永続型

4.全てをファイルに保存

>永続型

ストレージの仕組み

Key = メモリ

Value = メモリ

Key = メモリ

Value = メモリ + 操作記録ファイル

Key = メモリ

Value = ファイル

Key = ファイル

Value = ファイル

+ 操作記録ファイル

+ 操作記録ファイル

Data Node

Page 13: Kvs okuyama-20110818

・データへの操作を全てファイルに時系列に書き出し

Key5 = Value5

[履歴記録ファイル]

登録,Key1,Value1 登録,Key2,Value2

登録,Key3,Value3 登録,Key4,Value4

登録,Key5,Value5

DataNode

処理内容を最後尾に追記

Key5 = Value5

永続媒体へ

メモリ or ファイル

データ変更処理

ストレージの仕組み

Page 14: Kvs okuyama-20110818

・記録ファイルからデータを復元

Key1 = Value1 Key2 = Value2

Key3 = Value3 Key4 = Value4

②メモリに反映

[データノードのメモリ]

DataNode

登録,Key1,Value1

登録,Key2,Value2 登録,Key3,Value3

登録,Key4,Value4 登録,Key5,Value5

削除,Key5,Value5

[履歴記録ファイル]

①記録ファイルから順次操作を読み込み

復元完了!!

ストレージの仕組み

Page 15: Kvs okuyama-20110818

・仮想メモリ機構 ・完全ディスクモード以外の場合にメモリ使用量が

上限に達した場合に自動的にディスクをメモリとして利用

・Value圧縮機構 ・Valueを保存する際に圧縮し保存する(zipアルゴリズム)

圧縮しても意味がないデータは自動判定

・Valueがメモリモードの場合のみ利用可能

・データファイル遅延書き込み機構 ・トランザクション、データ両ファイルのディスクへの書き込みを

遅延させることが可能

・データ保全性の面ではトレードオフ

ストレージの仕組み

Page 16: Kvs okuyama-20110818

・複数データノードでのデータ一貫性

複数のノードに同一の値を保持していると

データが異なるタイミングが発生する

データ一貫性

DataNode DataNode DataNode

データ保存 保存 保存 未保存

データ取得 データ取得 !=

Page 17: Kvs okuyama-20110818

データ一貫性 ・データ一貫性の性質を選択

1.弱一貫性

>全てのデータノードにランダムにアクセス

2.中一貫性

>常に最後に保存したデータノードからアクセス

3.強一貫性

>データノードの値を検証

MasterNode

Page 18: Kvs okuyama-20110818

スケールアウトによる性能向上 ・ノード追加による性能向上

DataNode

DataNode DataNode

DataNode

DataNode

DataNodeは仮想的に

円上に配置され

アルゴリズムに従って

データ配分される

対応範囲が広いと

多くのデータを保持

Page 19: Kvs okuyama-20110818

スケールアウトによる性能向上 ・ノード追加による性能向上

DataNode

DataNode

DataNode

DataNode

DataNode

DataNode ノードを追加

この範囲のデータを

新しいノードに移行

新しいノードへの

データ移行は全て

自動で行われる

Page 20: Kvs okuyama-20110818

スケールアウトによる性能向上 ・ノード追加による性能向上 データ移行中は2つのサークルを使用

1.データへの登録 2データ取得、削除

>新しいサークル >新しいサークル > 古いサークル

システム停止無しでスケールアウト可能

MasterNode

古いサークル 新しいサークル

Page 21: Kvs okuyama-20110818

SPOFの存在しない構成 ・データノード障害発生

MasterNode

DataNode クライアント MasterNode

①データ取得

DataNode

もう一つのノードから取得

②データ保持

ノード割り出し

DataNode

DataNode

Data Node

Data Node

Data Node

Data Node

Page 22: Kvs okuyama-20110818

MasterNode

SPOFの存在しない構成 ・マスターノード障害発生

クライアント

①データ取得

別のマスター ノードに再接続 処理続行

障害発生!!

MasterNode

DataNode

DataNode

DataNode

DataNode

Data Node

Data Node

Data Node

Data Node

Page 23: Kvs okuyama-20110818

SPOFの存在しない構成 ・自動データリカバリー機能

③定期的に再起動していないか確認

②障害発生を検知

⑤片側のノードから データを復元

復元中もシステムは停止しない

①各データノードを定期的に監視

④再起動を検知

※別筐体で起動しても問題ない

MasterNode

MasterNode

DataNode

DataNode

DataNode

DataNode

Data Node

Data Node

Data Node

Data Node

Page 24: Kvs okuyama-20110818

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バイト

性能

Page 25: Kvs okuyama-20110818

ユニークな機能

・タグ機能

・JavaScript機能

・パーティション機能

・全文検索機能

Page 26: Kvs okuyama-20110818

タグ機能

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”

Page 27: Kvs okuyama-20110818

タグ機能

タグ”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”}

タグをデータに付加することができる

Page 28: Kvs okuyama-20110818

JavaScript実行機能

Client

Key=“okuyama”

JavaScript=”if (dataValue == „nosql‟) { …..”

Request

Key=okuyama

Value=“nosql”

Execute JavaScript

結果を取得できる

(更新することも可能)

DataNode MasterNode

JavaScriptをDataNodeで実行

データを移動せずにDataNode側の資源で

処理可能

Page 29: Kvs okuyama-20110818

okuyamaのクラスター内に個別領域を作成

・1つのokuyamaクラスターを複数の用途で共有利用

パーティション機能

・パーティションの容量は可変

>初期設定は不要

・パーティション数の限度はなし

>追加、削除の制限なし

・利用側はMasterNodeのポート単位

>memcachedクライアント等でも意識

せずに利用可能

・内部的にはパーティション単位での

プレフィックス付加での分離

・暗号化などは今後の検討課題

Page 30: Kvs okuyama-20110818

全文検索機能 標準機能として全文検索機能を搭載

>機能特徴

1.N-Gram方と、辞書方式のMix(ダブルバイト文字対応)

2.N-GramのNの部分はIndex作成・検索時に

自由に設定可能

3.作成Indexのグルーピングが可能

Page 31: Kvs okuyama-20110818

全文検索機能 ・検索Indexをグルーピング

データ登録時に任意のグループを指定することで

検索時の範囲を限定することが可能

>検索対象の文字列の内容を

グループを決めて検索可能

twitterのグループから

“XXX検索ワード”を検索

他のグループは検索対象から

外せる

blog

twitter

ATND

Page 32: Kvs okuyama-20110818

利用事例

・共有キャッシュサーバ

・データ集約ストレージ

Page 33: Kvs okuyama-20110818

・ソーシャルアプリ向けホスティングサービスの

“アプリプラットフォーム”で利用

>アプリプラットフォームを利用されている

ユーザにネットワーク越しに利用できる

memcachedサーバとして提供

okuyamaは冗長構成で構築しサーバメンテナス

などは全てプラットフォーム側で実施

共有キャッシュサーバ ~リンク様

Page 34: Kvs okuyama-20110818

・okuyamaを利用して構築したクラスターを

サービス利用ユーザにパーティション単位で提供

構築事例(1) ~リンク様~

・利用側は使った容量のみの

料金で冗長化された、メンテナン

スフリーのストレージを利用可能

・管理は個別管理ではなくクラス

ターの管理のみで多数のユーザ

にサービス提供できる

・現在キャッシュサーバ用途で展開

今後はログサーバ・画像サーバなど

企画中

Page 35: Kvs okuyama-20110818

・複数のシステムで利用するデータを

集中管理するストレージ基盤に利用

データ集約ストレージ

>商品販売時に利用するマスター情報などを

システム単位で管理していたところを1箇所で

管理して各システムは集約ストレージ経由で

データ参照するよう変更

Page 36: Kvs okuyama-20110818

・システムの持つ共有意義の強いデータを

集中管理するストレージ基盤を開発

構築事例(2) 某アパレル企業様

・商品マスタ、ユーザマスタ、

在庫情報など複数のシステムが

利用するデータを集中管理

・okuyama内にパーティションを

使ってデータ単位の領域を作成

・データ別にアクセス用APIを

WebAPIとして随時開発、追加

アプリケーションはAPIを利用

することでokuyamaを意識しな

い利用を実現

Page 37: Kvs okuyama-20110818

最後に

・Information

UserGroup

http://groups.google.com/group/kvs_okuyama/

Development

http://sourceforge.jp/projects/okuyama/

Facebook

http://www.facebook.com/okuyama.jp

Page 38: Kvs okuyama-20110818