[D12] 日立だからこだわる ~一貫性を追求した日立のインメモリ分散KVS~ by Masakata Kawanishi

2,499 views

Published on

Published in: Technology
0 Comments
10 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,499
On SlideShare
0
From Embeds
0
Number of Embeds
87
Actions
Shares
0
Downloads
31
Comments
0
Likes
10
Embeds 0
No embeds

No notes for slide

[D12] 日立だからこだわる ~一貫性を追求した日立のインメモリ分散KVS~ by Masakata Kawanishi

  1. 1. © Hitachi, Ltd. 2014. All rights reserved. 日立だからこだわる。 ~一貫性を追求したインメモリ分散KVS~ 株式会社日立製作所 情報・通信システム社 ITプラットフォーム事業本部 開発統括本部 ソフトウェア開発本部 第2AP基盤ソフト設計部 川西 正容 1
  2. 2. © Hitachi, Ltd. 2014. All rights reserved. 自己紹介 名前:川西 正容(カワニシ マサカタ) 会社:2012年度入社。とても大きい 仕事:ミドルウェアの設計・開発 著書:書いてみたい 2
  3. 3. © Hitachi, Ltd. 2014. All rights reserved. 一貫性ってなに?やばいの? やばいです 説明します 3
  4. 4. © Hitachi, Ltd. 2014. All rights reserved. アジェンダ 1.分散KVSとは 2.分散KVSの弱点 3.日立のシステム 4.日立のインメモリ分散KVS 4
  5. 5. © Hitachi, Ltd. 2014. All rights reserved. 1.分散KVSとは 5
  6. 6. © Hitachi, Ltd. 2014. All rights reserved. 特徴 ・負荷分散 ・スケーラビリティ ・可用性 6
  7. 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. 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. 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. 10. © Hitachi, Ltd. 2014. All rights reserved. 分散KVSは 大量データを高速に処理したい ときに使用されています 10
  11. 11. © Hitachi, Ltd. 2014. All rights reserved. 2.分散KVSの弱点 11
  12. 12. © Hitachi, Ltd. 2014. All rights reserved. 一貫性 常に単一の最新データを取得したいが… 12 A aaa A aaa A aaa get
  13. 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. 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. 15. © Hitachi, Ltd. 2014. All rights reserved. そのデータは正しい? 正しいデータを取得できない 15 A aaa get A aaa A aaaデータが残っている…? ???
  16. 16. © Hitachi, Ltd. 2014. All rights reserved. 分散KVSの弱点 一時的な障害や遅延で 一貫性が崩れて システムトラブル の可能性があります 16
  17. 17. © Hitachi, Ltd. 2014. All rights reserved. 3.日立のシステム 17
  18. 18. © Hitachi, Ltd. 2014. All rights reserved. メッセージング メールを高速に振り分ける 18 分散KVS携帯電話 管理システム
  19. 19. © Hitachi, Ltd. 2014. All rights reserved. スマートメータ 電力消費量を管理する 19 電化製品 電力会社分散KVS
  20. 20. © Hitachi, Ltd. 2014. All rights reserved. TMS (Traffic Management Solution) 20 通信量をリアルタイムに制御する 中継地 制御システム分散KVS
  21. 21. © Hitachi, Ltd. 2014. All rights reserved. 日立のシステム もしも一貫性が崩れて システムトラブルが起きたら とんでもないことになります 21
  22. 22. © Hitachi, Ltd. 2014. All rights reserved. 4.日立のインメモリ分散KVS 22
  23. 23. © Hitachi, Ltd. 2014. All rights reserved. 日立のインメモリ分散KVS 日立のシステムに導入されている インメモリ分散KVS EADs (uCosminexus Elastic Application Data store) 23
  24. 24. © Hitachi, Ltd. 2014. All rights reserved. EADs ・インメモリ ・自動分散配置 ・故障検知 ・稼動中サーバ復旧 ・Paxos 24
  25. 25. © Hitachi, Ltd. 2014. All rights reserved. インメモリにデータを保存するため 読み書きが高速 EADs2 EADs3 EADs4 EADs5 EADs1 インメモリ 25 Master Slave Slave
  26. 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. 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. 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. 29. © Hitachi, Ltd. 2014. All rights reserved. ・インメモリ ・自動分散配置 ・故障検知 ・稼動中サーバ復旧 高速処理とか可用性のための ここらへんは当たり前ですよね 29
  30. 30. © Hitachi, Ltd. 2014. All rights reserved. EADsの特徴は 一貫性保証 一貫性が崩れる要因 ・一時的な障害 ・スプリットブレイン 30
  31. 31. © Hitachi, Ltd. 2014. All rights reserved. 一貫性が崩れる要因 ・一時的な障害 ・スプリットブレイン 31
  32. 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. 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. 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. 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. 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. 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. 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. 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. 40. © Hitachi, Ltd. 2014. All rights reserved. 一貫性が崩れる要因 ・一時的な障害 ・スプリットブレイン 40
  41. 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. 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. 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. 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. 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. 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. 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. 48. © Hitachi, Ltd. 2014. All rights reserved. EADs ・インメモリ ・自動分散配置 ・故障検知 ・稼動中サーバ復旧 ・Paxos 48
  49. 49. © Hitachi, Ltd. 2014. All rights reserved. Paxos 一時的な障害でもスプリットブレインでも 同一の処理を同一の順序で配信する アルゴリズム ・過半数承認 ・処理補完 49
  50. 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. 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. 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. 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. 54. © Hitachi, Ltd. 2014. All rights reserved. EADs2 EADs3 EADs4 EADs5 EADs1 障害中だったサーバが回復したら… 54 回復したけど 仲間はずれ… A aaa A aaa Slave Slave Master
  55. 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. 56. © Hitachi, Ltd. 2014. All rights reserved. EADs2 EADs3 EADs4 EADs5 EADs1 処理補完 前回の承認内容を記録しているサーバは 56 A aaa A aaa Slave Slave Master
  57. 57. © Hitachi, Ltd. 2014. All rights reserved. EADs2 EADs3 EADs4 EADs5 EADs1 処理補完 今回承認するサーバの中に必ず含まれる 57 承認するサーバ達 A aaa A aaa Slave Slave Master
  58. 58. © Hitachi, Ltd. 2014. All rights reserved. EADs2 EADs3 EADs4 EADs5 EADs1 処理補完 誰かが前回の承認内容を知っているので… 58 承認するサーバ達 A aaa A aaa 1.write A 知ってるよ! 教えて! Slave Slave Master
  59. 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. 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
  61. 61. © Hitachi, Ltd. 2014. All rights reserved. EADsは 一時的な障害でも一貫性保証 61
  62. 62. © Hitachi, Ltd. 2014. All rights reserved. 過半数承認なので動けるクラスタは1つ EADs2 EADs3 EADs4 EADs5 EADs1 スプリットブレインのときは 62 処理できない クラスタ 3/5 2/5 処理できる クラスタ
  63. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  75. 75. © Hitachi, Ltd. 2014. All rights reserved. EADsは スプリットブレインでも一貫性保証 75
  76. 76. © Hitachi, Ltd. 2014. All rights reserved. 日立のこだわりは 一貫性 一貫性にこだわることによって 社会インフラを支えています 76
  77. 77. © Hitachi, Ltd. 2014. All rights reserved. 77
  78. 78. © Hitachi, Ltd. 2014. All rights reserved. 付録
  79. 79. © Hitachi, Ltd. 2014. All rights reserved. 順序を守らない一貫性保証 一貫性が崩れたら修正する|結果整合性 Ex.ゴシッププロトコル・リードリペア 79 おれと一緒? 違う! 一緒! A ccc A ccc A aaa
  80. 80. © Hitachi, Ltd. 2014. All rights reserved. 順序を守らない一貫性保証 一貫性が崩れたら修正する|結果整合性 Ex.ゴシッププロトコル・リードリペア 80 修正してやる! repair A ccc A ccc A aaa
  81. 81. © Hitachi, Ltd. 2014. All rights reserved. 順序を守らない一貫性保証 一貫性は保てるけど処理順序が狂うと 古いデータが復活することがある 81 古いデータに 修正してやる! repair A old A new A new repair
  82. 82. © Hitachi, Ltd. 2014. All rights reserved. 可用性が低い一貫性保証 一貫性を崩さない Ex.2PhaseCommit 82 やっちゃうぜ? いいよー いいよー
  83. 83. © Hitachi, Ltd. 2014. All rights reserved. 可用性が低い一貫性保証 一貫性を崩さない Ex.2PhaseCommit 83 write write write A aaa A aaa A aaa
  84. 84. © Hitachi, Ltd. 2014. All rights reserved. 可用性が低い一貫性保証 全員が承認してくれるまで処理が進まない 84 ・・・ (承認してくれない) ・・・ いいよー

×