【#CNDT2019 登壇記録】Cloud Native Stoageが拓くDatabase on Kubernetesの未来

# 登壇資料
[CloudNativeDays Tokyo 2019](https://cloudnativedays.jp/cndt2019/)で私が発表した資料は、SpeackeDeckにあげています。
普段のLTより少し硬いイメージの発表資料に仕上げてみました（途中おふざけはありますが）。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">本日の1B3、「Cloud Native Storageが開くDatabase on Kubernetesの未来」の登壇資料です。 <a href="https://twitter.com/hashtag/cndt2019?src=hash&amp;ref_src=twsrc%5Etfw">#cndt2019</a> <a href="https://twitter.com/hashtag/RoomB?src=hash&amp;ref_src=twsrc%5Etfw">#RoomB</a><a href="https://t.co/ygm96pLK1j">https://t.co/ygm96pLK1j</a></p>&mdash; こば（右） (@tzkb) <a href="https://twitter.com/tzkb/status/1153191612886876160?ref_src=twsrc%5Etfw">July 22, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# 当日の様子
7/22（月）の15時40分から40分間、RoomBで発表を行いました。
同じ時間帯にMySQL Operatorのセッションがあったり、注目のKnativeの話もあったりと裏番組が強力で、集客の自信は全くなかったのですが、多くの方にお越し頂きました。
本当にありがとうございました。

（会場の様子）
![IMG_0504.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54853/1abf8578-3bba-0506-b942-6b6c3795de9d.jpeg)
※来ているオレンジのTシャツはPGConf.Asia 2018で登壇者向けに頂いたものです。ポスグレ勢の立場表明のつもりで着用しました。

当日は、

- イントロダクション(Cloud Nativeなデータベース/ストレージ）で8分
- K8sでデータベースを動かす際の課題で10分
- DB on K8sの実装例紹介で15分
- DBプラットフォームとしてのK8sで7分

と時間配分をしていましたが、実装例で一部飛んでしまった部分があったのか、最後は時間が少し余りました。その分、最終章に思いを込められたかなとは思います。

## セッションに関する感想
いくつか感想のツイートを見つけることも出来ました。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">DBクラスタリングの基本説明が参考になる。<br>・HA　～ROOK<br>・Replication　～STOLON<br>・Sharding　～KubeDB<br>そこから対応するOSSにつなげる<br> <a href="https://twitter.com/hashtag/CNDT2019?src=hash&amp;ref_src=twsrc%5Etfw">#CNDT2019</a> <a href="https://twitter.com/hashtag/RoomB?src=hash&amp;ref_src=twsrc%5Etfw">#RoomB</a></p>&mdash; rjegg (@rjtamago) <a href="https://twitter.com/rjtamago/status/1153198518430912514?ref_src=twsrc%5Etfw">July 22, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
Kubernetesガチ勢の中で古参のDBエンジニアとしての色を出すために、DBクラスタリングの説明にも時間を割きましたが、思いが伝わっていれば大変嬉しいです。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">KubeDBなどのoperatorでDBAタスクを自動化する流れが生まれてきてる<a href="https://twitter.com/hashtag/CNDT2019?src=hash&amp;ref_src=twsrc%5Etfw">#CNDT2019</a> <a href="https://twitter.com/hashtag/RoomB?src=hash&amp;ref_src=twsrc%5Etfw">#RoomB</a></p>&mdash; 星河 (@seiga_hayashi) <a href="https://twitter.com/seiga_hayashi/status/1153201840076386304?ref_src=twsrc%5Etfw">July 22, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
Operatorにつながる流れについてもコメント頂き、こちらも感謝です。

## セッション後の質問と私なりの回答
数人の方とはセッション後に直接お話して、議論を交わすことが出来ました。
備忘録のために自身で呟いたものを紹介しておきます。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">セッション後に受けた質問①<br>「RDSなどもある中でDB on K8sは流行るか？」<br>答え：まずオンプレで、managedに近いユーザビリティを実現するという方向性はある。更にポータビリティも考えると、K8sがDBプラットフォームになる事にそれ程違和感はないと思う。<a href="https://twitter.com/hashtag/CNDT2019?src=hash&amp;ref_src=twsrc%5Etfw">#CNDT2019</a></p>&mdash; こば（右） (@tzkb) <a href="https://twitter.com/tzkb/status/1153302386695217152?ref_src=twsrc%5Etfw">July 22, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

これはDB on K8sと聞いて多くの方が抱く疑問ではないかと思います。**RDSやAuroraなどManagedなサービスがあるんだから、それを使えば良いのでは？**ということですね。

こうした質問への私の回答は一貫していて、
>「その通りです。RDSもAuroraもサービス提供を強力に手助けしてくれる強力なプラットフォームです。どんどん使っていきましょう。」

ということです。ただ、一エンジニアとしての思いは別にあるのでそれは後ほど。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">セッション後に受けた質問③<br>「スケールしたいようなDBならRook+postgres、そうでない小規模ならDRBD+postgresで良いということか？」 <a href="https://twitter.com/hashtag/CNDT2019?src=hash&amp;ref_src=twsrc%5Etfw">#CNDT2019</a></p>&mdash; こば（右） (@tzkb) <a href="https://twitter.com/tzkb/status/1153305137898639361?ref_src=twsrc%5Etfw">July 22, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
Cloud Native StorageとDBを組み合わせるという考えを、深く理解して頂いた上でのご質問でした。

私の回答としては後に書く経緯でも触れるのですが、マイクロサービスにおける共有DBアンチパターンを意識しています。

>「機能や顧客単位などで分割されたマイクロサービスではバックエンドに巨大なデータベースは不要となり、分割されたサービス毎のDBが沢山生まれてくる。その際にはPostgreSQL+DRBDの構成もシンプルさと効率の良さから採用される可能性が出てくる。」

と、お答えしています。

# 話しきれなかったこと
DB on K8sの現在と未来（予想）について私なりの考えを述べることができた一方で、このテーマで登壇した背景・思いなどに触れる時間はありませんでした。CNDTでの発表は私の中でも大きな区切りになるものですので、一度それらを整理しておきたいと思います。

## なぜDatabase on Kubernetesの話をし続けるのか
どなたかがセッションで仰っていたと思うのですが、こんな意見がありました。

> 新技術探求のモチベーションは日常業務への飽き、退屈から来ている。

これには私も深く頷いてしまいました。
既存ビジネスを守ることが優先となり、インフラエンジニアがチャレンジできる機会はそう多くはありません。データベースともなれば、安定性が最優先でリスクは犯せないのは当然のことです。

ただ、現在当たり前に使われている下記構成も安定運用に至るまでに沢山のチャレンジが繰り返されてきました。

- 仮想マシン上のデータベース
- パブリッククラウド上のマネージドなデータベース・サービス

過去には（といっても20年程度前ですが）、**「データベースOSはUNIX、ストレージもファイルシステムフォーマットはせずにRAWデバイスで。」**という時代があったのです。その頃からインフラ技術の変遷を見てきている人間としては、Kubernetesまたはその次に来るオーケストレーター・ツールでDBを管理することが普及したとしても驚きはしません。

<font color="red">Linux-HAやVM上でのレプリケーション、Managedなサービスなど、現状の選択肢から一歩踏み出すことがDBエンジニアとしての成長に必要ではないかと考え続けています。</font>

## 今回の発表内容になった経緯
まず、セッションタイトルはCFP出した時から変更していません。
しかし、当初考えていたのは

- PGConf.Asiaで試した**PostgreSQL+Rook/Ceph**は性能悪かったので、**DRBD**を試そう。
- DBはこれからOperetor管理になる、**KubeDB**を試そう。
- 他にもNetApp TridentやStorageOSなんかも気になるな。

というぐらいで、Kubernetes Nativeなストレージとデータベースを色々紹介しようと思っていました。ですが、スライドの流れを考えていく中で2つの転機がありました。

### マイクロサービスにおける共有DBアンチパターン
一つは以下でツイートしたように、マイクロサービスにおけるデータベースの在り方について考えたことです。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">&gt;・マイクロサービスの共有DBアンチパターンと絡める<br>こちらは <a href="https://twitter.com/songmu?ref_src=twsrc%5Etfw">@songmu</a> さんのブログが大きな示唆を与えてくれました。ただ私の実力では、この分野を語り尽くすことが出来ませんでした。いつか再チャレンジしたいところです。<a href="https://t.co/wL5Xv6HjvB">https://t.co/wL5Xv6HjvB</a></p>&mdash; こば（右） (@tzkb) <a href="https://twitter.com/tzkb/status/1151505617640574976?ref_src=twsrc%5Etfw">July 17, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

Cloud Nativeという文脈ではデータベースは簡単にプロビジョニングできて、かつスケールも容易でないとダメなように思われます。ただ、マイクロサービスの観点でサービスが分割されていくとその後ろにあるデータベースも単一で巨大なものにするのか、サービスと同じ単位で分割するのかということを考える必要があります。

songmuさんやブログ内で紹介された書籍は後者の分割されたDBを支持しており、その構成を前提とすれば、K8sによる宣言的設定やプロビジョニングの容易性などをデータベース管理にも持ち込むことが出来るのではないかと考えました。

残念ながら勉強不足で、この分野での言及はCNDTのセッションでは出来ませんでした。しかし、別途調査を進めている**DBRE（Database Reliability Engineering）と繋がる可能性をもつ、重要な方向性になる**と思っています。

今後、どこかで考えをまとめて発表したいと思います。

### 分散システム上のデータベースについて
これは下記でツイートしたように、ZooKeeperの本をたまたま読んでいて、**フェンシング**の概念を説明する箇所を見つけて閃きました。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">&gt;・分散システム上のDBアーキテクチャに絡める<br>こちらはこの本を読んだ事がきっかけでした。分散システムにおけるフェンシングの意義に触れられています。K8sとHAが繋がった瞬間でした。<a href="https://t.co/3ZBqPQeUIT">https://t.co/3ZBqPQeUIT</a></p>&mdash; こば（右） (@tzkb) <a href="https://twitter.com/tzkb/status/1151507391344570370?ref_src=twsrc%5Etfw">July 17, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

DB on K8sが難しいと思われる理由って何なんだろう？という疑問に対して、出来る限り背景を示して答えたいと考え、そのヒントを分散システムに関する議論からもらったという感じでしょうか。

今ならこちらでしょうね。発表数日前に出版された新しい本ですが、内容的には直球ど真ん中です。これから頑張って読みます。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">おぅ、これ来週の発表にぶっ刺さってるヤツだった。読みたいけどマサカリっぽくて怖い。。何故Kindle版ないのー。<a href="https://t.co/46NphsukZq">https://t.co/46NphsukZq</a></p>&mdash; こば（右） (@tzkb) <a href="https://twitter.com/tzkb/status/1151766248335609856?ref_src=twsrc%5Etfw">July 18, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## 類似の発表について
タイミングについては偶然だと思うのですが、JPOUGでも類似の発表がありました。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">はてなブログに投稿しました <a href="https://twitter.com/hashtag/%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%96%E3%83%AD%E3%82%B0?src=hash&amp;ref_src=twsrc%5Etfw">#はてなブログ</a><br>“「Cloud-Native Relational Databases」と かけて「Oracle Database」と解く。その心は「……」” - JPOUG in 15 minutes…<a href="https://t.co/IN0ijRWdpz">https://t.co/IN0ijRWdpz</a></p>&mdash; Wataru Morohashi (@wmo6hash) <a href="https://twitter.com/wmo6hash/status/1156240539496304640?ref_src=twsrc%5Etfw">July 30, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

こちらは私が「Database on Kubernetesの未来」の兆候として示した**AWS Aurora、Azure Hyperscale**を、Oracleコミュニティとしての視点で分析して下さった発表だったようです。

私もAuroraとHyperscaleは非常に参考にしており、下記のブログなどを参考にさせて頂きました。

- [Auroraに関する@kumagiさんの解説記事](https://qiita.com/kumagi/items/67f9ac0fb4e6f70c056d)
- [Hyperscaleに関する@Masayuki_Ozawaさんの解説記事](https://blog.engineer-memo.com/2019/06/02/sql-database-hyperscale-%E3%81%AE%E6%A7%8B%E6%88%90%E3%82%84%E7%89%B9%E5%BE%B4%E3%82%92%E5%AD%A6%E7%BF%92%E3%81%99%E3%82%8B/)

どちらも日本語でこのような解説が読めることに感謝しきりです。

# まとめ
CFPの選考結果が発表されたのが4月頃だったでしょうか。
そこから2-3ヶ月かけて準備してきた登壇が一応の成功を収めたことに、まずはホッとしています。CNDTの運営の方々、そして関連コミュニティの方々には大変お世話になりました。

この活動がどこまで進むのか、まだ私にも分かっていないのですが、少なくとも下期に向けてPostgreSQLのコミュニティ向けに同様の内容をぶつけてみたいと思っています。

どこかで私をお見かけの際には気軽に話しかけて頂けると喜びます（表情には出ないかも知れません）。