$30 off During Our Annual Pro Sale. View Details »

20190701_What_is_CockroachDB

 20190701_What_is_CockroachDB

kota2and3kan

July 01, 2019
Tweet

More Decks by kota2and3kan

Other Decks in Technology

Transcript

  1. What is CockroachDB?

  2. Who am I. • Name: Takanori Yokoyama (@kota2and3kan) • Job:

    Technical Support of OSS • Like: PostgreSQL, CockroachDB • Dislike: Real Cockroach
  3. ※注意※ 本資料では、説明を簡略化するために一部詳細を省略/抽象化し て表現している箇所がありますので、予めご了承下さい。

  4. 目次 • はじめに • 概要 • 仕組み • Demo (時間があれば)

    • まとめ
  5. • はじめに • 概要 • 仕組み • Demo (時間があれば) •

    まとめ 目次
  6. CockroachDB

  7. ロゴ

  8. https://landscape.cncf.io/

  9. このへん https://landscape.cncf.io/

  10. • はじめに • 概要 • 仕組み • Demo (時間があれば) •

    まとめ 目次
  11. CockroachDB 概要 • 分散 SQL データベース。 • いわゆる NewSQL (RDB

    と NoSQL のいいとこ取り)。 • 元 Googler の 3人が設立した Cockroach Labs が開発。 • Spanner と F1 にインスパイアされている。 • CAP 定理の C と P を満たしている。 • コンセンサスアルゴリズムには Raft を使用。 • OLTP (Online Transaction Processing) 向き。 • OLAP (Online Analytical Processing) には向いてない。
  12. What is CockroachDB? (公式の FAQ から抜粋) • CockroachDB is a

    distributed SQL database built on a transactional and strongly-consistent key-value store. It scales horizontally; survives disk, machine, rack, and even datacenter failures with minimal latency disruption and no manual intervention; supports strongly-consistent ACID transactions; and provides a familiar SQL API for structuring, manipulating, and querying data. https://www.cockroachlabs.com/docs/stable/frequently-asked-questions.html#what-is-cockroachdb
  13. ほんとにそんな夢の様な DB があるのか???

  14. 目次 • はじめに • 概要 • 仕組み • Demo (時間があれば)

    • まとめ
  15. クラスタの雰囲気

  16. 3匹構成の場合

  17. 4匹構成の場合

  18. 5匹構成の場合

  19. 6匹構成の場合

  20. 7匹構成の場合

  21. 8匹構成の場合

  22. And more !

  23. 全てのノードで Read / Write のクエリを処理可能 Read / Write

  24. 全てのノードで Read / Write のクエリを処理可能 Load Balancer Service (k8s) etc...

    Read / Write
  25. 全てのノードで Read / Write のクエリを処理可能 Load Balancer Service (k8s) etc...

    Read / Write
  26. 格納されるデータの雰囲気

  27. Table と Key-Value id c1 c2 c3 1 foo bar

    baz 2 hoge fuga piyo 3 (・ω・´) (´・ω・`) m9(^Д^) key value /test/primary/1 Ø /test/primary/1/c1 foo /test/primary/1/c2 bar /test/primary/1/c3 baz /test/primary/2 Ø /test/primary/2/c1 hoge /test/primary/2/c2 fuga /test/primary/2/c3 piyo /test/primary/3 Ø /test/primary/3/c1 (・ω・´) /test/primary/3/c2 (´・ω・`) /test/primary/3/c3 m9(^Д^) test ・Key-Value 形式 ・Key で Sort ※ id -> Primary Key
  28. Key-Value と Keyspace key value /test/primary/1 Ø /test/primary/1/c1 foo /test/primary/1/c2

    bar /test/primary/1/c3 baz /test/primary/2 Ø /test/primary/2/c1 hoge /test/primary/2/c2 fuga /test/primary/2/c3 piyo /test/primary/3 Ø /test/primary/3/c1 (・ω・´) /test/primary/3/c2 (´・ω・`) /test/primary/3/c3 m9(^Д^) Keyspace test Monolithic & Sorted by key tbl1 tbl2
  29. Keyspace と Range Range1 Range2 Range3 ・ ・ ・ Range

    N 64MB 64MB 64MB Keyspace ・いい感じに分割 ・デフォルト 64MB
  30. Range と Node Range1 Range2 Range3 ・いい感じに分散

  31. Range と Node Range2 Range1 Range3 Range1 Range2 Range3

  32. Range と Node Range2 Range1 Range3 Node 障害 = データ消失

  33. Range と Replica Range2 Range1 Range3 • Range を複製 (Replica)

    • デフォルト 3つ • Replica をいい感じ分散 Range1 Range1 Range2 Range2 Range3 Range3
  34. Range と Replica Range2 Range1 Range3 適当に Read / Write

    = データ不整合 Range1 Range1 Range2 Range2 Range3 Range3
  35. Replica と Leaseholder Range1 Range2 Range3 Range1 Range2 Range3 Range1

    Range2 Range3 lease lease lease • Replica の 1つが lease を持つ • lease を持つ Range を Leaseholder と呼ぶ • Read / Write は全て Leaseholder で処理
  36. 5匹の場合 Range1 Range2 Range3 Range1 Range2 Range3 Range1 Range2 Range3

    lease lease lease
  37. 7匹の場合 Range1 Range2 Range3 Range1 Range2 Range3 Range1 Range2 Range3

    lease lease lease
  38. 障害発生時の雰囲気

  39. 正常時 (5匹) Range1 Range2 Range3 Range1 Range2 Range3 Range1 Range2

    Range3 lease lease lease
  40. 障害発生 Range1 Range2 Range3 Range1 Range2 Range3 Range1 Range2 Range3

    lease lease lease ~
  41. 4匹に減少 Range1 Range2 Range3 Range1 Range1 Range2 Range3 lease lease

    • 一時的に Range2 と Range3 の Replica が2つに なる • Range2 の Leaseholder が 存在しなくなる
  42. 4匹に減少 Range1 Range2 Range3 Range1 Range2 Range3 Range1 Range2 Range3

    lease lease lease • Replica は常に 3 つ保持する • Range2 の Replica の中から 新しい Leaseholder を決 める
  43. 5匹に復旧 Range1 Range2 Range3 Range1 Range2 Range3 Range1 Range2 Range3

    lease lease lease
  44. 5匹に復旧 Range1 Range2 Range3 Range1 Range2 Range3 Range1 Range2 Range3

    lease lease lease Range1 Range2 • 復旧後 Range (Replica) は自動 でいい感じに分散 される • スケールアウトし た時も同じ様に自 動でいい感じに分 散される
  45. Read / Write の雰囲気

  46. 全てのノードで Read / Write のクエリを処理可能 Load Balancer Service (k8s) etc...

    Read / Write [再掲]
  47. Gateway Node (クエリを受け取った Node ) の動作 Range1 Range2 Range3 lease

    • Gateway Node 内に Leaseholder が有る ◦ 自分で処理 • Gateway Node 内に Leaseholder が無い ◦ Leaseholder を持つ Node にク エリをルーティング
  48. Read Query その1 lease lease lease Read 1. Gateway Node

    内に Leaseholder が有る場合
  49. 2. そのまま Client にレスポンスを返 す Read Query その1 Read lease

    lease lease
  50. Read Read Query その2 lease lease lease 1. Gateway Node

    内に Leaseholder が無い場合
  51. Read Read Query その2 lease lease lease 2. Leaseholder を持つ

    Node にクエ リをルーティング
  52. Read Read Query その2 lease lease lease 3. Leasehoder を持つ

    Node から Gateway Node が結果を受け取る
  53. Read Read Query その2 lease lease lease 4. Gateway Node

    から Client にレス ポンスを返す
  54. Write Query その1 Write lease lease lease 1. Gateway Node

    内に Leaseholder が有る場合
  55. Write Query その1 Write lease lease lease 2. 各 Replica

    に更新内容を複製
  56. Write Query その1 Write lease lease lease 3. Replica への複製完了後

    Client に レスポンス (COMMIT 完了) を返 す
  57. Write Write Query その2 lease lease lease 1. Gateway Node

    内に Leaseholder が無い場合
  58. Write Write Query その2 lease lease lease 2. Leaseholder を持つ

    Node にクエ リをルーティング
  59. Write Write Query その2 lease lease lease 3. Leaseholder を持つ

    Node から各 Replica に更新内容を複製
  60. Write Write Query その2 lease lease lease 4. Replica への複製完了後

    Leasehoder を持つ Node からの 通知を Gateway Node が受け取 る
  61. Write Write Query その2 lease lease lease 5. Gateway Node

    から Client にレス ポンス (COMMIT 完了) を返す
  62. Node の中の雰囲気

  63. Storage Layer Replication Layer Distribution Layer Transaction Layer SQL Layer

    Node の中 • 5つの Layer がある ◦ SQL ◦ Transaction ◦ Distribution ◦ Replication ◦ Storage
  64. Storage Layer Replication Layer Distribution Layer Transaction Layer SQL Layer

    Node の中 • 基本的に上から順番 に処理される
  65. Storage Layer Replication Layer Distribution Layer Transaction Layer SQL Layer

    SQL Layer • SQL 文を Key-Value 形式に変 換。
  66. Storage Layer Replication Layer Distribution Layer Transaction Layer SQL Layer

    Transaction Layer • Transaction や MVCC 関連の 処理を実施。
  67. Storage Layer Replication Layer Distribution Layer Transaction Layer SQL Layer

    Distribution Layer • 処理対象の Range (Leaseholder) がどの Node に 存在するのかを特定。 • 処理対象の Range (Leaseholder) が存在する Node の Replication Layer に クエリをルーティングする。 • 基本的にここまでは Gateway Node での処理。
  68. Storage Layer Replication Layer Distribution Layer Transaction Layer SQL Layer

    Replication Layer • Gateway Node の Distribution Layer からリクエストを受け取 る。 • Raft を利用してデータを各 Replica に複製。
  69. Storage Layer Replication Layer Distribution Layer Transaction Layer SQL Layer

    Storage Layer • Replication Layer から受け取っ たデータを RocksDB に格納。
  70. 目次 • はじめに • 概要 • 仕組み • Demo (時間があれば)

    • まとめ
  71. Demo

  72. 目次 • はじめに • 概要 • 仕組み • Demo (時間があれば)

    • まとめ
  73. What is CockroachDB? (公式の FAQ から抜粋) • CockroachDB is a

    distributed SQL database built on a transactional and strongly-consistent key-value store. It scales horizontally; survives disk, machine, rack, and even datacenter failures with minimal latency disruption and no manual intervention; supports strongly-consistent ACID transactions; and provides a familiar SQL API for structuring, manipulating, and querying data. https://www.cockroachlabs.com/docs/stable/frequently-asked-questions.html#what-is-cockroachdb [再掲]
  74. • 水平スケールできそう。 • 耐障害性も高そう (ただし、構成に依存)。 • SQL & Transaction をサポートしてる。

    • いい感じの Web UI がある。 • 名前がやばい。 • ロゴもやばい。 ※個人の感想です。 まとめ
  75. Thank you!