More Related Content
Similar to [D12] 日立だからこだわる ~一貫性を追求した日立のインメモリ分散KVS~ by Masakata Kawanishi
Similar to [D12] 日立だからこだわる ~一貫性を追求した日立のインメモリ分散KVS~ by Masakata Kawanishi(20)
More from Insight Technology, Inc.
More from Insight Technology, Inc.(20)
[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
- 4. © Hitachi, Ltd. 2014. All rights reserved.
アジェンダ
1.分散KVSとは
2.分散KVSの弱点
3.日立のシステム
4.日立のインメモリ分散KVS
4
- 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
- 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
- 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
- 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
- 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
- 76. © Hitachi, Ltd. 2014. All rights reserved.
日立のこだわりは
一貫性
一貫性にこだわることによって
社会インフラを支えています
76
- 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
・・・
(承認してくれない)
・・・
いいよー