Weitere ähnliche Inhalte
Ähnlich wie dbts osaka 2014 D13 hitachiKVS Masakata Kawanishi
Ähnlich wie dbts osaka 2014 D13 hitachiKVS Masakata Kawanishi (20)
Mehr von Insight Technology, Inc.
Mehr von Insight Technology, Inc. (20)
dbts osaka 2014 D13 hitachiKVS 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
・・・
(承認してくれない)
・・・
いいよー