Slide 1

Slide 1 text

What is CockroachDB?

Slide 2

Slide 2 text

Who am I. ● Name: Takanori Yokoyama (@kota2and3kan) ● Job: Technical Support of OSS ● Like: PostgreSQL, CockroachDB ● Dislike: Real Cockroach

Slide 3

Slide 3 text

※注意※ 本資料では、説明を簡略化するために一部詳細を省略/抽象化し て表現している箇所がありますので、予めご了承下さい。

Slide 4

Slide 4 text

目次 ● はじめに ● 概要 ● 仕組み ● Demo (時間があれば) ● まとめ

Slide 5

Slide 5 text

● はじめに ● 概要 ● 仕組み ● Demo (時間があれば) ● まとめ 目次

Slide 6

Slide 6 text

CockroachDB

Slide 7

Slide 7 text

ロゴ

Slide 8

Slide 8 text

https://landscape.cncf.io/

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

● はじめに ● 概要 ● 仕組み ● Demo (時間があれば) ● まとめ 目次

Slide 11

Slide 11 text

CockroachDB 概要 ● 分散 SQL データベース。 ● いわゆる NewSQL (RDB と NoSQL のいいとこ取り)。 ● 元 Googler の 3人が設立した Cockroach Labs が開発。 ● Spanner と F1 にインスパイアされている。 ● CAP 定理の C と P を満たしている。 ● コンセンサスアルゴリズムには Raft を使用。 ● OLTP (Online Transaction Processing) 向き。 ● OLAP (Online Analytical Processing) には向いてない。

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

ほんとにそんな夢の様な DB があるのか???

Slide 14

Slide 14 text

目次 ● はじめに ● 概要 ● 仕組み ● Demo (時間があれば) ● まとめ

Slide 15

Slide 15 text

クラスタの雰囲気

Slide 16

Slide 16 text

3匹構成の場合

Slide 17

Slide 17 text

4匹構成の場合

Slide 18

Slide 18 text

5匹構成の場合

Slide 19

Slide 19 text

6匹構成の場合

Slide 20

Slide 20 text

7匹構成の場合

Slide 21

Slide 21 text

8匹構成の場合

Slide 22

Slide 22 text

And more !

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

格納されるデータの雰囲気

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

Range と Node Range1 Range2 Range3 ・いい感じに分散

Slide 31

Slide 31 text

Range と Node Range2 Range1 Range3 Range1 Range2 Range3

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

Range と Replica Range2 Range1 Range3 ● Range を複製 (Replica) ● デフォルト 3つ ● Replica をいい感じ分散 Range1 Range1 Range2 Range2 Range3 Range3

Slide 34

Slide 34 text

Range と Replica Range2 Range1 Range3 適当に Read / Write = データ不整合 Range1 Range1 Range2 Range2 Range3 Range3

Slide 35

Slide 35 text

Replica と Leaseholder Range1 Range2 Range3 Range1 Range2 Range3 Range1 Range2 Range3 lease lease lease ● Replica の 1つが lease を持つ ● lease を持つ Range を Leaseholder と呼ぶ ● Read / Write は全て Leaseholder で処理

Slide 36

Slide 36 text

5匹の場合 Range1 Range2 Range3 Range1 Range2 Range3 Range1 Range2 Range3 lease lease lease

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

障害発生時の雰囲気

Slide 39

Slide 39 text

正常時 (5匹) Range1 Range2 Range3 Range1 Range2 Range3 Range1 Range2 Range3 lease lease lease

Slide 40

Slide 40 text

障害発生 Range1 Range2 Range3 Range1 Range2 Range3 Range1 Range2 Range3 lease lease lease ~

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

4匹に減少 Range1 Range2 Range3 Range1 Range2 Range3 Range1 Range2 Range3 lease lease lease ● Replica は常に 3 つ保持する ● Range2 の Replica の中から 新しい Leaseholder を決 める

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

5匹に復旧 Range1 Range2 Range3 Range1 Range2 Range3 Range1 Range2 Range3 lease lease lease Range1 Range2 ● 復旧後 Range (Replica) は自動 でいい感じに分散 される ● スケールアウトし た時も同じ様に自 動でいい感じに分 散される

Slide 45

Slide 45 text

Read / Write の雰囲気

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

Gateway Node (クエリを受け取った Node ) の動作 Range1 Range2 Range3 lease ● Gateway Node 内に Leaseholder が有る ○ 自分で処理 ● Gateway Node 内に Leaseholder が無い ○ Leaseholder を持つ Node にク エリをルーティング

Slide 48

Slide 48 text

Read Query その1 lease lease lease Read 1. Gateway Node 内に Leaseholder が有る場合

Slide 49

Slide 49 text

2. そのまま Client にレスポンスを返 す Read Query その1 Read lease lease lease

Slide 50

Slide 50 text

Read Read Query その2 lease lease lease 1. Gateway Node 内に Leaseholder が無い場合

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

Read Read Query その2 lease lease lease 3. Leasehoder を持つ Node から Gateway Node が結果を受け取る

Slide 53

Slide 53 text

Read Read Query その2 lease lease lease 4. Gateway Node から Client にレス ポンスを返す

Slide 54

Slide 54 text

Write Query その1 Write lease lease lease 1. Gateway Node 内に Leaseholder が有る場合

Slide 55

Slide 55 text

Write Query その1 Write lease lease lease 2. 各 Replica に更新内容を複製

Slide 56

Slide 56 text

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

Slide 57

Slide 57 text

Write Write Query その2 lease lease lease 1. Gateway Node 内に Leaseholder が無い場合

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

Write Write Query その2 lease lease lease 3. Leaseholder を持つ Node から各 Replica に更新内容を複製

Slide 60

Slide 60 text

Write Write Query その2 lease lease lease 4. Replica への複製完了後 Leasehoder を持つ Node からの 通知を Gateway Node が受け取 る

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

Node の中の雰囲気

Slide 63

Slide 63 text

Storage Layer Replication Layer Distribution Layer Transaction Layer SQL Layer Node の中 ● 5つの Layer がある ○ SQL ○ Transaction ○ Distribution ○ Replication ○ Storage

Slide 64

Slide 64 text

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

Slide 65

Slide 65 text

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

Slide 66

Slide 66 text

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

Slide 67

Slide 67 text

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

Slide 68

Slide 68 text

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

Slide 69

Slide 69 text

Storage Layer Replication Layer Distribution Layer Transaction Layer SQL Layer Storage Layer ● Replication Layer から受け取っ たデータを RocksDB に格納。

Slide 70

Slide 70 text

目次 ● はじめに ● 概要 ● 仕組み ● Demo (時間があれば) ● まとめ

Slide 71

Slide 71 text

Demo

Slide 72

Slide 72 text

目次 ● はじめに ● 概要 ● 仕組み ● Demo (時間があれば) ● まとめ

Slide 73

Slide 73 text

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 [再掲]

Slide 74

Slide 74 text

● 水平スケールできそう。 ● 耐障害性も高そう (ただし、構成に依存)。 ● SQL & Transaction をサポートしてる。 ● いい感じの Web UI がある。 ● 名前がやばい。 ● ロゴもやばい。 ※個人の感想です。 まとめ

Slide 75

Slide 75 text

Thank you!