Upgrade to Pro — share decks privately, control downloads, hide ads and more …

20190701_What_is_CockroachDB

 20190701_What_is_CockroachDB

kota2and3kan

July 01, 2019
Tweet

More Decks by kota2and3kan

Other Decks in Technology

Transcript

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

    Technical Support of OSS • Like: PostgreSQL, CockroachDB • Dislike: Real Cockroach
  2. CockroachDB 概要 • 分散 SQL データベース。 • いわゆる NewSQL (RDB

    と NoSQL のいいとこ取り)。 • 元 Googler の 3人が設立した Cockroach Labs が開発。 • Spanner と F1 にインスパイアされている。 • CAP 定理の C と P を満たしている。 • コンセンサスアルゴリズムには Raft を使用。 • OLTP (Online Transaction Processing) 向き。 • OLAP (Online Analytical Processing) には向いてない。
  3. 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
  4. 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
  5. 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
  6. Keyspace と Range Range1 Range2 Range3 ・ ・ ・ Range

    N 64MB 64MB 64MB Keyspace ・いい感じに分割 ・デフォルト 64MB
  7. Range と Replica Range2 Range1 Range3 • Range を複製 (Replica)

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

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

    Range2 Range3 lease lease lease • Replica の 1つが lease を持つ • lease を持つ Range を Leaseholder と呼ぶ • Read / Write は全て Leaseholder で処理
  10. 4匹に減少 Range1 Range2 Range3 Range1 Range1 Range2 Range3 lease lease

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

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

    lease lease lease Range1 Range2 • 復旧後 Range (Replica) は自動 でいい感じに分散 される • スケールアウトし た時も同じ様に自 動でいい感じに分 散される
  13. Gateway Node (クエリを受け取った Node ) の動作 Range1 Range2 Range3 lease

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

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

    から Client にレス ポンスを返す
  16. Write Query その1 Write lease lease lease 3. Replica への複製完了後

    Client に レスポンス (COMMIT 完了) を返 す
  17. Write Write Query その2 lease lease lease 3. Leaseholder を持つ

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

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

    から Client にレス ポンス (COMMIT 完了) を返す
  20. Storage Layer Replication Layer Distribution Layer Transaction Layer SQL Layer

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

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

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

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

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

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

    Storage Layer • Replication Layer から受け取っ たデータを RocksDB に格納。
  27. 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 [再掲]
  28. • 水平スケールできそう。 • 耐障害性も高そう (ただし、構成に依存)。 • SQL & Transaction をサポートしてる。

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