More Related Content
Similar to 2010/07/09 osc kansai-kvsokuyama (20)
More from Takahiro Iwase (8)
2010/07/09 osc kansai-kvsokuyama
- 1. サーバ2 でも構築できる
サーバ2台でも構築できる
構築
分散キーバリューストア
分散キーバリューストア
okuyamaのご紹介と活用事例
のご紹介
紹介と
株式会社 神戸デジタル・ラボ
岩瀬 高博
Mail: iwase@kdl.co.jp
Twitter: @okuyamaoo
http://d.hatena.ne.jp/okuyamaoo/
- 17. システム構成
利用者 アプリ データベース
・スケールアップ
・更新系と検索系を分割
検索ノード
更新ノード
検索ノード
- 18. システム構成
利用者 アプリ データベース
・スケールアップで対応
・更新系と検索系を分割
検索ノード
更新ノード
検索ノード
・スケールアップの限界
・更新系はボトルネック
・管理の煩雑化
- 27. Javaで実装された分散KVS
・全体構成
メイン スレーブ
データノード データノード
スレーブ メイン スレーブ
クライアント データノード データノード
マスターノード
クライアント
メイン メイン スレーブ
マスターノード データノード データノード
クライアント
メイン スレーブ
データノード データノード
・クライアント → マスターノード → データノード
- 30. Javaで実装された分散KVS
・データノード
・データの保存を実現
メイン スレーブ
・データ保存方式を選択可能 データノード データノード
・memcachedプロトコルに対応
メイン スレーブ
>単体でmemcachedの代わりとして データノード データノード
メイン スレーブ
データノード データノード
メイン スレーブ
データノード データノード
- 36. データ保存方式の選択が可能
・データへの操作を全てファイルに時系列に記録
登録
Key5 = Value5
データノード
[履歴記録ファイル]
登録,Key1,Value1
登録,Key2,Value2
登録,Key3,Value3
登録,Key4,Value4
登録,Key5,Value5
最後尾に
最後尾に追記
- 37. データ保存方式の選択が可能
・データへの操作を全てファイルに時系列に記録
登録
Key5 = Value5
データノード
[履歴記録ファイル]
登録,Key1,Value1
登録,Key2,Value2
登録,Key3,Value3
登録,Key4,Value4
登録,Key5,Value5
最後尾に
最後尾に追記
[データノードのメモリ]
Key5 = Value5
データノードのメモリに
データノードのメモリに反映
- 38. データ保存方式の選択が可能
・データへの操作を全てファイルに時系列に記録
削除
Key5
データノード
[履歴記録ファイル]
登録,Key2,Value2
登録,Key3,Value3
登録,Key4,Value4
登録,Key5,Value5
削除,Key5,Value5
最後尾に
最後尾に追記
[データノードのメモリ]
Key5
データノードのメモリに
データノードのメモリに反映
- 40. データ保存方式の選択が可能
・記録ファイルからデータを復元
データノード ①記録ファイルから順次操作を読み込み
登録,Key1,Value1
登録,Key2,Value2
登録,Key3,Value3
登録,Key4,Value4
登録,Key5,Value5
削除,Key5,Value5
[履歴記録ファイル]
- 41. データ保存方式の選択が可能
・記録ファイルからデータを復元
データノード ①記録ファイルから順次操作を読み込み
②メモリに反映
登録,Key1,Value1 Key1 = Value1
登録,Key2,Value2
登録,Key3,Value3
登録,Key4,Value4
登録,Key5,Value5
削除,Key5,Value5
[データノードのメモリ]
[履歴記録ファイル]
- 42. データ保存方式の選択が可能
・記録ファイルからデータを復元
データノード ①記録ファイルから順次操作を読み込み
②メモリに反映
登録,Key1,Value1 Key1 = Value1
登録,Key2,Value2 Key2 = Value2
登録,Key3,Value3
登録,Key4,Value4
登録,Key5,Value5
削除,Key5,Value5
[データノードのメモリ]
[履歴記録ファイル]
- 43. データ保存方式の選択が可能
・記録ファイルからデータを復元
データノード ①記録ファイルから順次操作を読み込み
②メモリに反映
登録,Key1,Value1 Key1 = Value1
登録,Key2,Value2 Key2 = Value2
登録,Key3,Value3 Key3 = Value3
登録,Key4,Value4
登録,Key5,Value5
削除,Key5,Value5
[データノードのメモリ]
[履歴記録ファイル]
- 44. データ保存方式の選択が可能
・記録ファイルからデータを復元
データノード ①記録ファイルから順次操作を読み込み
②メモリに反映
登録,Key1,Value1 Key1 = Value1
登録,Key2,Value2 Key2 = Value2
登録,Key3,Value3 Key3 = Value3
登録,Key4,Value4 Key4 = Value4
登録,Key5,Value5
削除,Key5,Value5
[データノードのメモリ]
[履歴記録ファイル]
- 45. データ保存方式の選択が可能
・記録ファイルからデータを復元
データノード ①記録ファイルから順次操作を読み込み
②メモリに反映
登録,Key1,Value1 Key1 = Value1
登録,Key2,Value2 Key2 = Value2
登録,Key3,Value3 Key3 = Value3
登録,Key4,Value4 Key4 = Value4
登録,Key5,Value5 Key5 = Value5
削除,Key5,Value5
[データノードのメモリ]
[履歴記録ファイル]
- 46. データ保存方式の選択が可能
・記録ファイルからデータを復元
データノード ①記録ファイルから順次操作を読み込み
②メモリに反映
登録,Key1,Value1 Key1 = Value1
登録,Key2,Value2 Key2 = Value2
登録,Key3,Value3 Key3 = Value3
登録,Key4,Value4 Key4 = Value4
登録,Key5,Value5 Key5 = Value5
削除,Key5,Value5
[データノードのメモリ]
[履歴記録ファイル]
- 47. データ保存方式の選択が可能
・記録ファイルからデータを復元
データノード ①記録ファイルから順次操作を読み込み
②メモリに反映
登録,Key1,Value1 Key1 = Value1
登録,Key2,Value2 Key2 = Value2
登録,Key3,Value3 Key3 = Value3
登録,Key4,Value4 Key4 = Value4
登録,Key5,Value5
削除,Key5,Value5
[データノードのメモリ]
[履歴記録ファイル]
復元完了!!
- 50. データ保存方式の選択が可能
・Key値とデータの場所をメモリに保持
登録 「2.」の仕組みを利用
Key5 = Value5
データノード
[データノードのメモリ]
Key5 = 5行目
[データファイル]
Value1
Value2
データファイルにValue値を保存 Value3
メモリにKey値とValue値のファイル内での Value4
Value5
位置を保持
- 61. SPOFの存在しない構成
・データの流れ
メイン スレーブ
データノード データノード
①データ登録 メイン スレーブ
スレーブ
クライアント データノード データノード
マスターノード
メイン メイン スレーブ
マスターノード データノード データノード
メイン スレーブ
データノード データノード
- 62. SPOFの存在しない構成
・データの流れ
②データ登録 メイン スレーブ
データノード データノード
ノード決定
①データ登録 メイン スレーブ
スレーブ
クライアント データノード データノード
マスターノード
メイン メイン スレーブ
マスターノード データノード データノード
メイン スレーブ
データノード データノード
- 63. SPOFの存在しない構成
・データの登録の流れ ③データを2ノードに登録
②データ登録 メイン スレーブ
データノード データノード
ノード決定
①データ登録 メイン スレーブ
スレーブ
クライアント データノード データノード
マスターノード
メイン メイン スレーブ
マスターノード データノード データノード
メイン スレーブ
データノード データノード
- 64. SPOFの存在しない構成
・データの取得の流れ
メイン スレーブ
データノード データノード
①データ取得 メイン スレーブ
スレーブ
クライアント データノード データノード
マスターノード
メイン メイン スレーブ
マスターノード データノード データノード
メイン スレーブ
データノード データノード
- 65. SPOFの存在しない構成
・データの取得の流れ
②データ保持
ノード割り出し メイン スレーブ
データノード データノード
①データ取得 メイン スレーブ
スレーブ
クライアント データノード データノード
マスターノード
メイン メイン スレーブ
マスターノード データノード データノード
メイン スレーブ
データノード データノード
- 66. SPOFの存在しない構成
・データの取得の流れ ③データ取得
②データ保持
ノード割り出し メイン スレーブ
データノード データノード
①データ取得 メイン スレーブ
スレーブ
クライアント データノード データノード
マスターノード
メイン メイン スレーブ
マスターノード データノード データノード
メイン スレーブ
データノード データノード
- 67. SPOFの存在しない構成
・データノード障害発生 障害発生!!
②データ保持
ノード割り出し メイン スレーブ
データノード データノード
①データ取得 メイン スレーブ
スレーブ
クライアント データノード データノード
マスターノード
メイン メイン スレーブ
マスターノード データノード データノード
メイン スレーブ
データノード データノード
- 68. SPOFの存在しない構成
・データノード障害発生 もう一つのノードから取得
②データ保持
ノード割り出し メイン スレーブ
データノード データノード
①データ取得 メイン スレーブ
スレーブ
クライアント データノード データノード
マスターノード
メイン メイン スレーブ
マスターノード データノード データノード
メイン スレーブ
データノード データノード
- 69. SPOFの存在しない構成
・マスターノード障害発生
メイン スレーブ
データノード データノード
①データ取得 メイン スレーブ
スレーブ
クライアント データノード データノード
マスターノード
メイン メイン スレーブ
マスターノード データノード データノード
メイン スレーブ
データノード データノード
- 70. SPOFの存在しない構成
・マスターノード障害発生
障害発生!! メイン スレーブ
データノード データノード
①データ取得 メイン スレーブ
スレーブ
クライアント データノード データノード
マスターノード
メイン メイン スレーブ
マスターノード データノード データノード
メイン スレーブ
データノード データノード
- 71. SPOFの存在しない構成
・マスターノード障害発生
メイン スレーブ
データノード データノード
①データ取得 メイン スレーブ
スレーブ
クライアント データノード データノード
マスターノード
メイン メイン スレーブ
マスターノード
別のマスター データノード データノード
ノードに再接続 メイン スレーブ
処理続行 データノード データノード
- 72. SPOFの存在しない構成
・自動データリカバリー機能
メイン スレーブ
データノード データノード
スレーブ メイン スレーブ
マスターノード データノード データノード
メイン メイン スレーブ
マスターノード データノード データノード
メイン スレーブ
①各データノードを データノード データノード
定期的に監視
- 73. SPOFの存在しない構成
・自動データリカバリー機能
②障害発生を検知
メイン スレーブ
データノード データノード
スレーブ メイン スレーブ
マスターノード データノード データノード
メイン メイン スレーブ
マスターノード データノード データノード
メイン スレーブ
①各データノードを データノード データノード
定期的に監視
- 74. SPOFの存在しない構成
・自動データリカバリー機能
②障害発生を検知
③定期的に再起動していないか確認
メイン スレーブ
データノード データノード
スレーブ メイン スレーブ
マスターノード データノード データノード
メイン メイン スレーブ
マスターノード データノード データノード
メイン スレーブ
①各データノードを データノード データノード
定期的に監視
- 75. SPOFの存在しない構成
・自動データリカバリー機能
②障害発生を検知
③定期的に再起動していないか確認
再 ④再起動を検知
起
メイン 動 スレーブ ※別筐体で起動しても
データノード データノード 問題ない
スレーブ メイン スレーブ
マスターノード データノード データノード
メイン メイン スレーブ
マスターノード データノード データノード
メイン スレーブ
①各データノードを データノード データノード
定期的に監視
- 76. SPOFの存在しない構成
・自動データリカバリー機能
②障害発生を検知
③定期的に再起動していないか確認
④再起動を検知
メイン スレーブ ※別筐体で起動しても
データノード データノード 問題ない
⑤片側のノードから
スレーブ メイン スレーブ データを復元
マスターノード データノード データノード
復元中もシステムは
停止しない
メイン メイン スレーブ
マスターノード データノード データノード
メイン スレーブ
①各データノードを データノード データノード
定期的に監視
- 79. ユニークな機能
■補足(誤解を招いてはいけないので)
ロック機能を使用すると、Lockを管理するノードを稼動
させることになります。
その場合、そのノードは冗長化されないので、ノードダウン
・データロック機構 時は、データの登録、取得は可能ですが、Lockが機能し
なくなります。
また現在は1ノードでLockを管理しているので、処理能力
の妨げにもなります。
>全データノードをまたいでロック可能
Lock実施
lockData (Key=“okuyama”, Lock維持時間=10, Lockリトライ時間=5);
※別クライアントから
set (Key=“okuyama”, Value=“Ver1.0.0“);
>Lockを実施したクライアントがLock解除するか、
Lock維持時間が経過するまで待たされる
データ整合性を意識した処理が
データ整合性を意識した処理が可能
整合性 した処理
- 82. デモ
・デモマシン構成
DELL
メイン
PowerEdge T110
1000Base-T HUB マスターノード
CPU:Xeon(2.4GHz)
Memory:4GB メイン
データノード
HDD:SATA250GB
(7200rpm)×2 スレーブ
NIC:1000Base-T データノード
OS:CentOS5.4(64bit)
DELL
PowerEdge T110 スレーブ
マスターノード
CPU:Xeon(2.4GHz)
Memory:4GB スレーブ
HDD:SATA250GB
データノード
(7200rpm)×2 メイン
NIC:1000Base-T データノード
OS:CentOS5.4(64bit)
- 84. デモ
・デモ内容
1.データ取得(100万件に対して)
1分間に何回取得処理が出来るか試してみます
Key値:”DataSaveKey1” ~ “DataSaveKey1000000”までの
値からのランダム値
・memcachedを同じ環境で実行すると
を 環境で実行すると
取得処理回数合計
>取得処理回数合計 = 2,300,000/min
秒当たりの
秒当たりの処理数
>1秒当たりの処理数 = 38,333/sec
■補足(誤解を招いてはいけないので)
セミナーではOkyama専用クライアントでデモを行い600
万/minでしたが、Memcachedクライアントでokuyamaに処
理を実施した場合は、230万/minです。
- 88. 神戸デジタル・ラボでは
・自社サービスの基盤として活用
Webサイト改ざん検知サービス
サイト改ざん検知サービス
サイト 検知
Webサイトをクローリングしページの変更を検知
通知するサービス
WWW
Webページ
okuyama aaaaa取得
Webクローラ
Webページを取得し、ページ情報からMD5値を作り
出しokuyamaに保存。以降は取得したページのMD5
値を比べることで変更を検知。変更内容の閲覧を実
現するために、ページ情報もokuyamaに格納。
情報量が加速度的に増加するため、okuyamaで対応。