Weitere ähnliche Inhalte
Ähnlich wie gumiStudy#1 キーバリューストアのご紹介と利用時の設計モデルについて (20)
Kürzlich hochgeladen (11)
gumiStudy#1 キーバリューストアのご紹介と利用時の設計モデルについて
- 12. 最小単位での一貫性?
1つのデータの更新が混在しないことのみ保障
>どんな利点が?
>データの整合性確保の範囲を限定できる
“Key-1”を“Value-11”へ更新 2つのデータは
個々で更新される
Key-1 Value-11 Key-1 Value-11 関係性を持たない
Key-2 Value-2
“Key-4”を“Value-44”へ更新 Key-3 Value-3
Key-4 Value-44 Key-4 Value-44
- 14. 最小単位での一貫性?
データの整合性確保の範囲を限定できる
>ということは?
>分散して管理することが可能
“Key-1”を“Value-11”へ更新
Key-1 Value-11
Key-1 Value-11
Key-2 Value-22
“Key-4”を“Value-44”へ更新
Key-3 Value-3
Key-4 Value-44
Key-4 Value-44
- 15. 最小単位での一貫性?
データの整合性確保の範囲を限定できる
>ということは?
>分散して管理することが可能
“Key-1”を“Value-11”へ更新
Key-1 Value-11
Key-1 Value-11
Key-2 Value-22
分散
Key-Value Store
“Key-4”を“Value-44”へ更新
Key-3 Value-3
Key-4 Value-44
Key-4 Value-44
- 20. システム構成
対応策
利用者 アプリ データベース
・スケールアップで対応
・更新系と検索系を分割
検索ノード
更新ノード
検索ノード
- 21. システム構成
対応策
利用者 アプリ データベース
・スケールアップで対応
・更新系と検索系を分割
検索ノード
更新ノード
検索ノード
・スケールアップの限界
・更新系はボトルネック
・管理の煩雑化
- 25. Javaで実装された分散KVS
・全体構成
メイン スレーブ
データノード データノード
スレーブ メイン スレーブ
クライアント データノード データノード
マスターノード
クライアント
メイン メイン スレーブ
マスターノード データノード データノード
クライアント
メイン スレーブ
データノード データノード
・クライアント → マスターノード → データノード
- 27. Javaで実装された分散KVS
・マスターノード
・クライアントからのI/F ・データノード管理
・サポートプロトコル >データ入出力
>オリジナル データ保存場所の決定は
スレーブ
>Memcached マスターノード 2つのアルゴリズムから選択
>HTTP 1. Mod
メイン
マスターノード
2. ConsistentHash
>生存監視
起動時のデータリカバリ
・制限台数なしに冗長化可能
- 28. Javaで実装された分散KVS
・データノード
・データの保存を実現
メイン スレーブ スレーブ
・データ保存方式を選択可能 データノード データノード データノード
・最大3ノードにデータを保存
メイン スレーブ スレーブ
・アクセスバランシング データノード データノード データノード
・連鎖的ダウンの予防 メイン スレーブ スレーブ
データノード データノード データノード
メイン スレーブ スレーブ
データノード データノード データノード
- 32. 分散Key-Value Storeという選択
アプリ okuyama RDBMS
検索結果、参照回数の
多いデータを配置して
RDBMSの負荷を分散
検索ノード
更新ノード
検索ノード
更新処理の負荷は軽減
できない?
永続化層としての活用は
できない?
- 37. 選べるデータ保存方式
・データへの操作を全てファイルに時系列に記録
登録処理
Key5 = Value5
データノード
[履歴記録ファイル]
登録,Key1,Value1
登録,Key2,Value2
登録,Key3,Value3
登録,Key4,Value4
登録,Key5,Value5
最後尾に追記
- 38. 選べるデータ保存方式
・データへの操作を全てファイルに時系列に記録
登録処理
Key5 = Value5
データノード
[履歴記録ファイル]
登録,Key1,Value1
登録,Key2,Value2
登録,Key3,Value3
登録,Key4,Value4
登録,Key5,Value5
最後尾に追記
[データノードのメモリ]
Key5 = Value5
データノードのメモリに反映
- 39. 選べるデータ保存方式
・データへの操作を全てファイルに時系列に記録
削除処理
Key5
データノード
[履歴記録ファイル]
登録,Key2,Value2
登録,Key3,Value3
登録,Key4,Value4
登録,Key5,Value5
削除,Key5,Value5
最後尾に追記
[データノードのメモリ]
Key5
データノードのメモリに反映
- 41. 選べるデータ保存方式
・記録ファイルからデータを復元
データノード ①記録ファイルから順次操作を読み込み
登録,Key1,Value1
登録,Key2,Value2
登録,Key3,Value3
登録,Key4,Value4
登録,Key5,Value5
削除,Key5,Value5
[履歴記録ファイル]
- 42. 選べるデータ保存方式
・記録ファイルからデータを復元
データノード ①記録ファイルから順次操作を読み込み
②メモリに反映
登録,Key1,Value1 Key1 = Value1
登録,Key2,Value2
登録,Key3,Value3
登録,Key4,Value4
登録,Key5,Value5
削除,Key5,Value5
[データノードのメモリ]
[履歴記録ファイル]
- 43. 選べるデータ保存方式
・記録ファイルからデータを復元
データノード ①記録ファイルから順次操作を読み込み
②メモリに反映
登録,Key1,Value1 Key1 = Value1
登録,Key2,Value2 Key2 = Value2
登録,Key3,Value3
登録,Key4,Value4
登録,Key5,Value5
削除,Key5,Value5
[データノードのメモリ]
[履歴記録ファイル]
- 44. 選べるデータ保存方式
・記録ファイルからデータを復元
データノード ①記録ファイルから順次操作を読み込み
②メモリに反映
登録,Key1,Value1 Key1 = Value1
登録,Key2,Value2 Key2 = Value2
登録,Key3,Value3 Key3 = Value3
登録,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
[データノードのメモリ]
[履歴記録ファイル]
- 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
削除,Key5,Value5
[データノードのメモリ]
[履歴記録ファイル]
- 48. 選べるデータ保存方式
・記録ファイルからデータを復元
データノード ①記録ファイルから順次操作を読み込み
②メモリに反映
登録,Key1,Value1 Key1 = Value1
登録,Key2,Value2 Key2 = Value2
登録,Key3,Value3 Key3 = Value3
登録,Key4,Value4 Key4 = Value4
登録,Key5,Value5
削除,Key5,Value5
[データノードのメモリ]
[履歴記録ファイル]
復元完了!!
- 51. 選べるデータ保存方式
・Key値とデータの場所をメモリに保持
登録処理 「2.」の仕組みを利用
Key5 = Value5
データノード
[データノードのメモリ]
Key5 = 5行目
[データファイル]
Value1
Value2
データファイルにValue値を保存 Value3
メモリにKey値とValue値のファイル内での Value4
Value5
位置を保持
- 57. 分散Key-Value Storeという選択
アプリ okuyama RDBMS
ノード数を増やせば
故障率も増加
99.99%のサーバを1年運
用すると、53分停止する 検索ノード
このサーバは10台並べる
更新ノード
と、単純合計530分停止
検索ノード
- 59. SPOFの存在しない構成
・データの取得の流れ
メイン スレーブ
データノード データノード
①データ取得 メイン スレーブ
スレーブ
クライアント データノード データノード
マスターノード
メイン メイン スレーブ
マスターノード データノード データノード
メイン スレーブ
データノード データノード
- 60. SPOFの存在しない構成
・データの取得の流れ
②データ保持
ノード割り出し メイン スレーブ
データノード データノード
①データ取得 メイン スレーブ
スレーブ
クライアント データノード データノード
マスターノード
メイン メイン スレーブ
マスターノード データノード データノード
メイン スレーブ
データノード データノード
- 61. SPOFの存在しない構成
・データの取得の流れ ③データ取得
②データ保持
ノード割り出し メイン スレーブ
データノード データノード
①データ取得 メイン スレーブ
スレーブ
クライアント データノード データノード
マスターノード
メイン メイン スレーブ
マスターノード データノード データノード
メイン スレーブ
データノード データノード
- 62. SPOFの存在しない構成
・データノード障害発生 障害発生!!
②データ保持
ノード割り出し メイン スレーブ
データノード データノード
①データ取得 メイン スレーブ
スレーブ
クライアント データノード データノード
マスターノード
メイン メイン スレーブ
マスターノード データノード データノード
メイン スレーブ
データノード データノード
- 63. SPOFの存在しない構成
・データノード障害発生 もう一つのノードから取得
②データ保持
ノード割り出し メイン スレーブ
データノード データノード
①データ取得 メイン スレーブ
スレーブ
クライアント データノード データノード
マスターノード
メイン メイン スレーブ
マスターノード データノード データノード
メイン スレーブ
データノード データノード
- 64. SPOFの存在しない構成
・マスターノード障害発生
メイン スレーブ
データノード データノード
①データ取得 メイン スレーブ
スレーブ
クライアント データノード データノード
マスターノード
メイン メイン スレーブ
マスターノード データノード データノード
メイン スレーブ
データノード データノード
- 65. SPOFの存在しない構成
・マスターノード障害発生
障害発生!! メイン
データノード
スレーブ
データノード
①データ取得 メイン スレーブ
スレーブ
クライアント データノード データノード
マスターノード
メイン メイン スレーブ
マスターノード データノード データノード
メイン スレーブ
データノード データノード
- 66. SPOFの存在しない構成
・マスターノード障害発生
メイン スレーブ
データノード データノード
①データ取得 メイン スレーブ
スレーブ
クライアント データノード データノード
マスターノード
メイン メイン スレーブ
マスターノード
別のマスター データノード データノード
ノードに再接続 メイン スレーブ
処理続行 データノード データノード
- 67. SPOFの存在しない構成
・自動データリカバリー機能
メイン スレーブ
データノード データノード
スレーブ メイン スレーブ
マスターノード データノード データノード
メイン メイン スレーブ
マスターノード データノード データノード
メイン スレーブ
①各データノードを データノード データノード
定期的に監視
- 68. SPOFの存在しない構成
・自動データリカバリー機能
②障害発生を検知
メイン スレーブ
データノード データノード
スレーブ メイン スレーブ
マスターノード データノード データノード
メイン メイン スレーブ
マスターノード データノード データノード
メイン スレーブ
①各データノードを データノード データノード
定期的に監視
- 69. SPOFの存在しない構成
・自動データリカバリー機能
②障害発生を検知
③定期的に再起動していないか確認
メイン スレーブ
データノード データノード
スレーブ メイン スレーブ
マスターノード データノード データノード
メイン メイン スレーブ
マスターノード データノード データノード
メイン スレーブ
①各データノードを データノード データノード
定期的に監視
- 70. SPOFの存在しない構成
・自動データリカバリー機能
②障害発生を検知
③定期的に再起動していないか確認
再 ④再起動を検知
起
メイン 動 スレーブ ※別筐体で起動しても
データノード データノード 問題ない
スレーブ メイン スレーブ
マスターノード データノード データノード
メイン メイン スレーブ
マスターノード データノード データノード
メイン スレーブ
①各データノードを データノード データノード
定期的に監視
- 71. SPOFの存在しない構成
・自動データリカバリー機能
②障害発生を検知
③定期的に再起動していないか確認
④再起動を検知
メイン スレーブ ※別筐体で起動しても
データノード データノード 問題ない
⑤片側のノードから
スレーブ メイン スレーブ データを復元
マスターノード データノード データノード
復元中もシステムは
停止しない
メイン メイン スレーブ
マスターノード データノード データノード
メイン スレーブ
①各データノードを データノード データノード
定期的に監視
- 72. 分散Key-Value Storeという選択
アプリ okuyama RDBMS
故障を前提とした、
配置を行い、
自動復旧の強みを
最大限に利用する。
検索ノード
メイン
メイン
メイン
データノード
データノード
メイン 更新ノード
データノード
データノード
メイン 検索ノード
メイン
マスターノード
マスターノード
メイン
メイン
メイン
データノード
データノード
メイン
データノード
データノード
- 73. 分散Key-Value Storeという選択
アプリ okuyama RDBMS
ノード数増加時の
管理コストは?
検索ノード
メイン
メイン
メイン
データノード
データノード
メイン 更新ノード
データノード
データノード
メイン 検索ノード
メイン
マスターノード
マスターノード
メイン
メイン
メイン
データノード
データノード
メイン
データノード
データノード