Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
db tech showcase 東京 2013

インメモリ分散KVSの弱点。
一貫性が崩れる原因と、
それを克服する技術とは?
2013/11/13

日立製作所 情報・通信システム社
ソフトウェア開発本部 第2AP基盤ソフト設計部

梅田多一
自己紹介

© Hitachi, Ltd. 2013. All rights reserved.
2000年入社
・ミドルウェア開発
・テクニカルサポート
仕事のスタイル
・TTP
・GNN

DB Online
http://enterprisezine.jp/dbonline/detail/5010
© Hitachi, Ltd. 2013. All rights reserved.

2
インメモリ分散KVSの弱点。
一貫性が崩れる原因と、それを克服する技術とは?

Contents
インメモリデータグリッドって何だ?
インメモリデータグリッドの要素技術
強一貫性への挑戦!

© Hitachi, Ltd. 2013. All rights reserved.
インメモリ分散KVSの弱点。
一貫性が崩れる原因と、それを克服する技術とは?

インメモリデータグリッドって
何だ?

© Hitachi, Ltd. 2013. All rights reserved.
インメモリデータグリッドって何だ?

登場の背景

© Hitachi, Ltd. 2013. All rights reserved.

5
登場の背景
・発信データの爆発的増加(Big Data)
・データを扱うミドルウェアへの要件として
大量発信データの高速処理、リアルタイム分析、大量蓄積データの高速検索、、

モ ノ の発信

Bi g Data

電力メーター
運行情報

通話ログ

人 の発信
動画・画像・音声
コンテンツダウンロード

SNS
つぶやき

カーナビ
GPS

設備監視
物流トレース

メール・オフィス文書
スマートフォン

監視映像

環境・気象データ

データベース

ICカード利用

人の移動
ネット購入

診断画像・
電子カルテ
© Hitachi, Ltd. 2013. All rights reserved.

6
インメモリデータグリッドって何だ?

日立の取り組み

© Hitachi, Ltd. 2013. All rights reserved.

7
日立の取り組み
①uCosminexus Elastic Application Data store(以下EADs)(C16)
②uCosminexus Stream Data Platform(C23)
③Hitachi Advanced Data Binder プラットフォーム(C32)
③大量蓄積データの高速検索

データ

現場の状況をいち早く把握

修理指示

売り場への指示

データ

問題の解決
新たな価値の提供

①大量発信データの高速処理(インメモリデータグリッド)
②大量発信データのリアルタイム分析(CEP)
© Hitachi, Ltd. 2013. All rights reserved.

8
インメモリデータグリッドって何だ?

日立の案件

© Hitachi, Ltd. 2013. All rights reserved.

9
日立の案件(電力)
スマートメータ
収集サーバから出力される大量の検針値(30分値)を、
一定期間(40日)分DBに格納したい。

工場

検針値
1日分
オフィス

戸建

大量の検針値を
高速に受信

当日分メモリ保持、日次ジョブ実行による
一日分ファイル出力、一括DBロード
© Hitachi, Ltd. 2013. All rights reserved.

10
日立の案件(通信)
メディエーション/TMS
交換機から出力される大量のRawCDRを、
課金システムや帯域制御システム向けのCDRに編集したい。
RawCDR:
接続開始/一定時間経過/HO発生/接続終了などのタイミングで出力される、
接続ID、接続時間、通信量などの情報。
CDR:
同一の接続に対する分割情報であるRawCDRを結合(通信量の合算など)した情報。

RawCDR
CDR

大量の接続情報を
高速に受信

同一接続のデータ集合を
イベントドリブンに編集
© Hitachi, Ltd. 2013. All rights reserved.

11
インメモリデータグリッドって何だ?

インメモリデータグリッドの
3つの特徴

© Hitachi, Ltd. 2013. All rights reserved.

12
インメモリデータグリッドの3つの特徴

①インメモリKVSである

© Hitachi, Ltd. 2013. All rights reserved.

13
インメモリデータグリッドの3つの特徴
①インメモリKVS*である
・一意に識別可能な「キー」とそれに対応する「値」
で構成されるデータを保持するインメモリストア
→レスポンス性能
* KVS: Key Value Store

Key
Foo
Application Server

Value
A

インメモリKVS Bar
Baz

0
A,0

© Hitachi, Ltd. 2013. All rights reserved.

14
インメモリデータグリッドの3つの特徴

②分散している

© Hitachi, Ltd. 2013. All rights reserved.

15
インメモリデータグリッドの3つの特徴
②分散している
・複数サーバのメモリ上にデータを分散配置
→スループット性能と拡張性

Key

Value

Baz

A,0
Key
Foo

A

Bar

Application Server

Value
0

インメモリ分散KVS
© Hitachi, Ltd. 2013. All rights reserved.

16
インメモリデータグリッドの3つの特徴

③実行できる

© Hitachi, Ltd. 2013. All rights reserved.

17
インメモリデータグリッドの3つの特徴
③実行できる
・同時に使うデータを同じ場所に集約する(Grouping*)
・ユーザロジックの分散実行(Distributed Code Execution*)
→ネットワークトラフィックの削減とCPUの活用
* JSR 347: Data Grids for the
JavaTM Platform

Key

Value

G2:Foo

B

G2:Bar

1

G2:Baz

B,1

ユーザロジック

Application Server

インメモリデータグリッド

Key

Value

G1:Foo

A

G1:Bar

グループ処理

0

G1:Baz

A,0

© Hitachi, Ltd. 2013. All rights reserved.

18
インメモリデータグリッドって何だ?

まとめ

© Hitachi, Ltd. 2013. All rights reserved.

19
インメモリデータグリッドって何だ?
大量発信データの高速処理(レスポンス、スループット、スケールアウト)
を実現するために以下の特徴を持つもの
・インメモリKVSである
・分散している
・実行できる

© Hitachi, Ltd. 2013. All rights reserved.

20
インメモリ分散KVSの弱点。
一貫性が崩れる原因と、それを克服する技術とは?

インメモリデータグリッドの
要素技術
(EADs分散基盤編

)

© Hitachi, Ltd. 2013. All rights reserved.
インメモリデータグリッドの要素技術

コンシステントハッシング
~スループット性能向上~

© Hitachi, Ltd. 2013. All rights reserved.

22
コンシステントハッシング
・サーバは232の範囲に等分配置
・Keyのハッシュ値からマスタの保存先を決定
231-1 | -231

サーバ
マスタ

Hash(Foo)

レンジ

Put Foo A

EADs Tool
© Hitachi, Ltd. 2013. All rights reserved.

23
インメモリデータグリッドの要素技術

レプリケーション
~可用性向上~

© Hitachi, Ltd. 2013. All rights reserved.

24
レプリケーション
・多重度定義に従いデータを複製
・高速化のため非同期
231-1 | -231
スレーブ1
サーバ
マスタ

スレーブ2
Hash(Foo)

レンジ

Put Foo A

EADs Tool
© Hitachi, Ltd. 2013. All rights reserved.

25
レプリケーション
・1サーバは複数レンジのデータを保持

231-1 | -231

マスタ

スレーブ1

スレーブ2

EADs Tool
© Hitachi, Ltd. 2013. All rights reserved.

26
インメモリデータグリッドの要素技術

マスタ切替
~可用性向上~

© Hitachi, Ltd. 2013. All rights reserved.

27
マスタ切替(縮退時)
・ハートビートおよびヘルスチェックによる障害検知
・サーバを切り離しマスタを切り替える
障害
231-1 | -231

スレーブ1
→マスタ

EADs Tool
© Hitachi, Ltd. 2013. All rights reserved.

28
マスタ切替(復旧時)
・運用機能によるサーバ追加
・レンジ単位にデータ転送
復旧サーバ

復旧レンジ
転送速度

EADs Tool
© Hitachi, Ltd. 2013. All rights reserved.

29
マスタ切替(復旧時)
・運用機能によるサーバ追加
・レンジ単位にデータ転送
復旧サーバ
復旧レンジ

転送速度

EADs Tool
© Hitachi, Ltd. 2013. All rights reserved.

30
マスタ切替(復旧時)
・運用機能によるサーバ追加
・レンジ単位にデータ転送
復旧サーバ

転送速度
復旧レンジ

EADs Tool
© Hitachi, Ltd. 2013. All rights reserved.

31
マスタ切替(復旧時)
・サーバを追加しマスタを切り替える

復旧

EADs Tool
© Hitachi, Ltd. 2013. All rights reserved.

32
インメモリデータグリッドの要素技術

整合性と一貫性

© Hitachi, Ltd. 2013. All rights reserved.

33
整合性と一貫性
整合性:マスタとスレーブの値が同じ
一貫性:すべてのクライアントから最新の値が見える

Foo=A

Foo=A
Foo=A

Get Foo
Get Foo

→A
→A

© Hitachi, Ltd. 2013. All rights reserved.

34
インメモリデータグリッドの要素技術

一貫性の3つの課題

© Hitachi, Ltd. 2013. All rights reserved.

35
一貫性の3つの課題

①複製順序不正による不整合

© Hitachi, Ltd. 2013. All rights reserved.

36
一貫性の3つの課題
①通信遅延⇒複製順序不正
⇒不整合⇒マスタ切替(永久的障害時)⇒一貫性?

①Foo=A
②Foo=B

①Foo=A
②Foo=B
①Foo=B
遅延
②Foo=A

①Put Foo A
②Put Foo B

整合性:マスタとスレーブの値が同じ
一貫性:すべてのクライアントから最新の値が見える
© Hitachi, Ltd. 2013. All rights reserved.

37
一貫性の3つの課題

②複製処理失敗による不整合

© Hitachi, Ltd. 2013. All rights reserved.

38
一貫性の3つの課題
②一時的障害(サーバ、ネットワーク)⇒複製処理失敗
⇒不整合⇒マスタ切替(永久的障害時)⇒一貫性?

Bar=0
失敗
Bar=01
Bar=01
成功

CAS Bar 0 1

CAS: Compare and Swap
整合性:マスタとスレーブの値が同じ
一貫性:すべてのクライアントから最新の値が見える
© Hitachi, Ltd. 2013. All rights reserved.

39
一貫性の3つの課題

③スプリットブレインによる不整合

© Hitachi, Ltd. 2013. All rights reserved.

40
一貫性の3つの課題
③L2スイッチの障害⇒ネットワーク分断
⇒複数マスタ⇒一貫性?
マスタはこのサーバだ!

スプリット

②Foo=B
マスタはこのサーバだ!
①Foo=A
②Foo=B

②Put Foo B
①Put Foo A

整合性:マスタとスレーブの値が同じ
一貫性:すべてのクライアントから最新の値が見える
© Hitachi, Ltd. 2013. All rights reserved.

41
インメモリデータグリッドの要素技術

参考

© Hitachi, Ltd. 2013. All rights reserved.

42
インメモリデータグリッドの要素技術

ゴシッププロトコル
~一貫性向上~

© Hitachi, Ltd. 2013. All rights reserved.

43
ゴシッププロトコル
・サーバ間で情報交換
・古いデータは新しいデータで上書き
・マスタとスレーブの値がそのうち同じ(結果整合性)
・最新の値が見えるとは限らない

整合性:マスタとスレーブの値が同じ
一貫性:すべてのクライアントから最新の値が見える
© Hitachi, Ltd. 2013. All rights reserved.

44
インメモリデータグリッドの要素技術

リードリペア
~一貫性向上~

© Hitachi, Ltd. 2013. All rights reserved.

45
リードリペア
・読み込み処理時に複数のサーバからデータを取得
・古いデータは新しいデータで上書き
・マスタとスレーブの値がそのうち同じ(結果整合性)
・最新の値が見えるとは限らない(確度を調整可能(QUORUM))

整合性:マスタとスレーブの値が同じ
一貫性:すべてのクライアントから最新の値が見える
© Hitachi, Ltd. 2013. All rights reserved.

46
インメモリデータグリッドの要素技術

まとめ

© Hitachi, Ltd. 2013. All rights reserved.

47
インメモリデータグリッドの要素技術
要素技術
・コンシステントハッシング
・レプリケーション
・マスタ切替
・ゴシッププロトコル
・リードリペア
一貫性の3つの課題
①複製順序不正による不整合
②複製処理失敗による不整合
③スプリットブレインによる不整合

© Hitachi, Ltd. 2013. All rights reserved.

48
インメモリ分散KVSの弱点。
一貫性が崩れる原因と、それを克服する技術とは?

強一貫性への挑戦!

© Hitachi, Ltd. 2013. All rights reserved.
強一貫性への挑戦!

解決へのアプローチ

© Hitachi, Ltd. 2013. All rights reserved.

50
解決へのアプローチ
①複製順序不正による不整合
②複製処理失敗による不整合
③スプリットブレインによる不整合

データ更新、ステータス更新に
分散合意アルゴリズムPaxos*を採用

* The Part-Time Parliament
LESLIE LAMPORT, 1998

© Hitachi, Ltd. 2013. All rights reserved.

51
強一貫性への挑戦!

Paxosとは

© Hitachi, Ltd. 2013. All rights reserved.

52
Paxosとは
サーバの集合が同じ処理を同じ順番で実行するためのアルゴリズム

Server1

Server2

Server3

1番目の処理

put(k1,v1)

put(k1,v1)

put(k1,v1)

2番目の処理

remove(k1)

remove(k1)

remove(k1)

i番目の処理

put(k1,v2)

put(k1,v2)

put(k1,v2)

整合

キー
k1

バリュー
v2
© Hitachi, Ltd. 2013. All rights reserved.

53
Paxosとは
Proposer:
1. i番目の処理を提案
Acceptor:
2. Acceptor間で過半数承認(i番目の処理を合意)
3. i番目の処理を実行
※i-1番目までの処理を実行していなければ、
i-1番目までの処理を他のAcceptorから取得して実行(FillGaps)

© Hitachi, Ltd. 2013. All rights reserved.

54
強一貫性への挑戦!

一貫性保証のための3つの実装

© Hitachi, Ltd. 2013. All rights reserved.

55
一貫性保証のための3つの実装

①複製順序不正による不整合
の回避

© Hitachi, Ltd. 2013. All rights reserved.

56
①複製順序不正による不整合の回避
Proposer:マスタを持つサーバ
Acceptor:マスタ、スレーブ1、スレーブ2を持つサーバ+スペア*×2
* スペア:過半数承認用(2多重障害対応)。ストア操作なし。
サーバ1
put(k,v)

レンジ用
Paxos

実行
キュー

実行
スレッド

ストア
マスタ
スレーブ1
スレーブ2

サーバ2
マスタ
スレーブ1
スレーブ2

サーバ3
マスタ
スレーブ1
スレーブ2

サーバ4
マスタ
スレーブ1
スレーブ2

サーバ5
マスタ
スレーブ1
スレーブ2
© Hitachi, Ltd. 2013. All rights reserved.

57
①複製順序不正による不整合の回避
Proposer:i番目の処理を提案
Acceptor:Acceptor間で過半数承認(i番目の処理を合意)
サーバ1

レンジ用
Paxos

put(k,v)

実行
キュー

実行
スレッド

ストア

ok

マスタ
スレーブ1
スレーブ2

ok

マスタ
スレーブ1
スレーブ2

ok

マスタ
スレーブ1
スレーブ2

ok

マスタ
スレーブ1
スレーブ2

ok

マスタ
スレーブ1
スレーブ2

i

サーバ2

サーバ3

サーバ4

サーバ5

© Hitachi, Ltd. 2013. All rights reserved.

58
①複製順序不正による不整合の回避
Acceptor:i番目の処理を実行
”①複製順序不正による不整合”は発生しない!
サーバ1

レンジ用
Paxos

実行
キュー

put(k,v)

実行
スレッド

ストア

i

マスタ
スレーブ1
スレーブ2

i

マスタ
スレーブ1
スレーブ2

i

マスタ
スレーブ1
スレーブ2

サーバ2

サーバ3

サーバ4
マスタ
スレーブ1
スレーブ2

サーバ5
マスタ
スレーブ1
スレーブ2
© Hitachi, Ltd. 2013. All rights reserved.

59
①複製順序不正による不整合の回避
サーバの集合が同じ処理を同じ順番で実行する
同じ処理ができなければ縮退(一貫性>可用性)
サーバ1

レンジ用
Paxos

実行
キュー

実行
スレッド

ストア

put(k,v)

マスタ
スレーブ1
スレーブ2

i

サーバ2
i

失敗

マスタ
スレーブ1
スレーブ2

サーバ3
i

マスタ
スレーブ1
スレーブ2

サーバ4
マスタ
スレーブ1
スレーブ2

サーバ5
マスタ
スレーブ1
スレーブ2
© Hitachi, Ltd. 2013. All rights reserved.

60
一貫性保証のための3つの実装

②複製処理失敗による不整合
の対処

© Hitachi, Ltd. 2013. All rights reserved.

61
②複製処理失敗による不整合の対処
一時的障害(サーバ、ネットワーク)

サーバ1
cas(k,v1,v2)

レンジ用
Paxos

実行
キュー

実行
スレッド

ストア
マスタ
スレーブ1
スレーブ2

サーバ2

一時的障害

マスタ
スレーブ1
スレーブ2

サーバ3
マスタ
スレーブ1
スレーブ2

サーバ4
マスタ
スレーブ1
スレーブ2

サーバ5
マスタ
スレーブ1
スレーブ2
© Hitachi, Ltd. 2013. All rights reserved.

62
②複製処理失敗による不整合の対処
Proposer:i番目の処理を提案
Acceptor:Acceptor間で過半数承認(i番目の処理を合意)
サーバ1

レンジ用
Paxos

cas(k,v1,v2)
i

ok

実行
キュー

実行
スレッド

ストア
マスタ
スレーブ1
スレーブ2

サーバ2
マスタ
スレーブ1
スレーブ2

一時的障害

サーバ3

ok

マスタ
スレーブ1
スレーブ2

ok

マスタ
スレーブ1
スレーブ2

ok

マスタ
スレーブ1
スレーブ2

サーバ4

サーバ5

© Hitachi, Ltd. 2013. All rights reserved.

63
②複製処理失敗による不整合の対処
Acceptor:i番目の処理を実行

サーバ1

レンジ用
Paxos

実行
キュー

cas(k,v1,v2)
i

実行
スレッド

ストア
マスタ
スレーブ1
スレーブ2

サーバ2
マスタ
スレーブ1
スレーブ2

一時的障害

サーバ3
i

マスタ
スレーブ1
スレーブ2

サーバ4
マスタ
スレーブ1
スレーブ2

サーバ5
マスタ
スレーブ1
スレーブ2
© Hitachi, Ltd. 2013. All rights reserved.

64
②複製処理失敗による不整合の対処
不整合

サーバ1

レンジ用
Paxos

実行
キュー

実行
スレッド

ストア

cas(k,v2,v3)
i

サーバ2

マスタ
スレーブ1
スレーブ2

不整合
マスタ
スレーブ1
スレーブ2

サーバ3
i

マスタ
スレーブ1
スレーブ2

サーバ4
マスタ
スレーブ1
スレーブ2

サーバ5
マスタ
スレーブ1
スレーブ2
© Hitachi, Ltd. 2013. All rights reserved.

65
②複製処理失敗による不整合の対処
Proposer:i+1番目の処理を提案
Acceptor:Acceptor間で過半数承認(i+1番目の処理を合意)
サーバ1

レンジ用
Paxos

実行
キュー

実行
スレッド

ストア

cas(k,v2,v3)
i

i+1

ok
サーバ2

マスタ
スレーブ1
スレーブ2

不整合
マスタ
スレーブ1
スレーブ2

ok
サーバ3

ok

マスタ
スレーブ1
スレーブ2

ok

マスタ
スレーブ1
スレーブ2

ok

マスタ
スレーブ1
スレーブ2

i

サーバ4

サーバ5

© Hitachi, Ltd. 2013. All rights reserved.

66
②複製処理失敗による不整合の対処
Acceptor:FillGapsをおこなってからi+1番目の処理を実行

サーバ1

レンジ用
Paxos

実行
キュー

実行
スレッド

ストア

cas(k,v2,v3)
i

i+1

サーバ2

マスタ
スレーブ1
スレーブ2

不整合
FillGaps

マスタ
スレーブ1
スレーブ2

i+1 i

サーバ3
i+1

i

マスタ
スレーブ1
スレーブ2

サーバ4
マスタ
スレーブ1
スレーブ2

サーバ5
マスタ
スレーブ1
スレーブ2
© Hitachi, Ltd. 2013. All rights reserved.

67
②複製処理失敗による不整合の対処
不整合
永久的障害によるマスタ切替
サーバ1

レンジ用
Paxos

実行
キュー

実行
スレッド

永久的障害

サーバ2
get(k)

ストア
i

マスタ
スレーブ1
スレーブ2

不整合
マスタ
マスタ
スレーブ2

マスタ切替

サーバ3
i

マスタ
スレーブ1
スレーブ2

サーバ4
マスタ
スレーブ1
スレーブ2

サーバ5
マスタ
スレーブ1
スレーブ2
© Hitachi, Ltd. 2013. All rights reserved.

68
②複製処理失敗による不整合の対処
Acceptor:マスタ切替後はFillGapsをおこなってからgetを受付
”②複製処理失敗による不整合”が発生しても一貫性を保証する!
サーバ1

レンジ用
Paxos

実行
キュー

実行
スレッド

永久的障害

ストア
i

サーバ2

マスタ
スレーブ1
スレーブ2

不整合

get(k)

マスタ
マスタ
スレーブ2

FillGaps i

マスタ切替

サーバ3
i

マスタ
スレーブ1
スレーブ2

サーバ4
マスタ
スレーブ1
スレーブ2

サーバ5
マスタ
スレーブ1
スレーブ2
© Hitachi, Ltd. 2013. All rights reserved.

69
②複製処理失敗による不整合の対処
サーバの集合が同じ処理を同じ順番で実行する
同じ順番でできなければ縮退(一貫性>可用性)
サーバ1

レンジ用
Paxos

実行
キュー

実行
スレッド

永久的障害

ストア
i

サーバ2
get(k)

失敗

マスタ
スレーブ1
スレーブ2

不整合
マスタ
マスタ
スレーブ2

FillGaps

マスタ切替

サーバ3
i

マスタ
スレーブ1
スレーブ2

サーバ4
マスタ
スレーブ1
スレーブ2

サーバ5
マスタ
スレーブ1
スレーブ2
© Hitachi, Ltd. 2013. All rights reserved.

70
一貫性保証のための3つの実装

③スプリットブレインによる不整合
の対処

© Hitachi, Ltd. 2013. All rights reserved.

71
③スプリットブレインによる不整合の対処
L2スイッチの障害

サーバ1
3×
4×
5×

クラスタ用
Paxos

実行
キュー

実行
スレッド

ストア
マスタ
スレーブ1
スレーブ2

サーバ2
3×
4×
5×

マスタ
スレーブ1
スレーブ2

スプリット

サーバ3
1×
2×

マスタ
スレーブ1
スレーブ2

サーバ4
1×
2×

マスタ
スレーブ1
スレーブ2

サーバ5
1×
2×

マスタ
スレーブ1
スレーブ2
© Hitachi, Ltd. 2013. All rights reserved.

72
③スプリットブレインによる不整合の対処
Proposer:障害を検知したサーバ
Acceptor:すべてのサーバ
サーバ1
3×
4×
5×

クラスタ用
Paxos

実行
キュー

実行
スレッド

ストア
マスタ
スレーブ1
スレーブ2

サーバ2
3×
4×
5×

マスタ
スレーブ1
スレーブ2

スプリット

サーバ3
1×
2×

マスタ
スレーブ1
スレーブ2

サーバ4
1×
2×

マスタ
スレーブ1
スレーブ2

サーバ5
1×
2×

マスタ
スレーブ1
スレーブ2
© Hitachi, Ltd. 2013. All rights reserved.

73
③スプリットブレインによる不整合の対処
Proposer:i番目の処理を提案
Acceptor:Acceptor間で過半数承認(i番目の処理を合意)
サーバ1
3×
4×
5×

クラスタ用
Paxos
i+2 i+1

i

ok ok ok

実行
キュー

実行
スレッド

ストア
マスタ
スレーブ1
スレーブ2

サーバ2
3×
4×
5×

i+2 i+1

i

ok ok ok

マスタ
スレーブ1
スレーブ2

スプリット

サーバ3
1×
2×

合意
i+1

i

ok ok

マスタ
スレーブ1
スレーブ2

サーバ4
1×
2×

i+1

i

ok ok

マスタ
スレーブ1
スレーブ2

サーバ5
1×
2×

i+1

i

ok ok

マスタ
スレーブ1
スレーブ2
© Hitachi, Ltd. 2013. All rights reserved.

74
③スプリットブレインによる不整合の対処
Acceptor:i番目の処理を実行

サーバ1
3×
4×
5×

クラスタ用
Paxos
i+2 i+1

実行
キュー

実行
スレッド

ストア
マスタ
スレーブ1
スレーブ2

i

ok ok ok

サーバ2
3×
4×
5×

i+2 i+1

マスタ
スレーブ1
スレーブ2

i

ok ok ok

スプリット

サーバ3
1×
2×

i+1 i

マスタ
スレーブ1
スレーブ2

i+1 i

マスタ
スレーブ1
スレーブ2

i+1 i

マスタ
スレーブ1
スレーブ2

サーバ4
1×
2×
サーバ5
1×
2×

© Hitachi, Ltd. 2013. All rights reserved.

75
③スプリットブレインによる不整合の対処
不整合
複数マスタ
サーバ1
get(k)

3×
4×
5×

クラスタ用
Paxos
i+2 i+1

実行
キュー

実行
スレッド
不整合

i

ok ok ok

ストア
マスタ
スレーブ1
スレーブ2

サーバ2
3×
4×
5×
get(k)

不整合
i+2 i+1

i

ok ok ok

マスタ
スレーブ1
スレーブ2

スプリット

サーバ3
1×
2×

i+1 i

マスタ
マスタ
マスタ

マスタ切替
FillGaps

サーバ4
1×
2×

i+1 i

マスタ
スレーブ1
スレーブ2

サーバ5
1×
2×

i+1 i

マスタ
スレーブ1
スレーブ2
© Hitachi, Ltd. 2013. All rights reserved.

76
③スプリットブレインによる不整合の対処
Acceptor:過半数サーバ縮退の提案が通らなければgetを拒否
”③スプリットブレインによる不整合”が発生しても一貫性を保証する!
サーバ1
get(k)

失敗

3×
4×
5×

クラスタ用
Paxos
i+2 i+1

実行
キュー

実行
スレッド
不整合

i

ok ok ok

ストア
マスタ
スレーブ1
スレーブ2

サーバ2
3×
4×
5×
get(k)

不整合
i+2 i+1

i

ok ok ok

マスタ
スレーブ1
スレーブ2

スプリット

サーバ3
1×
2×

i+1 i

成功

マスタ
マスタ
マスタ

マスタ切替
FillGaps

サーバ4
1×
2×

i+1 i

マスタ
スレーブ1
スレーブ2

サーバ5
1×
2×

i+1 i

マスタ
スレーブ1
スレーブ2
© Hitachi, Ltd. 2013. All rights reserved.

77
強一貫性への挑戦!

まとめ

© Hitachi, Ltd. 2013. All rights reserved.

78
強一貫性への挑戦!
Paxos
・サーバの集合が同じ処理を同じ順番で実行するためのアルゴリズム
一貫性保証のための3つの実装
①複製順序不正による不整合の回避
②複製処理失敗による不整合の対処
③スプリットブレインによる不整合の対処

© Hitachi, Ltd. 2013. All rights reserved.

79
他社商品名、商標等の引用に関する表示

•
•
•

Javaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。
その他、記載の会社名、製品名は、それぞれの会社の商標または登録商標です。
製品の改良により予告なく記載されている仕様が変更になることがあります。

© Hitachi, Ltd. 2013. All rights reserved.

80
db tech showcase 東京 2013

END
インメモリ分散KVSの弱点。一貫性が崩れる原因と、それを克服する技術とは?

2013/11/13
日立製作所 情報・通信システム社
ソフトウェア開発本部 第2AP基盤ソフト設計部

梅田多一
[C16] インメモリ分散KVSの弱点。一貫性が崩れる原因と、それを克服する技術とは? by Taichi Umeda

More Related Content

[C16] インメモリ分散KVSの弱点。一貫性が崩れる原因と、それを克服する技術とは? by Taichi Umeda