Upload
insight-technology-inc
View
169
Download
1
Embed Size (px)
DESCRIPTION
Citation preview
© 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 B B 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
・・・ (承認してくれない)
・・・
いいよー