SlideShare a Scribd company logo
© Hitachi, Ltd. 2014. All rights reserved.
日立だからこだわる。
~一貫性を追求したインメモリ分散KVS~
株式会社日立製作所 情報・通信システム社
ITプラットフォーム事業本部 開発統括本部
ソフトウェア開発本部 第2AP基盤ソフト設計部
川西 正容
1
© Hitachi, Ltd. 2014. All rights reserved.
自己紹介
名前:川西 正容(カワニシ マサカタ)
会社:2012年度入社。とても大きい
仕事:ミドルウェアの設計・開発
著書:書いてみたい
2
© Hitachi, Ltd. 2014. All rights reserved.
一貫性ってなに?やばいの?
やばいです
説明します
3
© Hitachi, Ltd. 2014. All rights reserved.
アジェンダ
1.分散KVSとは
2.分散KVSの弱点
3.日立のシステム
4.日立のインメモリ分散KVS
4
© Hitachi, Ltd. 2014. All rights reserved.
1.分散KVSとは
5
© Hitachi, Ltd. 2014. All rights reserved.
特徴
・負荷分散
・スケーラビリティ
・可用性
6
© Hitachi, Ltd. 2014. All rights reserved.
負荷分散
各サーバで分散処理する
7
A aaa
write
write
write
write B
write A
write C
C ccc
B bbb
A aaa
C ccc
B bbb
A aaa
C ccc
B bbb
© Hitachi, Ltd. 2014. All rights reserved.
スケーラビリティ
簡単にスケールアウトできる
8
A aaa
B bbb
C ccc
A aaa
A aaa
B bbb
B bbb
C ccc
C ccc
write B
write A
write C
© Hitachi, Ltd. 2014. All rights reserved.
可用性
データロストしないため停止しにくい
9
A aaa
C ccc
A aaa
B bbb
B bbb
C ccc
C ccc
マシンが壊れても
他のマシンにデータが
残ってる!
A aaa
B bbb
© Hitachi, Ltd. 2014. All rights reserved.
分散KVSは
大量データを高速に処理したい
ときに使用されています
10
© Hitachi, Ltd. 2014. All rights reserved.
2.分散KVSの弱点
11
© Hitachi, Ltd. 2014. All rights reserved.
一貫性
常に単一の最新データを取得したいが…
12
A aaa
A aaa
A aaa
get
© Hitachi, Ltd. 2014. All rights reserved.
一貫性が崩れるとき
障害や遅延などで処理の順序を間違えると
13
A aaa
A aaa
1.write
2.remove
1.write A
2.remove A
→ERROR
1.write A
© Hitachi, Ltd. 2014. All rights reserved.
一貫性が崩れるとき
一時的に一貫性が崩れることがある
14
A aaa
1.write
2.remove
1.write A
2.remove A
2.remove A
→ERROR
1.write A
1.write A
2.remove A
A aaa
A aaa
© Hitachi, Ltd. 2014. All rights reserved.
そのデータは正しい?
正しいデータを取得できない
15
A aaa
get
A aaa
A aaaデータが残っている…?
???
© Hitachi, Ltd. 2014. All rights reserved.
分散KVSの弱点
一時的な障害や遅延で
一貫性が崩れて
システムトラブル
の可能性があります
16
© Hitachi, Ltd. 2014. All rights reserved.
3.日立のシステム
17
© Hitachi, Ltd. 2014. All rights reserved.
メッセージング
メールを高速に振り分ける
18
分散KVS携帯電話 管理システム
© Hitachi, Ltd. 2014. All rights reserved.
スマートメータ
電力消費量を管理する
19
電化製品 電力会社分散KVS
© Hitachi, Ltd. 2014. All rights reserved.
TMS
(Traffic Management Solution)
20
通信量をリアルタイムに制御する
中継地 制御システム分散KVS
© Hitachi, Ltd. 2014. All rights reserved.
日立のシステム
もしも一貫性が崩れて
システムトラブルが起きたら
とんでもないことになります
21
© Hitachi, Ltd. 2014. All rights reserved.
4.日立のインメモリ分散KVS
22
© Hitachi, Ltd. 2014. All rights reserved.
日立のインメモリ分散KVS
日立のシステムに導入されている
インメモリ分散KVS
EADs
(uCosminexus Elastic Application Data store)
23
© Hitachi, Ltd. 2014. All rights reserved.
EADs
・インメモリ
・自動分散配置
・故障検知
・稼動中サーバ復旧
・Paxos
24
© Hitachi, Ltd. 2014. All rights reserved.
インメモリにデータを保存するため
読み書きが高速
EADs2
EADs3
EADs4
EADs5
EADs1
インメモリ
25
Master
Slave
Slave
© Hitachi, Ltd. 2014. All rights reserved.
データを自動で分散配置するため
負荷を分散できる
EADs2
EADs3
EADs4
EADs5
EADs1
自動分散配置
26
A aaa
A aaa
B bbb
A aaa
B bbb
B bbb
Master
Master
© Hitachi, Ltd. 2014. All rights reserved.
永続的な障害が発生したサーバを
自動的に離脱させシステムの停止を防ぐ
EADs2
EADs3
EADs4
EADs5
EADs1
故障検知
27
EADs1
delete
A aaa A aaa
A aaa
B bbb
B bbb
B bbb
© Hitachi, Ltd. 2014. All rights reserved.
EADs2
EADs3
EADs4
EADs5
EADs1
復旧時にシステムを停止させる必要が無い
稼動中サーバ復旧
28
EADs1
restore A aaa
A aaa
A aaa
B bbb
B bbb
B bbb
© Hitachi, Ltd. 2014. All rights reserved.
・インメモリ
・自動分散配置
・故障検知
・稼動中サーバ復旧
高速処理とか可用性のための
ここらへんは当たり前ですよね
29
© Hitachi, Ltd. 2014. All rights reserved.
EADsの特徴は
一貫性保証
一貫性が崩れる要因
・一時的な障害
・スプリットブレイン
30
© Hitachi, Ltd. 2014. All rights reserved.
一貫性が崩れる要因
・一時的な障害
・スプリットブレイン
31
© Hitachi, Ltd. 2014. All rights reserved.
EADs2
EADs3
EADs4
EADs5
EADs1
一時的な障害が発生したとき
データ更新中に障害が発生すると…
32
1.write A
1.write A
A aaa
A aaa
A aaa
1.write A
Master
Slave
Slave
© Hitachi, Ltd. 2014. All rights reserved.
EADs2
EADs3
EADs4
EADs5
EADs1
一時的な障害が発生したとき
障害中のサーバは処理できないので
33
1.write A
2.write C
1.write A
2.write C
A aaa
A aaa
A aaa
C ccc
C ccc
1.write A
Slave
Slave
Master
© Hitachi, Ltd. 2014. All rights reserved.
EADs2
EADs3
EADs4
EADs5
EADs1
一時的な障害が発生したとき
どんどん遅れていく
34
1.write A
2.write C
3.remove C
1.write A
2.write C
3.remove C
A aaa
A aaa
A aaa
C ccc
C ccc
1.write A
Slave
Slave
Master
© Hitachi, Ltd. 2014. All rights reserved.
EADs2
EADs3
EADs4
EADs5
EADs1
一時的な障害が発生したとき
回復したときに処理を補完しようとするが
35
A aaa
A aaa
1.write A
2.write C
3.remove C
1.write A
2.write C
3.remove C
A aaa
C ccc
C ccc
1.write A
2.???
3.???
Slave
Slave
Master
© Hitachi, Ltd. 2014. All rights reserved.
処理順序が崩れると…
EADs2
EADs3
EADs4
EADs5
EADs1
一時的な障害が発生したとき
36
1.write A
2.write C
3.remove C
1.write A
2.write C
3.remove C
A aaa
A aaa
A aaa
C ccc
C ccc
1.write A
2.remove C
→ERROR
Slave
Slave
Master
© Hitachi, Ltd. 2014. All rights reserved.
処理順序が崩れると…
EADs2
EADs3
EADs4
EADs5
EADs1
一時的な障害が発生したとき
37
1.write A
2.write C
3.remove C
1.write A
2.write C
3.remove C
A aaa
A aaa
A aaa
C ccc
C ccc
C ccc
1.write A
2.remove C
→ERROR
3.write C
Slave
Slave
Master
© Hitachi, Ltd. 2014. All rights reserved.
EADs2
EADs3
EADs4
EADs5
EADs1
一時的な障害が発生したとき
一貫性が崩れる
38
A aaa
A aaa
A aaa
C ccc
Slave
Slave
Master
© Hitachi, Ltd. 2014. All rights reserved.
EADs2
EADs3
EADs4
EADs5
EADs1
各サーバの処理順序を常に同一にする
どうすればいいの?
39
A aaa
A aaa
A aaa
1.write C
2.remove C
3.write A
1.write C
2.remove C
3.write A
1.write C
2.remove C
3.write A
Slave
Slave
Master
© Hitachi, Ltd. 2014. All rights reserved.
一貫性が崩れる要因
・一時的な障害
・スプリットブレイン
40
© Hitachi, Ltd. 2014. All rights reserved.
EADs2
EADs3
EADs4
EADs5
EADs1
スプリットブレインのとき
ネットワークの障害でクラスタが分断
41
A aaa
A aaa
C ccc
C ccc
C ccc
A aaa
© Hitachi, Ltd. 2014. All rights reserved.
EADs2
EADs3
EADs4
EADs5
EADs1
スプリットブレインのとき
クラスタが別々に動き出すと…
42
remove A
remove A
A aaa
A aaa
A aaa
C ccc
C ccc
C ccc
Slave
Slave
Master
© Hitachi, Ltd. 2014. All rights reserved.
クラスタが別々に動き出すと…
EADs2
EADs3
EADs4
EADs5
EADs1
スプリットブレインのとき
43
remove C
remove C
A aaa
A aaa
A aaa
C ccc
C ccc
C ccc
Slave
Slave
Master
© Hitachi, Ltd. 2014. All rights reserved.
EADs2
EADs3
EADs4
EADs5
EADs1
スプリットブレインのとき
解消されたときに…
44
A aaa
A aaa
A aaa
A aaa
C ccc
C ccc
© Hitachi, Ltd. 2014. All rights reserved.
EADs2
EADs3
EADs4
EADs5
EADs1
スプリットブレインのとき
一貫性が崩れる
45
全部
消したはずなのに…
A aaa
A aaa
A aaa
A aaa
C ccc
C ccc
© Hitachi, Ltd. 2014. All rights reserved.
動くクラスタ1つに絞る
EADs2
EADs3
EADs4
EADs5
EADs1
どうすればいいの?
46
動けない!
動ける!
A aaa
A aaa
A aaa
C ccc
C ccc
C ccc
© Hitachi, Ltd. 2014. All rights reserved.
EADs2
EADs3
EADs4
EADs5
EADs1
どうすればいいの?
解消された後は動けるクラスタに合わせる
47
おれらが
正しい!おれらが
正しい!
おれらが
正しい!
remove A
A aaa
A aaa
A aaa
C ccc
C ccc
C ccc
© Hitachi, Ltd. 2014. All rights reserved.
EADs
・インメモリ
・自動分散配置
・故障検知
・稼動中サーバ復旧
・Paxos
48
© Hitachi, Ltd. 2014. All rights reserved.
Paxos
一時的な障害でもスプリットブレインでも
同一の処理を同一の順序で配信する
アルゴリズム
・過半数承認
・処理補完
49
© Hitachi, Ltd. 2014. All rights reserved.
EADs2
EADs3
EADs4
EADs5
EADs1
過半数承認
過半数以上から承認されたら処理する
50
1.write A
承認!1.write A
するよ!
1.write A
承認!
Slave
Slave
Master
© Hitachi, Ltd. 2014. All rights reserved.
EADs2
EADs3
EADs4
EADs5
EADs1
過半数承認
一部のサーバに障害が発生しても
処理は停止しない
51
1.write A
承認!1.write A
するよ!
1.write A
承認!
Slave
Slave
Master
© Hitachi, Ltd. 2014. All rights reserved.
承認したサーバは承認内容を記録する
EADs2
EADs3
EADs4
EADs5
EADs1
過半数承認
52
承認内容
を記録
1.write A
承認!
1.write A
承認!1.write A
するよ! Slave
Slave
Master
© Hitachi, Ltd. 2014. All rights reserved.
EADs2
EADs3
EADs4
EADs5
EADs1
過半数承認
承認を得たら処理を実行
53
write A
write A
A aaa
A aaa
Slave
Slave
Master
© Hitachi, Ltd. 2014. All rights reserved.
EADs2
EADs3
EADs4
EADs5
EADs1
障害中だったサーバが回復したら…
54
回復したけど
仲間はずれ…
A aaa
A aaa
Slave
Slave
Master
© Hitachi, Ltd. 2014. All rights reserved.
処理実行時に
前回以前の抜けている処理を補完する
EADs2
EADs3
EADs4
EADs5
EADs1
処理補完
55
2.remove A
承認!
2.remove A
するよ!
2.remove A承認!
だけど
1.write A
知らない!
A aaa
A aaa
Slave
Slave
Master
© Hitachi, Ltd. 2014. All rights reserved.
EADs2
EADs3
EADs4
EADs5
EADs1
処理補完
前回の承認内容を記録しているサーバは
56
A aaa
A aaa
Slave
Slave
Master
© Hitachi, Ltd. 2014. All rights reserved.
EADs2
EADs3
EADs4
EADs5
EADs1
処理補完
今回承認するサーバの中に必ず含まれる
57
承認するサーバ達
A aaa
A aaa
Slave
Slave
Master
© Hitachi, Ltd. 2014. All rights reserved.
EADs2
EADs3
EADs4
EADs5
EADs1
処理補完
誰かが前回の承認内容を知っているので…
58
承認するサーバ達
A aaa
A aaa
1.write A
知ってるよ!
教えて!
Slave
Slave
Master
© Hitachi, Ltd. 2014. All rights reserved.
EADs2
EADs3
EADs4
EADs5
EADs1
処理補完
必ず補完することができる
59
A aaa
A aaa
A aaa
1.write A
1.write A
Slave
Slave
Master
© Hitachi, Ltd. 2014. All rights reserved.
EADs2
EADs3
EADs4
EADs5
EADs1
処理補完
過半数承認している限り
必ず補完できるため処理順序が崩れない
60
A aaa
A aaa
A aaa
1.write A
2.remove A
1.write A
2.remove A
1.write A
2.remove A
Slave
Slave
Master
© Hitachi, Ltd. 2014. All rights reserved.
EADsは
一時的な障害でも一貫性保証
61
© Hitachi, Ltd. 2014. All rights reserved.
過半数承認なので動けるクラスタは1つ
EADs2
EADs3
EADs4
EADs5
EADs1
スプリットブレインのときは
62
処理できない
クラスタ
3/5
2/5
処理できる
クラスタ
© Hitachi, Ltd. 2014. All rights reserved.
EADs2
EADs3
EADs4
EADs5
EADs1
過半数承認
過半数承認を行う
63
remove A
3.remove A
承認!
3.remove A
承認!
3.remove A
するよ!
A aaa
A aaa
C ccc
C ccc
C ccc
A aaa
Slave
Slave
Master
© Hitachi, Ltd. 2014. All rights reserved.
承認者が承認内容を記録する
EADs2
EADs3
EADs4
EADs5
EADs1
過半数承認
64
A aaa
A aaa
A aaa
承認内容
を記録
C ccc
C ccc
C ccc
3.remove A
承認!
3.remove A
するよ!
3.remove A
承認!
remove A
Slave
Master
Slave
© Hitachi, Ltd. 2014. All rights reserved.
過半数以上いる方は処理できる
EADs2
EADs3
EADs4
EADs5
EADs1
過半数承認
65
remove A
remove A
処理できる!
A aaa
A aaa
A aaa
C ccc
C ccc
C ccc
Slave
Slave
Master
© Hitachi, Ltd. 2014. All rights reserved.
EADs2
EADs3
EADs4
EADs5
EADs1
過半数承認
過半数承認を行う
66
remove C
A aaa
A aaa
A aaa
C ccc
C ccc
C ccc
4.remove C
承認!
4.remove C
するよ!
Slave
Slave
Master
© Hitachi, Ltd. 2014. All rights reserved.
EADs2
EADs3
EADs4
EADs5
EADs1
過半数承認
過半数いない方は処理できない
67
処理できない…
A aaa
A aaa
A aaa
C ccc
C ccc
C ccc
remove C
承認内容を
記録しない
© Hitachi, Ltd. 2014. All rights reserved.
EADs2
EADs3
EADs4
EADs5
EADs1
スプリットブレインが解消されたら…
68
A aaa
A aaa
A aaa
C ccc
C ccc
C ccc
© Hitachi, Ltd. 2014. All rights reserved.
EADs2
EADs3
EADs4
EADs5
EADs1
処理補完
処理実行時に
前回以前の抜けている処理を補完する
69
A aaa
A aaa
A aaa
C ccc
C ccc
C ccc
5.write B
承認!
5.write B承認!
だけど
3.remove A
知らない!
5.write B
するよ!
Slave
Slave
Master
© Hitachi, Ltd. 2014. All rights reserved.
前回の承認内容を記録しているサーバは
EADs2
EADs3
EADs4
EADs5
EADs1
処理補完
70
A aaa
A aaa
A aaa
C ccc
C ccc
C ccc
Slave
Slave
Master
© Hitachi, Ltd. 2014. All rights reserved.
EADs2
EADs3
EADs4
EADs5
EADs1
処理補完
今回承認するサーバの中に必ず含まれる
71
A aaa
A aaa
A aaa
C ccc
C ccc
C ccc
承認するサーバ達
Slave
Slave
Master
© Hitachi, Ltd. 2014. All rights reserved.
誰かが前回の承認内容を知っているので…
EADs2
EADs3
EADs4
EADs5
EADs1
承認するサーバ達
処理補完
72
A aaa
A aaa
A aaa
C ccc
C ccc
C ccc
3.remove A
知ってるよ!
Slave
Slave
Master
教えて!
© Hitachi, Ltd. 2014. All rights reserved.
必ず補完することができる
EADs2
EADs3
EADs4
EADs5
EADs1
処理補完
73
A aaa
A aaa
C ccc
C ccc
C ccc
3.remove A
remove A
A aaa
3.remove A
Slave
Master
Slave
© Hitachi, Ltd. 2014. All rights reserved.
EADs2
EADs3
EADs4
EADs5
EADs1
処理補完
過半数承認している限り
必ず補完できるため処理順序が崩れない
74
1.write A
3.remove A
2.write C
A aaa
A aaa
A aaa
C ccc
C ccc
C ccc
2.write C
5.write B
1.write A
2.write C
3.remove A
5.write B
1.write A
3.remove A
5.write BB bbb
B bbb
B bbb
© Hitachi, Ltd. 2014. All rights reserved.
EADsは
スプリットブレインでも一貫性保証
75
© Hitachi, Ltd. 2014. All rights reserved.
日立のこだわりは
一貫性
一貫性にこだわることによって
社会インフラを支えています
76
© Hitachi, Ltd. 2014. All rights reserved.
77
© Hitachi, Ltd. 2014. All rights reserved.
付録
© Hitachi, Ltd. 2014. All rights reserved.
順序を守らない一貫性保証
一貫性が崩れたら修正する|結果整合性
Ex.ゴシッププロトコル・リードリペア
79
おれと一緒?
違う!
一緒!
A ccc
A ccc
A aaa
© Hitachi, Ltd. 2014. All rights reserved.
順序を守らない一貫性保証
一貫性が崩れたら修正する|結果整合性
Ex.ゴシッププロトコル・リードリペア
80
修正してやる!
repair
A ccc
A ccc
A aaa
© Hitachi, Ltd. 2014. All rights reserved.
順序を守らない一貫性保証
一貫性は保てるけど処理順序が狂うと
古いデータが復活することがある
81
古いデータに
修正してやる!
repair
A old
A new
A new
repair
© Hitachi, Ltd. 2014. All rights reserved.
可用性が低い一貫性保証
一貫性を崩さない
Ex.2PhaseCommit
82
やっちゃうぜ?
いいよー
いいよー
© Hitachi, Ltd. 2014. All rights reserved.
可用性が低い一貫性保証
一貫性を崩さない
Ex.2PhaseCommit
83
write
write
write
A aaa
A aaa
A aaa
© Hitachi, Ltd. 2014. All rights reserved.
可用性が低い一貫性保証
全員が承認してくれるまで処理が進まない
84
・・・
(承認してくれない)
・・・
いいよー

More Related Content

[D12] 日立だからこだわる ~一貫性を追求した日立のインメモリ分散KVS~ by Masakata Kawanishi

  • 1. © Hitachi, Ltd. 2014. All rights reserved. 日立だからこだわる。 ~一貫性を追求したインメモリ分散KVS~ 株式会社日立製作所 情報・通信システム社 ITプラットフォーム事業本部 開発統括本部 ソフトウェア開発本部 第2AP基盤ソフト設計部 川西 正容 1
  • 2. © Hitachi, Ltd. 2014. All rights reserved. 自己紹介 名前:川西 正容(カワニシ マサカタ) 会社:2012年度入社。とても大きい 仕事:ミドルウェアの設計・開発 著書:書いてみたい 2
  • 3. © Hitachi, Ltd. 2014. All rights reserved. 一貫性ってなに?やばいの? やばいです 説明します 3
  • 4. © Hitachi, Ltd. 2014. All rights reserved. アジェンダ 1.分散KVSとは 2.分散KVSの弱点 3.日立のシステム 4.日立のインメモリ分散KVS 4
  • 5. © Hitachi, Ltd. 2014. All rights reserved. 1.分散KVSとは 5
  • 6. © Hitachi, Ltd. 2014. All rights reserved. 特徴 ・負荷分散 ・スケーラビリティ ・可用性 6
  • 7. © Hitachi, Ltd. 2014. All rights reserved. 負荷分散 各サーバで分散処理する 7 A aaa write write write write B write A write C C ccc B bbb A aaa C ccc B bbb A aaa C ccc B bbb
  • 8. © Hitachi, Ltd. 2014. All rights reserved. スケーラビリティ 簡単にスケールアウトできる 8 A aaa B bbb C ccc A aaa A aaa B bbb B bbb C ccc C ccc write B write A write C
  • 9. © Hitachi, Ltd. 2014. All rights reserved. 可用性 データロストしないため停止しにくい 9 A aaa C ccc A aaa B bbb B bbb C ccc C ccc マシンが壊れても 他のマシンにデータが 残ってる! A aaa B bbb
  • 10. © Hitachi, Ltd. 2014. All rights reserved. 分散KVSは 大量データを高速に処理したい ときに使用されています 10
  • 11. © Hitachi, Ltd. 2014. All rights reserved. 2.分散KVSの弱点 11
  • 12. © Hitachi, Ltd. 2014. All rights reserved. 一貫性 常に単一の最新データを取得したいが… 12 A aaa A aaa A aaa get
  • 13. © Hitachi, Ltd. 2014. All rights reserved. 一貫性が崩れるとき 障害や遅延などで処理の順序を間違えると 13 A aaa A aaa 1.write 2.remove 1.write A 2.remove A →ERROR 1.write A
  • 14. © Hitachi, Ltd. 2014. All rights reserved. 一貫性が崩れるとき 一時的に一貫性が崩れることがある 14 A aaa 1.write 2.remove 1.write A 2.remove A 2.remove A →ERROR 1.write A 1.write A 2.remove A A aaa A aaa
  • 15. © Hitachi, Ltd. 2014. All rights reserved. そのデータは正しい? 正しいデータを取得できない 15 A aaa get A aaa A aaaデータが残っている…? ???
  • 16. © Hitachi, Ltd. 2014. All rights reserved. 分散KVSの弱点 一時的な障害や遅延で 一貫性が崩れて システムトラブル の可能性があります 16
  • 17. © Hitachi, Ltd. 2014. All rights reserved. 3.日立のシステム 17
  • 18. © Hitachi, Ltd. 2014. All rights reserved. メッセージング メールを高速に振り分ける 18 分散KVS携帯電話 管理システム
  • 19. © Hitachi, Ltd. 2014. All rights reserved. スマートメータ 電力消費量を管理する 19 電化製品 電力会社分散KVS
  • 20. © Hitachi, Ltd. 2014. All rights reserved. TMS (Traffic Management Solution) 20 通信量をリアルタイムに制御する 中継地 制御システム分散KVS
  • 21. © Hitachi, Ltd. 2014. All rights reserved. 日立のシステム もしも一貫性が崩れて システムトラブルが起きたら とんでもないことになります 21
  • 22. © Hitachi, Ltd. 2014. All rights reserved. 4.日立のインメモリ分散KVS 22
  • 23. © Hitachi, Ltd. 2014. All rights reserved. 日立のインメモリ分散KVS 日立のシステムに導入されている インメモリ分散KVS EADs (uCosminexus Elastic Application Data store) 23
  • 24. © Hitachi, Ltd. 2014. All rights reserved. EADs ・インメモリ ・自動分散配置 ・故障検知 ・稼動中サーバ復旧 ・Paxos 24
  • 25. © Hitachi, Ltd. 2014. All rights reserved. インメモリにデータを保存するため 読み書きが高速 EADs2 EADs3 EADs4 EADs5 EADs1 インメモリ 25 Master Slave Slave
  • 26. © Hitachi, Ltd. 2014. All rights reserved. データを自動で分散配置するため 負荷を分散できる EADs2 EADs3 EADs4 EADs5 EADs1 自動分散配置 26 A aaa A aaa B bbb A aaa B bbb B bbb Master Master
  • 27. © Hitachi, Ltd. 2014. All rights reserved. 永続的な障害が発生したサーバを 自動的に離脱させシステムの停止を防ぐ EADs2 EADs3 EADs4 EADs5 EADs1 故障検知 27 EADs1 delete A aaa A aaa A aaa B bbb B bbb B bbb
  • 28. © Hitachi, Ltd. 2014. All rights reserved. EADs2 EADs3 EADs4 EADs5 EADs1 復旧時にシステムを停止させる必要が無い 稼動中サーバ復旧 28 EADs1 restore A aaa A aaa A aaa B bbb B bbb B bbb
  • 29. © Hitachi, Ltd. 2014. All rights reserved. ・インメモリ ・自動分散配置 ・故障検知 ・稼動中サーバ復旧 高速処理とか可用性のための ここらへんは当たり前ですよね 29
  • 30. © Hitachi, Ltd. 2014. All rights reserved. EADsの特徴は 一貫性保証 一貫性が崩れる要因 ・一時的な障害 ・スプリットブレイン 30
  • 31. © Hitachi, Ltd. 2014. All rights reserved. 一貫性が崩れる要因 ・一時的な障害 ・スプリットブレイン 31
  • 32. © Hitachi, Ltd. 2014. All rights reserved. EADs2 EADs3 EADs4 EADs5 EADs1 一時的な障害が発生したとき データ更新中に障害が発生すると… 32 1.write A 1.write A A aaa A aaa A aaa 1.write A Master Slave Slave
  • 33. © Hitachi, Ltd. 2014. All rights reserved. EADs2 EADs3 EADs4 EADs5 EADs1 一時的な障害が発生したとき 障害中のサーバは処理できないので 33 1.write A 2.write C 1.write A 2.write C A aaa A aaa A aaa C ccc C ccc 1.write A Slave Slave Master
  • 34. © Hitachi, Ltd. 2014. All rights reserved. EADs2 EADs3 EADs4 EADs5 EADs1 一時的な障害が発生したとき どんどん遅れていく 34 1.write A 2.write C 3.remove C 1.write A 2.write C 3.remove C A aaa A aaa A aaa C ccc C ccc 1.write A Slave Slave Master
  • 35. © Hitachi, Ltd. 2014. All rights reserved. EADs2 EADs3 EADs4 EADs5 EADs1 一時的な障害が発生したとき 回復したときに処理を補完しようとするが 35 A aaa A aaa 1.write A 2.write C 3.remove C 1.write A 2.write C 3.remove C A aaa C ccc C ccc 1.write A 2.??? 3.??? Slave Slave Master
  • 36. © Hitachi, Ltd. 2014. All rights reserved. 処理順序が崩れると… EADs2 EADs3 EADs4 EADs5 EADs1 一時的な障害が発生したとき 36 1.write A 2.write C 3.remove C 1.write A 2.write C 3.remove C A aaa A aaa A aaa C ccc C ccc 1.write A 2.remove C →ERROR Slave Slave Master
  • 37. © Hitachi, Ltd. 2014. All rights reserved. 処理順序が崩れると… EADs2 EADs3 EADs4 EADs5 EADs1 一時的な障害が発生したとき 37 1.write A 2.write C 3.remove C 1.write A 2.write C 3.remove C A aaa A aaa A aaa C ccc C ccc C ccc 1.write A 2.remove C →ERROR 3.write C Slave Slave Master
  • 38. © Hitachi, Ltd. 2014. All rights reserved. EADs2 EADs3 EADs4 EADs5 EADs1 一時的な障害が発生したとき 一貫性が崩れる 38 A aaa A aaa A aaa C ccc Slave Slave Master
  • 39. © Hitachi, Ltd. 2014. All rights reserved. EADs2 EADs3 EADs4 EADs5 EADs1 各サーバの処理順序を常に同一にする どうすればいいの? 39 A aaa A aaa A aaa 1.write C 2.remove C 3.write A 1.write C 2.remove C 3.write A 1.write C 2.remove C 3.write A Slave Slave Master
  • 40. © Hitachi, Ltd. 2014. All rights reserved. 一貫性が崩れる要因 ・一時的な障害 ・スプリットブレイン 40
  • 41. © Hitachi, Ltd. 2014. All rights reserved. EADs2 EADs3 EADs4 EADs5 EADs1 スプリットブレインのとき ネットワークの障害でクラスタが分断 41 A aaa A aaa C ccc C ccc C ccc A aaa
  • 42. © Hitachi, Ltd. 2014. All rights reserved. EADs2 EADs3 EADs4 EADs5 EADs1 スプリットブレインのとき クラスタが別々に動き出すと… 42 remove A remove A A aaa A aaa A aaa C ccc C ccc C ccc Slave Slave Master
  • 43. © Hitachi, Ltd. 2014. All rights reserved. クラスタが別々に動き出すと… EADs2 EADs3 EADs4 EADs5 EADs1 スプリットブレインのとき 43 remove C remove C A aaa A aaa A aaa C ccc C ccc C ccc Slave Slave Master
  • 44. © Hitachi, Ltd. 2014. All rights reserved. EADs2 EADs3 EADs4 EADs5 EADs1 スプリットブレインのとき 解消されたときに… 44 A aaa A aaa A aaa A aaa C ccc C ccc
  • 45. © Hitachi, Ltd. 2014. All rights reserved. EADs2 EADs3 EADs4 EADs5 EADs1 スプリットブレインのとき 一貫性が崩れる 45 全部 消したはずなのに… A aaa A aaa A aaa A aaa C ccc C ccc
  • 46. © Hitachi, Ltd. 2014. All rights reserved. 動くクラスタ1つに絞る EADs2 EADs3 EADs4 EADs5 EADs1 どうすればいいの? 46 動けない! 動ける! A aaa A aaa A aaa C ccc C ccc C ccc
  • 47. © Hitachi, Ltd. 2014. All rights reserved. EADs2 EADs3 EADs4 EADs5 EADs1 どうすればいいの? 解消された後は動けるクラスタに合わせる 47 おれらが 正しい!おれらが 正しい! おれらが 正しい! remove A A aaa A aaa A aaa C ccc C ccc C ccc
  • 48. © Hitachi, Ltd. 2014. All rights reserved. EADs ・インメモリ ・自動分散配置 ・故障検知 ・稼動中サーバ復旧 ・Paxos 48
  • 49. © Hitachi, Ltd. 2014. All rights reserved. Paxos 一時的な障害でもスプリットブレインでも 同一の処理を同一の順序で配信する アルゴリズム ・過半数承認 ・処理補完 49
  • 50. © Hitachi, Ltd. 2014. All rights reserved. EADs2 EADs3 EADs4 EADs5 EADs1 過半数承認 過半数以上から承認されたら処理する 50 1.write A 承認!1.write A するよ! 1.write A 承認! Slave Slave Master
  • 51. © Hitachi, Ltd. 2014. All rights reserved. EADs2 EADs3 EADs4 EADs5 EADs1 過半数承認 一部のサーバに障害が発生しても 処理は停止しない 51 1.write A 承認!1.write A するよ! 1.write A 承認! Slave Slave Master
  • 52. © Hitachi, Ltd. 2014. All rights reserved. 承認したサーバは承認内容を記録する EADs2 EADs3 EADs4 EADs5 EADs1 過半数承認 52 承認内容 を記録 1.write A 承認! 1.write A 承認!1.write A するよ! Slave Slave Master
  • 53. © Hitachi, Ltd. 2014. All rights reserved. EADs2 EADs3 EADs4 EADs5 EADs1 過半数承認 承認を得たら処理を実行 53 write A write A A aaa A aaa Slave Slave Master
  • 54. © Hitachi, Ltd. 2014. All rights reserved. EADs2 EADs3 EADs4 EADs5 EADs1 障害中だったサーバが回復したら… 54 回復したけど 仲間はずれ… A aaa A aaa Slave Slave Master
  • 55. © Hitachi, Ltd. 2014. All rights reserved. 処理実行時に 前回以前の抜けている処理を補完する EADs2 EADs3 EADs4 EADs5 EADs1 処理補完 55 2.remove A 承認! 2.remove A するよ! 2.remove A承認! だけど 1.write A 知らない! A aaa A aaa Slave Slave Master
  • 56. © Hitachi, Ltd. 2014. All rights reserved. EADs2 EADs3 EADs4 EADs5 EADs1 処理補完 前回の承認内容を記録しているサーバは 56 A aaa A aaa Slave Slave Master
  • 57. © Hitachi, Ltd. 2014. All rights reserved. EADs2 EADs3 EADs4 EADs5 EADs1 処理補完 今回承認するサーバの中に必ず含まれる 57 承認するサーバ達 A aaa A aaa Slave Slave Master
  • 58. © Hitachi, Ltd. 2014. All rights reserved. EADs2 EADs3 EADs4 EADs5 EADs1 処理補完 誰かが前回の承認内容を知っているので… 58 承認するサーバ達 A aaa A aaa 1.write A 知ってるよ! 教えて! Slave Slave Master
  • 59. © Hitachi, Ltd. 2014. All rights reserved. EADs2 EADs3 EADs4 EADs5 EADs1 処理補完 必ず補完することができる 59 A aaa A aaa A aaa 1.write A 1.write A Slave Slave Master
  • 60. © Hitachi, Ltd. 2014. All rights reserved. EADs2 EADs3 EADs4 EADs5 EADs1 処理補完 過半数承認している限り 必ず補完できるため処理順序が崩れない 60 A aaa A aaa A aaa 1.write A 2.remove A 1.write A 2.remove A 1.write A 2.remove A Slave Slave Master
  • 61. © Hitachi, Ltd. 2014. All rights reserved. EADsは 一時的な障害でも一貫性保証 61
  • 62. © Hitachi, Ltd. 2014. All rights reserved. 過半数承認なので動けるクラスタは1つ EADs2 EADs3 EADs4 EADs5 EADs1 スプリットブレインのときは 62 処理できない クラスタ 3/5 2/5 処理できる クラスタ
  • 63. © Hitachi, Ltd. 2014. All rights reserved. EADs2 EADs3 EADs4 EADs5 EADs1 過半数承認 過半数承認を行う 63 remove A 3.remove A 承認! 3.remove A 承認! 3.remove A するよ! A aaa A aaa C ccc C ccc C ccc A aaa Slave Slave Master
  • 64. © Hitachi, Ltd. 2014. All rights reserved. 承認者が承認内容を記録する EADs2 EADs3 EADs4 EADs5 EADs1 過半数承認 64 A aaa A aaa A aaa 承認内容 を記録 C ccc C ccc C ccc 3.remove A 承認! 3.remove A するよ! 3.remove A 承認! remove A Slave Master Slave
  • 65. © Hitachi, Ltd. 2014. All rights reserved. 過半数以上いる方は処理できる EADs2 EADs3 EADs4 EADs5 EADs1 過半数承認 65 remove A remove A 処理できる! A aaa A aaa A aaa C ccc C ccc C ccc Slave Slave Master
  • 66. © Hitachi, Ltd. 2014. All rights reserved. EADs2 EADs3 EADs4 EADs5 EADs1 過半数承認 過半数承認を行う 66 remove C A aaa A aaa A aaa C ccc C ccc C ccc 4.remove C 承認! 4.remove C するよ! Slave Slave Master
  • 67. © Hitachi, Ltd. 2014. All rights reserved. EADs2 EADs3 EADs4 EADs5 EADs1 過半数承認 過半数いない方は処理できない 67 処理できない… A aaa A aaa A aaa C ccc C ccc C ccc remove C 承認内容を 記録しない
  • 68. © Hitachi, Ltd. 2014. All rights reserved. EADs2 EADs3 EADs4 EADs5 EADs1 スプリットブレインが解消されたら… 68 A aaa A aaa A aaa C ccc C ccc C ccc
  • 69. © Hitachi, Ltd. 2014. All rights reserved. EADs2 EADs3 EADs4 EADs5 EADs1 処理補完 処理実行時に 前回以前の抜けている処理を補完する 69 A aaa A aaa A aaa C ccc C ccc C ccc 5.write B 承認! 5.write B承認! だけど 3.remove A 知らない! 5.write B するよ! Slave Slave Master
  • 70. © Hitachi, Ltd. 2014. All rights reserved. 前回の承認内容を記録しているサーバは EADs2 EADs3 EADs4 EADs5 EADs1 処理補完 70 A aaa A aaa A aaa C ccc C ccc C ccc Slave Slave Master
  • 71. © Hitachi, Ltd. 2014. All rights reserved. EADs2 EADs3 EADs4 EADs5 EADs1 処理補完 今回承認するサーバの中に必ず含まれる 71 A aaa A aaa A aaa C ccc C ccc C ccc 承認するサーバ達 Slave Slave Master
  • 72. © Hitachi, Ltd. 2014. All rights reserved. 誰かが前回の承認内容を知っているので… EADs2 EADs3 EADs4 EADs5 EADs1 承認するサーバ達 処理補完 72 A aaa A aaa A aaa C ccc C ccc C ccc 3.remove A 知ってるよ! Slave Slave Master 教えて!
  • 73. © Hitachi, Ltd. 2014. All rights reserved. 必ず補完することができる EADs2 EADs3 EADs4 EADs5 EADs1 処理補完 73 A aaa A aaa C ccc C ccc C ccc 3.remove A remove A A aaa 3.remove A Slave Master Slave
  • 74. © Hitachi, Ltd. 2014. All rights reserved. EADs2 EADs3 EADs4 EADs5 EADs1 処理補完 過半数承認している限り 必ず補完できるため処理順序が崩れない 74 1.write A 3.remove A 2.write C A aaa A aaa A aaa C ccc C ccc C ccc 2.write C 5.write B 1.write A 2.write C 3.remove A 5.write B 1.write A 3.remove A 5.write BB bbb B bbb B bbb
  • 75. © Hitachi, Ltd. 2014. All rights reserved. EADsは スプリットブレインでも一貫性保証 75
  • 76. © Hitachi, Ltd. 2014. All rights reserved. 日立のこだわりは 一貫性 一貫性にこだわることによって 社会インフラを支えています 76
  • 77. © Hitachi, Ltd. 2014. All rights reserved. 77
  • 78. © Hitachi, Ltd. 2014. All rights reserved. 付録
  • 79. © Hitachi, Ltd. 2014. All rights reserved. 順序を守らない一貫性保証 一貫性が崩れたら修正する|結果整合性 Ex.ゴシッププロトコル・リードリペア 79 おれと一緒? 違う! 一緒! A ccc A ccc A aaa
  • 80. © Hitachi, Ltd. 2014. All rights reserved. 順序を守らない一貫性保証 一貫性が崩れたら修正する|結果整合性 Ex.ゴシッププロトコル・リードリペア 80 修正してやる! repair A ccc A ccc A aaa
  • 81. © Hitachi, Ltd. 2014. All rights reserved. 順序を守らない一貫性保証 一貫性は保てるけど処理順序が狂うと 古いデータが復活することがある 81 古いデータに 修正してやる! repair A old A new A new repair
  • 82. © Hitachi, Ltd. 2014. All rights reserved. 可用性が低い一貫性保証 一貫性を崩さない Ex.2PhaseCommit 82 やっちゃうぜ? いいよー いいよー
  • 83. © Hitachi, Ltd. 2014. All rights reserved. 可用性が低い一貫性保証 一貫性を崩さない Ex.2PhaseCommit 83 write write write A aaa A aaa A aaa
  • 84. © Hitachi, Ltd. 2014. All rights reserved. 可用性が低い一貫性保証 全員が承認してくれるまで処理が進まない 84 ・・・ (承認してくれない) ・・・ いいよー