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

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

  • 2,482 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,482
On Slideshare
0
From Embeds
0
Number of Embeds
4

Actions

Shares
Downloads
47
Comments
0
Likes
9

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. db tech showcase 東京 2013 インメモリ分散KVSの弱点。 一貫性が崩れる原因と、 それを克服する技術とは? 2013/11/13 日立製作所 情報・通信システム社 ソフトウェア開発本部 第2AP基盤ソフト設計部 梅田多一
  • 2. 自己紹介 © Hitachi, Ltd. 2013. All rights reserved.
  • 3. 2000年入社 ・ミドルウェア開発 ・テクニカルサポート 仕事のスタイル ・TTP ・GNN DB Online http://enterprisezine.jp/dbonline/detail/5010 © Hitachi, Ltd. 2013. All rights reserved. 2
  • 4. インメモリ分散KVSの弱点。 一貫性が崩れる原因と、それを克服する技術とは? Contents インメモリデータグリッドって何だ? インメモリデータグリッドの要素技術 強一貫性への挑戦! © Hitachi, Ltd. 2013. All rights reserved.
  • 5. インメモリ分散KVSの弱点。 一貫性が崩れる原因と、それを克服する技術とは? インメモリデータグリッドって 何だ? © Hitachi, Ltd. 2013. All rights reserved.
  • 6. インメモリデータグリッドって何だ? 登場の背景 © Hitachi, Ltd. 2013. All rights reserved. 5
  • 7. 登場の背景 ・発信データの爆発的増加(Big Data) ・データを扱うミドルウェアへの要件として 大量発信データの高速処理、リアルタイム分析、大量蓄積データの高速検索、、 モ ノ の発信 Bi g Data 電力メーター 運行情報 通話ログ 人 の発信 動画・画像・音声 コンテンツダウンロード SNS つぶやき カーナビ GPS 設備監視 物流トレース メール・オフィス文書 スマートフォン 監視映像 環境・気象データ データベース ICカード利用 人の移動 ネット購入 診断画像・ 電子カルテ © Hitachi, Ltd. 2013. All rights reserved. 6
  • 8. インメモリデータグリッドって何だ? 日立の取り組み © Hitachi, Ltd. 2013. All rights reserved. 7
  • 9. 日立の取り組み ①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
  • 10. インメモリデータグリッドって何だ? 日立の案件 © Hitachi, Ltd. 2013. All rights reserved. 9
  • 11. 日立の案件(電力) スマートメータ 収集サーバから出力される大量の検針値(30分値)を、 一定期間(40日)分DBに格納したい。 工場 検針値 1日分 オフィス 戸建 大量の検針値を 高速に受信 当日分メモリ保持、日次ジョブ実行による 一日分ファイル出力、一括DBロード © Hitachi, Ltd. 2013. All rights reserved. 10
  • 12. 日立の案件(通信) メディエーション/TMS 交換機から出力される大量のRawCDRを、 課金システムや帯域制御システム向けのCDRに編集したい。 RawCDR: 接続開始/一定時間経過/HO発生/接続終了などのタイミングで出力される、 接続ID、接続時間、通信量などの情報。 CDR: 同一の接続に対する分割情報であるRawCDRを結合(通信量の合算など)した情報。 RawCDR CDR 大量の接続情報を 高速に受信 同一接続のデータ集合を イベントドリブンに編集 © Hitachi, Ltd. 2013. All rights reserved. 11
  • 13. インメモリデータグリッドって何だ? インメモリデータグリッドの 3つの特徴 © Hitachi, Ltd. 2013. All rights reserved. 12
  • 14. インメモリデータグリッドの3つの特徴 ①インメモリKVSである © Hitachi, Ltd. 2013. All rights reserved. 13
  • 15. インメモリデータグリッドの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
  • 16. インメモリデータグリッドの3つの特徴 ②分散している © Hitachi, Ltd. 2013. All rights reserved. 15
  • 17. インメモリデータグリッドの3つの特徴 ②分散している ・複数サーバのメモリ上にデータを分散配置 →スループット性能と拡張性 Key Value Baz A,0 Key Foo A Bar Application Server Value 0 インメモリ分散KVS © Hitachi, Ltd. 2013. All rights reserved. 16
  • 18. インメモリデータグリッドの3つの特徴 ③実行できる © Hitachi, Ltd. 2013. All rights reserved. 17
  • 19. インメモリデータグリッドの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
  • 20. インメモリデータグリッドって何だ? まとめ © Hitachi, Ltd. 2013. All rights reserved. 19
  • 21. インメモリデータグリッドって何だ? 大量発信データの高速処理(レスポンス、スループット、スケールアウト) を実現するために以下の特徴を持つもの ・インメモリKVSである ・分散している ・実行できる © Hitachi, Ltd. 2013. All rights reserved. 20
  • 22. インメモリ分散KVSの弱点。 一貫性が崩れる原因と、それを克服する技術とは? インメモリデータグリッドの 要素技術 (EADs分散基盤編 ) © Hitachi, Ltd. 2013. All rights reserved.
  • 23. インメモリデータグリッドの要素技術 コンシステントハッシング ~スループット性能向上~ © Hitachi, Ltd. 2013. All rights reserved. 22
  • 24. コンシステントハッシング ・サーバは232の範囲に等分配置 ・Keyのハッシュ値からマスタの保存先を決定 231-1 | -231 サーバ マスタ Hash(Foo) レンジ Put Foo A EADs Tool © Hitachi, Ltd. 2013. All rights reserved. 23
  • 25. インメモリデータグリッドの要素技術 レプリケーション ~可用性向上~ © Hitachi, Ltd. 2013. All rights reserved. 24
  • 26. レプリケーション ・多重度定義に従いデータを複製 ・高速化のため非同期 231-1 | -231 スレーブ1 サーバ マスタ スレーブ2 Hash(Foo) レンジ Put Foo A EADs Tool © Hitachi, Ltd. 2013. All rights reserved. 25
  • 27. レプリケーション ・1サーバは複数レンジのデータを保持 231-1 | -231 マスタ スレーブ1 スレーブ2 EADs Tool © Hitachi, Ltd. 2013. All rights reserved. 26
  • 28. インメモリデータグリッドの要素技術 マスタ切替 ~可用性向上~ © Hitachi, Ltd. 2013. All rights reserved. 27
  • 29. マスタ切替(縮退時) ・ハートビートおよびヘルスチェックによる障害検知 ・サーバを切り離しマスタを切り替える 障害 231-1 | -231 スレーブ1 →マスタ EADs Tool © Hitachi, Ltd. 2013. All rights reserved. 28
  • 30. マスタ切替(復旧時) ・運用機能によるサーバ追加 ・レンジ単位にデータ転送 復旧サーバ 復旧レンジ 転送速度 EADs Tool © Hitachi, Ltd. 2013. All rights reserved. 29
  • 31. マスタ切替(復旧時) ・運用機能によるサーバ追加 ・レンジ単位にデータ転送 復旧サーバ 復旧レンジ 転送速度 EADs Tool © Hitachi, Ltd. 2013. All rights reserved. 30
  • 32. マスタ切替(復旧時) ・運用機能によるサーバ追加 ・レンジ単位にデータ転送 復旧サーバ 転送速度 復旧レンジ EADs Tool © Hitachi, Ltd. 2013. All rights reserved. 31
  • 33. マスタ切替(復旧時) ・サーバを追加しマスタを切り替える 復旧 EADs Tool © Hitachi, Ltd. 2013. All rights reserved. 32
  • 34. インメモリデータグリッドの要素技術 整合性と一貫性 © Hitachi, Ltd. 2013. All rights reserved. 33
  • 35. 整合性と一貫性 整合性:マスタとスレーブの値が同じ 一貫性:すべてのクライアントから最新の値が見える Foo=A Foo=A Foo=A Get Foo Get Foo →A →A © Hitachi, Ltd. 2013. All rights reserved. 34
  • 36. インメモリデータグリッドの要素技術 一貫性の3つの課題 © Hitachi, Ltd. 2013. All rights reserved. 35
  • 37. 一貫性の3つの課題 ①複製順序不正による不整合 © Hitachi, Ltd. 2013. All rights reserved. 36
  • 38. 一貫性の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
  • 39. 一貫性の3つの課題 ②複製処理失敗による不整合 © Hitachi, Ltd. 2013. All rights reserved. 38
  • 40. 一貫性の3つの課題 ②一時的障害(サーバ、ネットワーク)⇒複製処理失敗 ⇒不整合⇒マスタ切替(永久的障害時)⇒一貫性? Bar=0 失敗 Bar=01 Bar=01 成功 CAS Bar 0 1 CAS: Compare and Swap 整合性:マスタとスレーブの値が同じ 一貫性:すべてのクライアントから最新の値が見える © Hitachi, Ltd. 2013. All rights reserved. 39
  • 41. 一貫性の3つの課題 ③スプリットブレインによる不整合 © Hitachi, Ltd. 2013. All rights reserved. 40
  • 42. 一貫性の3つの課題 ③L2スイッチの障害⇒ネットワーク分断 ⇒複数マスタ⇒一貫性? マスタはこのサーバだ! スプリット ②Foo=B マスタはこのサーバだ! ①Foo=A ②Foo=B ②Put Foo B ①Put Foo A 整合性:マスタとスレーブの値が同じ 一貫性:すべてのクライアントから最新の値が見える © Hitachi, Ltd. 2013. All rights reserved. 41
  • 43. インメモリデータグリッドの要素技術 参考 © Hitachi, Ltd. 2013. All rights reserved. 42
  • 44. インメモリデータグリッドの要素技術 ゴシッププロトコル ~一貫性向上~ © Hitachi, Ltd. 2013. All rights reserved. 43
  • 45. ゴシッププロトコル ・サーバ間で情報交換 ・古いデータは新しいデータで上書き ・マスタとスレーブの値がそのうち同じ(結果整合性) ・最新の値が見えるとは限らない 整合性:マスタとスレーブの値が同じ 一貫性:すべてのクライアントから最新の値が見える © Hitachi, Ltd. 2013. All rights reserved. 44
  • 46. インメモリデータグリッドの要素技術 リードリペア ~一貫性向上~ © Hitachi, Ltd. 2013. All rights reserved. 45
  • 47. リードリペア ・読み込み処理時に複数のサーバからデータを取得 ・古いデータは新しいデータで上書き ・マスタとスレーブの値がそのうち同じ(結果整合性) ・最新の値が見えるとは限らない(確度を調整可能(QUORUM)) 整合性:マスタとスレーブの値が同じ 一貫性:すべてのクライアントから最新の値が見える © Hitachi, Ltd. 2013. All rights reserved. 46
  • 48. インメモリデータグリッドの要素技術 まとめ © Hitachi, Ltd. 2013. All rights reserved. 47
  • 49. インメモリデータグリッドの要素技術 要素技術 ・コンシステントハッシング ・レプリケーション ・マスタ切替 ・ゴシッププロトコル ・リードリペア 一貫性の3つの課題 ①複製順序不正による不整合 ②複製処理失敗による不整合 ③スプリットブレインによる不整合 © Hitachi, Ltd. 2013. All rights reserved. 48
  • 50. インメモリ分散KVSの弱点。 一貫性が崩れる原因と、それを克服する技術とは? 強一貫性への挑戦! © Hitachi, Ltd. 2013. All rights reserved.
  • 51. 強一貫性への挑戦! 解決へのアプローチ © Hitachi, Ltd. 2013. All rights reserved. 50
  • 52. 解決へのアプローチ ①複製順序不正による不整合 ②複製処理失敗による不整合 ③スプリットブレインによる不整合 データ更新、ステータス更新に 分散合意アルゴリズムPaxos*を採用 * The Part-Time Parliament LESLIE LAMPORT, 1998 © Hitachi, Ltd. 2013. All rights reserved. 51
  • 53. 強一貫性への挑戦! Paxosとは © Hitachi, Ltd. 2013. All rights reserved. 52
  • 54. 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
  • 55. Paxosとは Proposer: 1. i番目の処理を提案 Acceptor: 2. Acceptor間で過半数承認(i番目の処理を合意) 3. i番目の処理を実行 ※i-1番目までの処理を実行していなければ、 i-1番目までの処理を他のAcceptorから取得して実行(FillGaps) © Hitachi, Ltd. 2013. All rights reserved. 54
  • 56. 強一貫性への挑戦! 一貫性保証のための3つの実装 © Hitachi, Ltd. 2013. All rights reserved. 55
  • 57. 一貫性保証のための3つの実装 ①複製順序不正による不整合 の回避 © Hitachi, Ltd. 2013. All rights reserved. 56
  • 58. ①複製順序不正による不整合の回避 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
  • 59. ①複製順序不正による不整合の回避 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
  • 60. ①複製順序不正による不整合の回避 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
  • 61. ①複製順序不正による不整合の回避 サーバの集合が同じ処理を同じ順番で実行する 同じ処理ができなければ縮退(一貫性>可用性) サーバ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
  • 62. 一貫性保証のための3つの実装 ②複製処理失敗による不整合 の対処 © Hitachi, Ltd. 2013. All rights reserved. 61
  • 63. ②複製処理失敗による不整合の対処 一時的障害(サーバ、ネットワーク) サーバ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
  • 64. ②複製処理失敗による不整合の対処 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
  • 65. ②複製処理失敗による不整合の対処 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
  • 66. ②複製処理失敗による不整合の対処 不整合 サーバ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
  • 67. ②複製処理失敗による不整合の対処 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
  • 68. ②複製処理失敗による不整合の対処 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
  • 69. ②複製処理失敗による不整合の対処 不整合 永久的障害によるマスタ切替 サーバ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
  • 70. ②複製処理失敗による不整合の対処 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
  • 71. ②複製処理失敗による不整合の対処 サーバの集合が同じ処理を同じ順番で実行する 同じ順番でできなければ縮退(一貫性>可用性) サーバ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
  • 72. 一貫性保証のための3つの実装 ③スプリットブレインによる不整合 の対処 © Hitachi, Ltd. 2013. All rights reserved. 71
  • 73. ③スプリットブレインによる不整合の対処 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
  • 74. ③スプリットブレインによる不整合の対処 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
  • 75. ③スプリットブレインによる不整合の対処 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
  • 76. ③スプリットブレインによる不整合の対処 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
  • 77. ③スプリットブレインによる不整合の対処 不整合 複数マスタ サーバ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
  • 78. ③スプリットブレインによる不整合の対処 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
  • 79. 強一貫性への挑戦! まとめ © Hitachi, Ltd. 2013. All rights reserved. 78
  • 80. 強一貫性への挑戦! Paxos ・サーバの集合が同じ処理を同じ順番で実行するためのアルゴリズム 一貫性保証のための3つの実装 ①複製順序不正による不整合の回避 ②複製処理失敗による不整合の対処 ③スプリットブレインによる不整合の対処 © Hitachi, Ltd. 2013. All rights reserved. 79
  • 81. 他社商品名、商標等の引用に関する表示 • • • Javaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。 その他、記載の会社名、製品名は、それぞれの会社の商標または登録商標です。 製品の改良により予告なく記載されている仕様が変更になることがあります。 © Hitachi, Ltd. 2013. All rights reserved. 80
  • 82. db tech showcase 東京 2013 END インメモリ分散KVSの弱点。一貫性が崩れる原因と、それを克服する技術とは? 2013/11/13 日立製作所 情報・通信システム社 ソフトウェア開発本部 第2AP基盤ソフト設計部 梅田多一