スピーカー 3
っていうのはいいですね僕の会社 はecサイトで
基本的にはマルチテナントでやってる のでいろんなマーチェントさん
が乗ってくれてるって感じでショップ ごとのシャーディングパーティション
っていうのは割と必須というか それを使ってる感じになるんですけ
れども
うん
マサイさんの前職とかどんな 感じでしたマルチテナント違う
か
スピーカー 2
いやシングルテナントでやって たんでパーティション自体は僕は
経験したことがなくて今回はやっぱり だからこそそんなにイメージが湧き出なかった
っていうところはあるんですけ れども確かに実際自分も運用者側なんで
そのパーティションキーをどうやって 分割するかみたいなところもそんな
に具体的にイメージが湧かない ところがあるんでやっぱりちょっと
開発者目線というかバックエンド とかの開発者目線で実際にテーブル
設計とかしてみてっていうところ を行ったり来たりしないとこういう
ところってうまくやっていけない のかなっていう感じは少ししました
スピーカー 3
ね
そうですよねいきなりシングルテナント とか経験したことがなくていきなり
必要に応じてパーティションしろ って言われたときにもともと開発者
でずっと経験済んでると多分 裏側の将来的なインフラのスケーラビリティ
の話とかあとどのインデックス を作ったときにどんな制限がある
かみたいなのが最初は見えなくて 逆に運用者から入るとどんなスキーマ
設計にしたほうがサービスの成長 に伴って行動側の変化を変更しやすい
のかみたいなクラス設計みたいな 観点が抜けちゃうのでなんかどっち
の観点もどこかのタイミングで 身につける必要があって開発者
だったらこういうふうにddiみたい に読んでイメージするし運用者
だったら開発者とコラボレーション しながらどっちの意見も吸い上げる
必要があってそういう意味では お互いの観点をブリッジしてくれる
本当にいい章だなと最初に読んだ ときに思ったんですよね
スピーカー 1
本当そうですね
スピーカー 2
モニタリングとかもすごい大事 だなっていうのはここで読んで
て思ったんですけどやっぱりこの パーティショニングするにあたって
実際にそのパーティショニング した後にどこに負荷がたくさん
来ているかっていうのが分からない と新しくうまく理屈をさばけない
と思うのでその辺も運用者側として も結構やれることが多いかなと
思います
スピーカー 3
そうですねなんか今日とか例えば ぜひ収録の方でも話してみたい
のが割とパーティションを切るって 言ってもパーティションの切り方
っていろいろあると普通に適当 なハッシュ関数でも使ってパーティション
スピーカー 3
しましたっていうのでは全然実 運用に耐えられなくて話の中でも
本の中でもまず出てきたのがあと ホット
スキューというかサラブレティ 問題有名人問題みたいな感じで
普通に適当なハッシュ関数をして ハッシュしてしまったときに歪み
が生じてしまうっていうのがパーティション あるある問題ですよね例えば
そのツイッターみたいなイメージ だとレディーガガーのユーザー
アカウントに割り当てられたフォロワー フォローイー数のパーティション
は数百ギガになってしまうみたいな 感じででも他の普通の僕らの
一般ユーザーのアカウントは数 数メガバイトぐらいで何かこう
歪みが生じてしまうみたいなそんな ホットパーティションをどう対応
するかみたいな話があってそこに 対して多分ddi絵本が書かれた後
からもいろんな現場でのあとは 研究の発展みたいなのもあったん
ですけどそこら辺についてもちょっと 触れていきたいなと思うんです
がどうしよう最初にcosmos dbとか の
デビュースケースというか仕組み とかだと階層パーティションキー
みたいなのがあったり他の僕が 事前に調べたアリババのケース
とかもいくつかちょっと触れたい なと思うんですけどどうしよう
なんか簡単にcosmos dbについて 棚下さんのほうからちょっと紹介
してもらうことって可能ですか
スピーカー 1
了解ですcosmos dbは物理テーブル 違う物理
スピーカー 3
物理パーティション
スピーカー 1
物理パーティションそうですね 物理パーティションと論理パーティション
に分かれていて論理パーティション はパーティションキーごとに分かれて
いるんですけれどもどうしても 小さいのと大きいのが出てくる
のでそれをどうグループ化する かっていうのは基本的には内部
実装に任されているつまり一つの ものが大きくなったら自動的に
テナント分けをしてくれるっていう そういう意味で非常に使いやすい
と思うんですけれども
でも物理パーティションごとに 結局はリソースユニットみたいな
のが設定されていてこれが実際 何ていうか計算式が公開されている
わけじゃないんですけれどもクエリ をテストで投げるとこのデータ
量でこのクエリだとどれだけ使 えましたっていうのが出てきて
それによって費用が決まってくるん ですけれどもそれの限界というのが
パーティションごとに決められている のでやっぱり有名人問題という
のは結構非常に難しいというところ ですねそれを解決するために提案
されたのが階層パーティション キーっていうのでこれ非常に新しい
スピーカー 1
もので発表されたのが今年のマイクロソフト のビルドとかだったと思うので
今年の春ぐらいですね5月6月ぐらい からジェネラリーアベルトで
誰でも使えるようになったんです けれどもそれをすると3つぐらい
のキーを設定してその上位キー 中位キー下位キーそのどれでも
検索したらその必要なところ だけ見るつまり全部のパーティション
をなめる必要がないという意味 でテナントだけでなくてあと2つ
ぐらいのパーティションを開発 者が選考できるようになってきている
ので設計次第ではパフォーマンス が上がるだろうなという感じで
考えています
スピーカー 3
なるほどこれは結構新しい機能 なんですね
そうなんですそうなんです
これを要望してくるユーザーが 多かったんでしょうねなんか
臨読会のすごい良かったところ 他に元マイクロソフトの中の方
も参加者がいてなんかコスモス dbの話になったときに昔自分の
チームではこんなことしました みたいなそこのやり取りが発生
したのも面白かったですけど なんか
コスモスdbを聞いてて面白いのは 僕はちょっと使ったことないん
ですけどなんかそのクラウドベンダー というかこれ作る側としてはどこ
までユーザーにこうパブリック インターフェースとして渡すか
っていうのが結構ポイントでなんか その要求ユニットruってのをスタッツ
として渡すことによってある程度 見える化させつつでも物理パーティション
とかの設定とかはもちろん隠して カプセル化してそこら辺のどこ
までこうインターフェースとして 出せるかどうかっていうのを考え
ましてどこまでこうチューナブル な設定にするかみたいなのはクラウド
ベンダーとしても開発者として も気になるポイントだと思います
けどそこら辺は実際運用されて てどうですかねこうやってその
階層パーティションキーみたい に新しい機能も定期的に出して
くれてて不満はないって感じですか ね
スピーカー 1
そうですねやっぱりawsとazure両方 使ってはいるんですけれども私たち
の会社はどちらかというとazure が多くて
そうですね
azureは多分思想としてあんまり 深掘りはさせないというか一番
そのスイッチを少なくしてその 少ないスイッチの中で簡単に使える
というのが非常にやりやすくて 新しい機能を使うときとかもその
知識がすごくなくてもマネージド サービスでなんとかなるという
ものが結構多いのが気に入っている ところでcosmos dbも私も学び始めて
まだ1,2年になってきてそういう のが結構多いんですけれども
スピーカー 3
結構不満なく使えているなという 感じですね
ソフトウェアのデザインとして はそれが理想ですよねなんかノブ
が多いと困っちゃうので開発者 はできるだけ設定できるものは
少なくしていい感じにしてくれる というのが理想ではありつつも
スピーカー 2
クエリが発行されたりっていうことは
どのくらいあるんですか
スピーカー 3
アプリケーションによるとは思うんですけれども
スピーカー 1
それはやっぱり常にありますね
なので
実際に使う必要があるんですよね
そういう場合は
エクスタンスというか
アプリケーションによって
何かいろんな
データを取得しないといけない
とか
そういうのをかなり工夫していかないといけないな
スピーカー 3
という感じです
どういったパーティションを使ったというのは
ビジネスドメインとかも
結構関わってくると思うんですよね
ECサイトを作るのか
IoTのログデバイスの
デバイスのログを作るのかみたいな感じで
僕も今回の林読家夜景に一つ
最初に
最新のユースケースないかなと思 って見てたんですけど
アリババECサイトですね中国の アリババが面白い論文を2020年に
出しててこれをちょっと簡単に 紹介させてもらいたいんですけど
アリババはマルチテナントでサービス を作っていて要するにいろんな
ECサイトがマルチテナントで動 いてるんですけどもちろん人気
のECサイトと人気じゃないECサイト でスキューが歪みが出てしまう
となのでうまくパーティション していくっていう必要もあるん
ですけど全てのECサイトのワーク ロードを見つつ手動で一個一個
割り当てていくっていうのはもう 限界があるのでいい感じに自動化
したいみたいなのがあったんですね ここら辺は僕らもちょっと普段
悩んでるところではあるんですけど アリババが提唱してたのがダイナミック
セカンダリーハッシングっていう 仕組み
あったんですけどアリババが提唱 してたのがダイナミックセカンダリーハッシングっていう仕組み
スピーカー 3
あってこれがちょっと面白かったん ですけど発想としてはすごい
シンプルでまず普通のハッシング がありますと普通のハッシング
は一回だけハッシングをして同じ キーは同じパーティションにしか
割り当てられないそれだと有名人 問題みたいなすごい大きいデータ
サイズが一つのサイズノードに 割り当てられてパンクしちゃう
のでその後ダブルハッシングみたいな 仕組みとかも多分回想パーティション
と発想は似てるんですけど二回 ハッシングする
もしくは三回二回三回ハッシング することで大きいものは分ける
みたいな発想があるんですけど ダブルハッシングの問題はすべて
のキーを二回ハッシングしちゃう ので例えば他の有名人じゃない
ような人気じゃないecサイトとか 人気じゃないそのユーザーアカウント
も無駄に二回ハッシングしてしまう ので彼らの普段のワークロード
に対してオーバーヘッドが追加 で発生してしまうんですよねだから
その人気ecサイトのデータをパーティション するっていうものに関しては
前進したんですけど逆にその他の 普通のノーマルのワークロード
に対して更新してしまうということで 発想としてはシンプルで一回の
スピーカー 3
ハッシングでいいやつはもう一回 だけハッシングして有名人とか
人気ecサイトみたいな二回三回ハッシング しなきゃいけないようなやつには
自動でそれを二回ハッシングする けどその人気ecサイトのデータを
パーティションするっていうもの に関してはもう一回だけハッシング
するっていうのがダイナミック セカンダリハッシングということで
発想としてはシンプルなんですけど それをアリババは実装したと
そのダイナミックかどうかの判断 にリアルタイムに入ってくるシステム
のログ例えばリクエストのレイテンシー とかパフォーマンスとかを使って
例えばこのサイトecサイト人気 だなじゃあこいつは二回ハッシング
しようみたいなことでハッシング するみたいな論文があったんで
これは面白い
と思いつつも全ての事業とメイン というか全てのサービスにその
まま適用できるシステムでもない なと思ってあとかつこれは多分
アリババの内製システムなんで 今後はもしかしたらこういうの
があるフレームワークもある かもしれないですけどフレームワーク
とかマネジドサービスにコンフィギュレーション 一つで実装されるようになって
くるともう一つまた業界として 進むのかなとか思ってたりはする
スピーカー 1
かなと思ってこれは面白い事例 でしたね
スマートですねやっぱりログ とか
インアウトの量とかでダイナミック にするっていうのは一番なんか
スピーカー 3
正しい方法のような気がします
ね
そうそうそこのそのスマートな 本当にスマートなファンクション
を実装できれば最高だと思うん ですけどなかなかそれも何かイテ
レーティブなプロセスだと思います が
パーティションキーはね永遠の 課題ということで
どうですか浅井さん他にもちょっと 触れてみたいディスカッショントピック
とかありますか
話せなかったのはないかな
スピーカー 2
まあ個人的にやっぱ面白いなと思 ったのはセカンダリインデックス
の扱いの難しさみたいなところ でまあそのキーをもとにパーティション
分けるのでそのキーがプライマリー キーとかユニックキーを使って
まあパーティションを分けると思 うんですけどその結果としてセカンダリ
インデックスが効かなくなる っていう問題が起きてまあパーティション
ことにインデックスが置かれる ローカルインデックスっていうやつ
があってそれだとインデックス を取りに行くのに各パーティション
にアクセスしなきゃいけないっていう オーバーヘッドがあるけれども
一方でグローバルインデックス っていうタームごとのインデックス
を使うことでその問題を解決できる みたいなそういった話もあって
インデックスを一つ取ってもパーティション することでまた変わってくるっていう
のがすごい面白かったですね
スピーカー 3
コスモスDBにもインデックスはあります か
スピーカー 1
あるんですねそれが一応インデックス も自動に生成するということになって
スピーカー 1
いてよくアクセスされるキーを 自動的にインデックスするということ
になっていて
ちょっとその
それがグローバルなのかローカル なのか探してみたんですけど
今のところ記述がちょっと見つから なかったので聞いている方でご
存知だったら教えてほしいんです けれどもでもそれプラスそれが
うまくいっていないと感じたときに 自分でこのキーについて作って
くださいっていう設定もできる ようになっているのでクエリは
結構早いなというので一応僕も なんかあんまりよく最初理解して
なかったんですけど
ノーsqlというのがsqlダメみたいな そういうふうに最初思っていて
使えないのかなと思っていたら 実はnot only sqlでsqlとさらにプラス
できるっていうのもが最初使う 前は誤解をしていてそういう意味
ではsqlでできることもドキュメント dbでもできるんですよっていう
のは最初から知っておけばもっと ハードル引き上げることができる
と思っています
スピーカー 3
分かる分かるノーsqlって言われる とねこれはこうrdbmsに対する宣誓
布告かなみたいな感じが思います けど意外と仲良くやってこうぜ
みたいな
スピーカー 1
そうですね
スピーカー 3
自動でやってくれるんですね でもクラウドベンダーとしてうまい
ですよね基本は自動でやるけどう まくいかなかったら逃げる道も
ありますよみたいな自分でできます よみたいな
何かないですかクラウドベンダー としてはうまいですよね基本は
自動でやるけどうまくいかなかったら 逃げる道もありますよみたいな自分で
スピーカー 2
できますよみたいな
実際にrdbmsでもクエリプランみたい なのがあってある程度の統計という
か最適化みたいなのをやってくれる みたいなのをさらにインデックス
スピーカー 1
までつけてくれるみたいな感じ なんですかね
そうだと思います
スピーカー 3
すごいですね
多分クエリの実行エンジンが 賢いんでしょうねそれってもし
覚えてたらでいいんですが例えば メトリックスでどこまで分かります
かインデックス使ってるかどうか も分からないってことですよね
多分クエリを投げたときに理想 性に
スピーカー 1
わかるru次第でしょうねおそらく 思ったよりruが多分まだ運用し始
めてすごくたくさんデータある わけじゃないのであれなんですけ
れどもやっぱりruはやっぱり全体 を見るクエリであると初期のとき
と1年後と2年後とやっぱり量が 変わりますよね
変わってくると思うのでこれは 結構定期的に同じクエリでどれぐらい
ru使うかみたいなのは見ていかない といけないんですけど結構これ
並べ替えっていうのをよくやって いて並べ替えで結構特定のキー
スピーカー 1
の小順高順で取得するみたいな それが結構頻発するんですけ
れどもテストデータで使っている 限りは結構その辺はうまくやって
くれるっていうか思ったよりru を消費していないようだったので
この辺はやっぱりインデックス が効いてるのかなと思いました
スピーカー 3
ね
なるほどじゃあruのカプセル化 っていうのも諸刃の剣ですねそこ
でそれをどこまでストーリーとして 読み込めるかみたいなのがなかなか
実際の運用知見っていうことになって くるんでしょうねそこがね
そう思いますね
ある日突然何か急にlightの
ワークロードがruがめちゃくちゃ 増えてみたいなサポートケース
を投げてみたら複数のパーティション にファンアウトしなきゃいけなく
スピーカー 1
なってみたいなそういうのとか 普通にありそう
ありますあるでしょうねなので 気をつけないといけないなと思
スピーカー 3
ってます
うまく動いてる分には最高っていう どのシステムもそうですけどね
これはcosmos dbあんまりazureの会社 で働いたことがなかったんで全然
ノーマークでしたけど面白いな と思って今後ウォッチしてみたい
なと思います
スピーカー 1
ぜひダイナモdbも対応やってるん ですけれどもダイナモdbはテスト
ケースだけで実運用をまだして いなくてただ同じソフトでセレクティブ
にダイナモでもcosmosでも使える みたいなそういうのを今目指して
開発をしているところです
スピーカー 3
おーそれは面白そう
僕の知識は古いですけどダイナモ だったら多分lsiローカルセカンダリー
インデックスとグローバルセカンダリー インデックスは自分たちで切んな
きゃいけなかった気がします
スピーカー 1
いいですねそれは設定しがいが ありますね
スピーカー 3
そうそうもう設計思想が違います ねcosmos dbという感じかな
ここら辺も結構僕も最初ダイナモ 触ったときにlsiとjsyがあるっていうのが
あったんですけどそれぞれ全然リミテーション も違うのでできることできない
ことも違ってなんで違うんだろう セカンダリーインデックスと同じ
名前だよなってずっと思ってたん ですけどその最初にこのddia本を
読んで答えが全部書いてあった ので目から鱗というか当時の自分
を助けてくれた章でもあったん ですけど思い出深い読み直しながら
それを思い返しましたね
スピーカー 1
やっぱり結構広範な知識っていう かね具体的な実装がわかるわけ
じゃないけれど
もう広範な知識が書かれている ので使ったことがないdbでもこういう
ところが得意なんだっていうの がそういうのがわかるという点