1. London Tech Talk
  2. DDIA Ch11: Stream Processing..
2023-12-16 54:17

DDIA Ch11: Stream Processing (Tomohisa)

spotify apple_podcasts

Summary

今回のエピソードでは、ストリーミングプロセッシングについての話が展開されています。ゲストのトモシタさんは、ストリーミングについて詳しくお話しし、イベントソーシングの重要性やメリットにも触れています。イベントソーシングとは、ユーザーのアクションによって発生したイベントをログとして保存し、そのログを再生することで現在のデータの状態を取得する仕組みです。この方式は、ストリーミング処理やデータベースの整合性などに応用され、ログ型のシステムとして特徴があります。先生は、イベントソーシングのデータの取り扱い方やデータ容量といったテーマについてお話しになります。また、アパッチカフカを使ったストリーミングパイプラインの導入機能にも触れられます。カフカはストリーム処理においてよく利用されるプラットフォームであり、カフカストリームを使用することでストリームの結合や変換が可能となります。また、カフカの設定はコンフィギュラブルであり、シンプルな要素を組み合わせることで複雑な処理を実現することができます。イベントソーシングに興味を持ち、すでに日本でも積極的に取り組まれているイベントソーシングについて話し合い、将来的に自身の会社でも取り入れたいと思いました。また、ロンドンテックトークのブッククラブに参加し、多くの参加者やそのメリットに感銘を受けました。

ストリーミングの基本
Speaker 3
Kenさん、今日もよろしくお願いします。
Speaker 2
はい、よろしくお願いします。
Speaker 3
今日はですね、DDIAの第11章、ストリーミングプロセッシングの引読会後の収録になります。
今日はゲストとしてトモシタさんをお呼びしています。トモシタさん、よろしくお願いします。
Speaker 1
はい、よろしくお願いします。
Speaker 3
トモシタさんをお呼びしたのはですね、トモシタさんがこのストリーミングにおいて、すごい専門家というか、かなり詳しい方なので、今回お呼びさせていただいてましてですね、
いろいろ話していただこうかなというふうに思っています。トモシタさんは今アメリカに住まれていると思いますけど、こちらの気候とかはどうですかね?今11月ですけど。
Speaker 1
そうですね、ロサンゼルスはやっぱり一番気候のいいところとして知られていて、結構真冬でも朝はちょっと涼しくて10度を切ることはありますけども、日中はもう一年中20度から25度を超える。
しかも、
夏があんまり暑くないっていう、非常に海辺の近くでいいところですね。
Speaker 2
めっちゃいいですね。
Speaker 1
今日も朝が15度ぐらいで、昼はもう25度を超えてくると思いますね。
Speaker 3
いや、いいな。
Speaker 2
最高だな。
Speaker 3
こっち、今ジネーブだと10度を超えないので、本当にうらやましいです。晴れる日も少ないですし。
Speaker 2
ダメダメ、ヨーロッパと比べちゃダメですよ。
ヨーロッパと比べちゃダメですって、もう。
Speaker 3
そうですよね。
Speaker 2
ここでロンドンワーとか、もう僕行っちゃ負けだと思ってるんで。
Speaker 3
そっかそっか、そうだ。ダメです。寝かけ足ダメですね。いいとこです。ジュニアウェブもいいとこです。
Speaker 1
ヨーロッパも行ってみたいなと思いますね。
Speaker 2
ぜひ夏に来てください。
Speaker 1
やっぱり夏が過ごしやすいですよね。
夏最高ですね。
Speaker 3
ちなみに週末とかはどういうことされてるんですか?
Speaker 1
そうですね。うち、子供がいるので。
なんか、子供がやりたいことをやるっていうのが多いんですけれども。
今週うちの子供が、学校で月に一人、スチューデントオブザマンスっていうのが発表されるんですけれども。
それはなんか、月に、その月頑張っていたクラスの子供が表彰されるみたいなので。
うちの子が、久しぶりに今月表彰されたので。
Speaker 3
おー、すごい。
Speaker 1
めでたい。おめでとうございます。
Speaker 3
ありがとうございます。
Speaker 1
いいですね。
なので、なんか、あの、コンバースの靴を買いに行くかもしれません。
Speaker 3
あ、ご褒美ですか。
Speaker 1
はい、ご褒美で。
Speaker 3
いいですね。
Speaker 2
コンバースが好きなんですか、お子さん。
Speaker 1
コンバース好きみたいでね、なんかもう本当に、あの、僕らの時から変わっていない、あの、ハイカットの靴を、同じの2個3個持っていますね。
Speaker 2
え、それ色も同じなんですか?
Speaker 1
なんか、今回色は変えるかもしれないとか。
あ、なんかおかしい。
Speaker 2
おしゃれ。
いいですね。
Speaker 1
高校生、高校1年生ですね。
Speaker 3
あ、高校1年生。
Speaker 1
うん。
Speaker 3
友下さんの奥さんって、日本の方じゃないですかね。
あ、そうですね。
あの、写真見たんですけど、はい。
Speaker 1
はいはい、あの、メキシコ人なんですね。
Speaker 3
あ、そうなんですね、はい。
えー、そちらで出会われたんですか、アメリカに行かれてから。
Speaker 1
そうですね、アメリカに旅行に行った時に会って、あの、ま、あの、文通みたいなのをしてみたいな、そんな感じで。
Speaker 3
えー、あ、文通、すごい。
Speaker 1
半分メキシコ人みたいな感じです、僕は。
Speaker 3
はい。
Speaker 1
文化も。
Speaker 3
あ、そうなんですね。
じゃあ、スペイン語とかも。
Speaker 2
手書きの、手紙の方から。
Speaker 1
いやいや、もう、さすがに。
メール。
あの、メールです。ただ、eメールとかでしたね。当時は、あの、あんまり、あの、やっぱり、国際メッセージとか高かったので、eメールとかでした。
あ、いいな。
Speaker 3
へー、そう、めちゃくちゃロマンチック。
トモシタさんの経験と研究
Speaker 2
いいですね。
うん。
Speaker 3
何か、あの、こっから、ストリーミングに繋がる話があるかなと思ったんですけども。
Speaker 1
w
Speaker 2
どうつなげるの。
Speaker 1
w
Speaker 3
ふははは、ちょっとなかったですね。はい。ちょっとじゃあ、じゃ、えーと、今回のショーの。
はい。
まとめ、まとめというのを入って行こうと思うんですけれども。
Speaker 1
お願いします。
Speaker 3
はい。一応、前回バッジのショーがありまして、まぁ、バッジでは、まぁ、Batchmatesとしては、まぁ、バッジの、一定、一定期間にたまったデータを、まぁ、送って、入力したりとか。
うん。
はい。
そうですね、まあ、ね。
まぁ、きちんと。
はい。
入力としてそれを処理して出力するみたいな処理なので
入力に影響を与えることがないっていうのがバッジのメリットでして
何度も繰り返して実行できるみたいなところがあって
障害にも強いみたいなところがバッジのメリットとしてあったと思うんですけども
一方でバッジを使うとリアルタイムで流したいデータとかに対応できないので
それに対応するために今回やっているストリーミングっていうのが
使われているというところかなというふうに思います
ストリーミングだと皆さんがよく知っているようなメッセージブローカーとか
メッセージキューみたいなのがあって
定期的にデータを受け取ってそれを流していくみたいなのとか
あとはログを使ったストリーミングとかもあって
この辺は友達さんがすごい詳しいところなのかなというふうに
思っているのでぜひ話していただこうかなというふうに思っています
ちょっとじゃあまずケンさん
これ今回2回目読んだと思うんですけども
読んでみてなんかどうでしたか
Speaker 2
相変わらず大好きな章ですね
1回読んだ時にはちょうど多分
ストリーム処理かじってて現場で実装してたみたいな頃で
よくわからんけどなんか面白いみたいな感じで読んでたんですよね
Speaker 3
はい
Speaker 2
その後に2個3個作ってから振り返ってみると
なんか自分の当時を思い出しながら
わからないなりにも頑張ってたのを思い出して
なんかいい章だなと思いました
Speaker 3
そうですよね
この章の最後の方に思い出の
思い出のストリーミング処理みたいな
ディスカッショントピックを作ったんですけど
ケンさんの出てくる量がすごいなっていう
過去のブログとか
読み切れないくらいブログが張ってあって
すごいやられつつなんだっていうのが
はい分かりましたけど
Speaker 2
多分なんかよくある流れですけど
まず最初にRDBMS
僕の場合マイシークエルとかをやった後で
なんかそれだけではない
自分の強みを出すみたいなところで
ストリーム処理を頑張ったところがあるので
そういう意味でも面白かったな
そんなところですね僕は
これ友久さんがストリーム詳しいからっていうところで
呼ばれていると思うんですけど
そこら辺をちょっとね
グレック・ヤングの動画
Speaker 2
最初の方に詳しく聞いてみたい
Speaker 3
確かに背景を聞きたいですね
そうですね
Speaker 1
大体この1年半ぐらいですかね
私たちも以前はといって
今の会社では
メインではRDBを使っているんですけれども
ちょっと長めの話でいくと
まず会社でDDDっていうのが
流行ったんですね
ドメインドリブンデザインっていう
コードを書くときにちゃんとレイヤーを分けて
しっかりドメインのビジネスロジックを
分離して書きましょうっていう
それが4,5年前から流行っていて
いろいろそれを導入することによって
かなりバグが少ないシステムを作るとか
そういう意識が会社の中で上がっていってきて
会社の中で
その振り返りをしたときに出てきたのが
やっぱりトランザクションによって
結構問題が起きやすいとか
もうちょっといい方法がないのかとか
そういうディスカッションをいろいろした中で
出てきたのが
ドキュメントDBを使えばいいんじゃないかみたいな
分散システムに対応しているらしいから
ちょっとそれを使ったらいいんじゃないかみたいなところで
結構いろいろ
ドキュメントDBをうまく使う方法について探した中で
イベントソーシングがあるっていうのが見つかって
私もその前はそんなにストリーミング自体も詳しくなくて
マジュールファンクションとかで
いわゆる非同期のストリーミングは使っていたんですけれども
それでシステムを作るっていうところまでは行ってなくて
遅延処理みたいな感じで
そういうメッセージングを使っていただけだったんですけれども
いろいろ調べて
このグレック・ヤングっていう人が結構すごい面白い人で
YouTubeで結構1時間ぐらいの講演で
イベントソーシングに説明しているビデオが結構たくさんあるんですけど
その分かりやすさっていうんでしょうかね
すごい非常に物事をシンプルに
説明できる人だなと思うんですけど
イベントソーシングっていうのを使えば
多くの問題が解決されるんだっていうのが
説明されているところを見て
作り始めたっていう感じです
最初 社内システムのために作り始めたんですけれども
日本でまだあんまり流行っていないので
これ オープンソースにするなり
会社として再利用できるものにすれば
結構いいんじゃないかっていう話になって
作り始めて
今1年ちょっと経っているという
そういう状況です
Speaker 3
ありがとうございます
まずはDDDから入って
そこからドキュメントDB使ったらいいんじゃないかっていう風になって
さらにグレック・ヤングさんの動画を見て
イベントソーシングに進んでいたという感じですかね
Speaker 1
そんな感じです
Speaker 3
このYouTube見たんですけど
結構多くも分かりやすいなと思って
英語なんですけど
話もすごい面白い
話し方も面白いですし
内容もすごい分かりやすかったので
半分くらい見たんですけど
動画すごい良かったし
これぜひ使いたいなっていう風に思ったので
めちゃくちゃ勉強になりました
Speaker 1
そうなんですよね
特にイベントソーシングって
簡単に言うと
ここで
ストリーミングの章にも書いてますけれども
起きたことを事実として
イベントとして書き込んで
そのイベント一つだけを見ても
現在のステートっていうのは分からないので
そのストリーミング処理なり
このバッジ処理を使って
現在のステートに関しては
キャッシュとして持って
そのキャッシュから
システムに表示するようにしましょう
という風に思っています
でも一番大事なのは
そのイベントなので
そのイベントに関しては
もう一回書き込んだものは
絶対削除しないという形で
管理していきましょうという
そういうものなんですね
いろいろ質問が出てきて
例えば古いデータ間違ってたら
どうするのかとか
そういう疑問が出てくるので
そういうのが結構
シンプルに分かりやすく答えられているのが
YouTubeのグレイクさんの話です
そういう感じがします
Speaker 2
このグレックヤングさん自体は
マイクロソフトの人ですか
Speaker 1
いや違いますね
グレックヤングは多分
アプリケーションデベロッパーの人で
この
イベントソーシングというのが
2007年8年ぐらいに
彼がやり始めたのは
DDDコミュニティ
このDDDというのは
エヴァンスさん
イベントソーシングの背景
Speaker 1
という方が
書いた本で
Speaker 2
その
エリック・エヴァンス
Speaker 1
エリック・エヴァンスの本で
それをやっているコミュニティの人が
CQRSというのが先に出てきたんですけど
コマンドとクエリを分離したらいいよね
そのためには
イベントソーシングというのを
使ったらいいよねというのが
コミュニティとして出てきたのが
2007、8年で
それがいろいろ温められて
それをやり始めた
グレックヤングが
イベントソーシングを
イベントソーシングの
イベントソーシングの詳細
Speaker 1
創始者じゃないですけれども
についてよく話しているという
そういう感じかなと思いますね
Speaker 2
なるほど
DDDの本ありますよね
Speaker 1
結構熱いやつ
Speaker 2
浅井さん読みました?
Speaker 3
いや読んでないです
Speaker 2
ちょっと懺悔したいんですけど
DDDの本数年前に読んだんですけど
さっぱりよく分からなかったんですよね
Speaker 3
そうなんですか?
けんさんでも
Speaker 1
結構原本と言われている
エリック・エヴァンスさんの本っていうのは
開発手法については
あんまり述べていなくて
お客さんと調整するプロセスっていうんでしょうかね
仕様をはっきり決めていくには
どうすればよいかみたいな
何を問題として
どこからどこまでを
境界としてシステムを定義していって
それぞれの境界を分離させる
ということが書かれている
その部分が結構多くて
それをシステム作るところまで読むまでに
結構時間かかるみたいな
結構壮大な本になってますね
Speaker 3
かなり抽象的な部分に時間が割かれているという感じですかね
なんかあれですかね
オニオンアーキテクチャーとかそういうやつでしたっけ
DDDに関係の
Speaker 1
そうですね
DDDのコミュニティで
結構オニオンアーキテクチャーが
用いられているという
そんな感じです
Speaker 3
それもあんまり分かりやすくないから
こうした方がいいんじゃないみたいな
図をたまにツイッターで見るときあるんですけど
いろいろそういうのを工夫すれば
分かりやすいんですかね
Speaker 1
そうだと思います
社内でどういう風に作るかみたいなのがあるんですけど
どうしてもいろいろ分離するために
レイヤーを分けるので
その途中で渡すための
DTOみたいな
データトランスファーオブジェクトみたいなのが
何回も詰め替えて詰め替えて渡すみたいな
そういうことが起きるので
結構行業しいなと感じるのがあるんですけれども
でも分離することによって
フォーカスできる部分というのを設定できるので
やっぱりバグが出にくいシステムを
作りやすいというのはあると思いますね
Speaker 3
ちなみに
今イベントソーシングを
多分開発の途中から
実装していると思うんですけれども
今どのくらい置き換えが進んできているとか
そういうのは分かりますか
Speaker 1
開発の途中から
現システムにくっつけて作ったというよりも
最初から別の
イベントソーシング用のフレームワークとして
別プロジェクトで作っていって
現プロジェクトには部分的に入れられるように作っていて
今イベントソーシングを作っているというのが
今中小システムであれば
対応できるぐらいのフレームワークとして
今完成しているところで
今年中にオープンソースとして
リリースしようという
今最終段階になっています
今日のストリーミングシステムの話に戻ると
結構やっぱり
メッセージング的なシステムというんでしょうかね
配信型のシステムというか
のシステムというので
データの整合性を組み立てようと思うと
結構やっぱり時間的な
順序の逆転みたいなのが起きてしまうので
結構大変なんですね
一つの処理がネットワークが落ちて
再接続して取り込もうとする間に
その後にできたイベントの処理が
終わってしまうっていうのが
一番なんかここにも書かれていた
ありがちな問題で
そうすると
例えばお金があって
それを誰かが使うみたいなところで
本当は先にイベントを出した人が先に使って
それが売り切れるみたいな
処理にしないといけないのに
後から入ってきた人が
本当は売り切れていたはずなのに
まだ残っていて
それを買うことができたとか
そういうことがやっぱり起こりうるみたいな
そんな感じの問題があるので
このストリーミングの方式として
ログ型の
実際に扱うときは順序で扱えるという
そういうストリーミング処理っていうのが
カフカのようなものが
マッチする場面が多い
Speaker 2
特にこのストリーミングの方式は
Speaker 1
特にイベントソーシング的な
動質データを作るときには
順番っていうのが大切なので
イベントソーシングの応用
Speaker 1
順番を管理するには
こういうログ型のものを使うのが
いいんじゃないかなっていうのが
この章に書かれていることかなと思いますね
Speaker 3
そうですよね
かなりログ型のところを
押しているようなところはある気がしていて
最初に
Speaker 2
ログ型のものを使うときに
Speaker 3
メッセージQとかの説明がありましたけど
かなりの部分で
ログ型の一部であるCDC
チェンジデータキャプチャーとか
今イベントストリーミングみたいなところが
結構重点的に説明されていたので
確かにそうなんだろうなっていうのは
それでもなお時間の問題があるって感じなんですよね
Speaker 1
そうですね
やっぱりそれがさらに分散のサーバーになってくると
なんていうのか
無理みたいな形になってくるので
順番が変わっても
なんとかするシステムはどう作ったらいいか
みたいな話が
もうちょっと後の12章に書かれていたので
そちらの方も
一生懸命読んでいかないといけないな
というところになっています
Speaker 3
そうですよね
12章もまた
読むの大変ですね
Speaker 2
これは
Speaker 3
でも一番面白い章なのかなと
Speaker 1
そうですね
Speaker 3
聞きました
Speaker 1
ちょっと戻ると
CDCっていうのが結構
特にRDBを使っている人にも
役に立っているものかなと思うんですけども
実際そのRDBっていうのは
ステートを管理するシステムで
現在のレコードのデータっていうのを
いつも保存して
それを取得するっていう感じなんですけれども
それを
ディストリビュート
分散していくためには
結局
イベントソーシング的なことっていうんでしょうかね
このデータが
レコードがこういうふうに変わりました
このレコードが削除されましたっていうのを
ログとして持って
そのログを
再生することによって
現在のデータが出せるんですけれども
ちょうどイベントソーシングがやっていることと
ほとんど似ているような仕組みで
ログを
一から再生していくことによって
現在の状態が分かるみたいなのが
データベースの内部では
実際はそれが行われているっていうの
私も昔は知らなかったんですけど
そうなのかっていう感じで
Speaker 3
納得しましたね
MySQLだと
Binlogで
Postgreだと
なんだっけな
忘れちゃいました
いろいろデータベースによって
それぞれ異なるCDCの実装が
あるんですよね
その中でも
CDCがそれぞれデータベースで違うっていうのが
使いづらいみたいな話が確かあって
金太さんも言ってたんですけど
その公開APIみたいな
それが公開APIになって
どの実装も
どのデータベースも
同じようなAPIで叩けたらいいんじゃない
みたいな話があったと思うんですけど
そういうのは使えそうですかね
ちょっと僕は使ったことないんですけども
Speaker 1
でもやっぱり
なんていうか
安定性を突き詰めると
ログベースっていうのは
この
著者のクレップマンさんの
結論なのかな
そういうふうに感じてますね
Speaker 2
ここでちょっと
聞いてみたいというか
ジャンプインしたいところがあるんですけど
Neo4jで実装してた頃も
内部で似たような
システムを使ってたんですよね
データの状態を基本的にずっと
ライターヘッドログみたいなのを入れといて
そのデータベースインスタンスが
スタートアップしたときに
それを最初から舐めていって
現在の状態をステートとして
割り出してからそれをメモリに入れて
はいどうぞ
OKですよクエで受け付けますみたいな感じで
どんどんどんどんログが増えていくので
それが増えていくと
何が問題になるかっていうと
データベースのインスタンスが
立ち上がる時間がどんどん伸びていくんですよ
そのログが少ないときは
30秒ぐらい経ってたのが
ログが伸びていくと3分4分5分となっていって
それで何が問題が起こるかっていうと
例えばフェールオーバーするときとかに
リージョン障害が起こって
別のリージョンに新しくデータベース
立てたいみたいなときに
そのログが長いと
ログを舐めていくコンピュテーション処理が長くなって
フェールオーバーに数分かかりますみたいな
感じになって
それってリライビリティに対しても
良くないってことがあったので
多分POSGREの
ログとかもそうですけども
バキューム処理的な感じ
最新のステートをここまでは処理して
最新の状態これってことで
ステートは計算してメモリに持てるんだけど
ログの方も整合性を壊さない形で
ある程度シュッとスリムにしちゃう
NEO4Jの場合はチェックポイントっていう形をしていて
ここのチェックポイントまでは
このユニークキーのやつは
最新の状態ですよってことで
その前の
キュッとバキュームしてスリムにしたり
みたいなことがあって
なんていうんでしょうね
状態は
全てイミュータブルなログが
入っていて舐めていくとはいえ
アプリケーションレベルでも
バキューム的な処理とかを
実装したくなるときとか
することってありますか
Speaker 1
イベントソーシングに関しては
それは
基本的にはしないというのが
基本になりますね
というかというと
イベントソーシングでデータを取っている
理由として
例えばショッピングカートでの話が
よくされるんですけれども
ショッピングカートに
この商品追加しました
やっぱりいらないと思って
その商品を削除しました
で別の商品を追加して購入する
追加して削除した商品に関しては
ステートとしては
今回変わらなかったので
残らないんですけれども
結局後々分析のために
役に立つんですね
こういうで
イベントソーシングのデータ取り扱い
Speaker 1
1回商品追加して削除したから
やっぱりもう1回買いたいですか
みたいな
Amazonとかそういうふうにやっていると思いますけれども
そういうことのために
アナライゼーションのために
基本的に使えるという
そういう
事実として
イベントソーシングの場合は
意味あるデータを残すように
というふうに言われていて
その意味あるデータであれば
使わなくて
その場ですぐ使わなくても
将来使うことを見越して残しておく
でスピード
立ち上がりが遅くなるという問題に関しては
スナップショットを取って
チェックポイントっていうのと
同じようなイメージですけれども
途中途中で
そのスナップショットを取っておいて
普通に見るときは
もうそのないものとして
扱うことができるみたいな
そういう感じで
扱うようになっています
Speaker 2
なるほど
だからこう
カンサログ的な扱いであったり
過去のユーザーの状態を分析したり
みたいなことで残しておくと
確かにそうですね
データベースを作るという観点と
アプリケーションとして
ビジネス要件として扱うという意味で
確かにそこの違いがありますね
Speaker 1
そうなんですよね
だから
CDCのコンパクションの場合は
なくなってもいい
なんか
オンになったりオフになったりしたっていう
なくなってもいい情報なので
クリーニング処理をして
早くするっていうのが
有効になってくるという感じかなと思いますね
Speaker 2
なるほど
いや面白いですね
ここら辺の違いを探っていくのも
Speaker 1
これでですね
データが大きくなりすぎたら
そんなことできるわけないじゃないか
みたいな話になってくるわけなんですよ
私たちのライブラリーも今
中小企業向けっていうことで作っていて
すごく大きくなったら時に
ハンドルする自信がまだないので
あれなんですけど
理論的には
どうすればいいかっていうのを
今いろいろこの本を読んだりして
勉強しているところで
でも実際にはですね
マテリアライズドビューというので
インメモリで全部取っておくわけじゃないんだけれども
バッチ処理みたいな感じで
マテリアライズドビューの活用
Speaker 1
データを一から
再構成しつつ
RDBにそのとき必要なデータを
構成しておくことによって
毎回イベントを見るんじゃなくて
特定の簡単なクエリのときには
マテリアライズドビューのRDBを見るという
そういう形でできるんですね
これが何でできるかというと
過去の削除しないと
約束しているから
ここまで終わったっていうのを
記録さえしておけば
その後の新しいイベントだけ見て
調整すればいいということになります
なので
バッチ処理を
例えば1時間に1遍
30分に1遍
10分に1遍みたいに減らしていくことによって
時間的なずれというのを
できるだけ少なくしていく
という感じになりますね
Speaker 2
だからマテリアライズドビューも
一種中間データみたいな形で
アプリケーション側で
自由にいろんな中間データの作り方できるので
それを駆使して
努力作業やっていくという感じですよね
Speaker 1
そうですね
なのでマイクロサービス化がしやすいんですね
まとめて
例えば1テラ2テラのデータになっていたとしても
1テラ2テラのデータを各拠点にコピーしておけば
新たに必要なのは
1000回コピーした
あとのその後1日のデータを
ガツンと
それが100メガとか1ギガとか
なるかもしれないですけれども
毎回全部をコピーする必要がない
というので
同期作業がしやすくなっていて
今データの
値段が安くなっているので
実際その使う量の
データというぐらいは
まかなえるようなインフラが
整ってきているんじゃないか
というのが
グレッグヤングさんが言っていたことで
それを言っていたのが
10年前ぐらいなので
さらに今から安くなっていることを考えると
なんとかなるんじゃないかと思って
カフカの利用例
Speaker 1
使い始めたという感じですね
Speaker 2
なるほど
ハードウェアの進化も
あえまって安くなってきてと
ちなみにチラッと
コピーしてみたいな話もありましたけど
多分コピーするみたいなことを考えて
別リージョンからも読めるようにする
みたいな考えると
今度整合性のこととかも
考えなきゃいけなくなってきたりするんでしょうね
多分コピーしたものはちょっと遅いから
そっちから読むと最新の状態にならなくて
Speaker 1
そうですね
なので私たちは
Cosmos DB
自分でデータベースを作るっていうのは
ちょっとハードルが高いなと思って
Cosmos DBの
持っている機能をまず使い始めよう
ということで
Cosmos DBはやっぱり分散にも対応しているし
データのコピーも
勝手にやってくれると
ところがあるので
まずはそれでできるところまで
やってみようと思ってますね
Speaker 3
ちょっと今回のところを聞きたいんですけど
アプリケーションが
イベント送信業に吐き出す
ログっていうのは
まずCosmos DBに全部出ていくってことですね
Speaker 1
そうなります
Speaker 3
でそのCosmos DBが
さらにマテリアライズドビューを
作るようなバッジを書いているって感じですかね
Speaker 1
そうですね
Cosmos DBを一定期間中に
このイベントの
その後のイベントを全部くれって言って
それが取ってきて
それをもとにマテリアライズドビューも
調整していったりする
という感じになります
Speaker 3
それはRDBだからまた別のデータベースに
作るんでしたっけ
Speaker 1
データが少ないときは
それをインメモリに持つことができるんですね
なので
5ギガとか
10ギガとかのサーバーを
AWSなり
Azureで借りていったときに
そこに入りきれる量の
メモリのデータであれば
マテリアライズドビューを
インメモリに持って
何かクエリがあったときに
インメモリから返すことができるので
システム的にも結構早く
扱うことができるみたいな
そういう利点はあります
Speaker 3
イベントソーシングが
何でも解決できるような
2にちょっと
僕はこれ読んで思われてしまったんですけど
一方でやっぱりバッジを書いたりとか
っていう悩みも
いろいろあると思うので
要件に合っていれば
すごいめちゃくちゃ使えるという感じですかね
Speaker 1
そうですね
苦手なこともありまして
苦手なことで言うと
やたらにオンオフオンオフするような
データを
がある場合に
例えば
ゲームをイベントソーシングでやりましょう
って言われて
ボタンを押したっていうのを
記録するのはいいんだけれど
そこまでのデータっていうのは
実際にはいらないっていうことはあると思うんですね
それをずっと残しておく必要っていうのは
全然ないみたいな
それこそどういうふうにボタンを押したか
押されたかというのを
解析してAIを作るとかだったら
まだしも普通の状況では
そのオンオフのボタンのデータがいらないのに
イベントソーシングの形で
普通に
データよりも
巨大なデータができていくみたいな場合は
そのまま同じように
ずっと取っておく形にする必要っていうのは
なかったりするので
やっぱり要件次第っていうことにはなるんですけれども
ユーザーの意思がかかる
ユーザーがこれを依頼するのに
ゆっくり考えないといけないみたいな
そういうものに関しては
データとして価値があり続ける
という可能性が多いので
結構多くのビジネス案件っていうんでしょうかね
エンタープライズ案件とかに関しては
かなりデータ容量的にも問題なく
使えるっていうことが多いんじゃないかなと思ってますね
Speaker 3
ありがとうございます
イベントソーシングの話から外れて
臨読会今回ケンさんがいなかったんですけれども
ケンさんに質問がいくつかあったので
それを取り上げてみてください
まず一つ目が
ケンさんがアパッチカフカを大規模とする
ストリーミングパイプラインの導入機能が増えている
っていう話をコメントに書いてくださっていて
その中で例えば銀行とかフィンテック
HRスタートアップとか
そういうのを挙げてくださったんですけども
その中でてっぺいさんから
HRスタートアップで使われているのが意外でしたと
どういうところで使われているかって
ご存知ですかという話があったんですけども
これは話せますかね
Speaker 2
2年半くらい前に
転職活動したときにいろいろ見て
ロンドンのスタートアップを見たんですね
これはテックブログに出てたので
パブリック情報ですけど
一つ当時結構大きいスタートアップシリーズ
BからCになろうとしてたのかな
なんかビーマリーっていう会社があってですね
ビーマリーっていうのはタレントソースプールを
作ってるHRテックなんですよね
だから例えば
僕が転職活動してますみたいな状態が
タレントプールとして情報に載ってて
この人が転職必要を見取るのが出たら
企業にプッシュしてみたいな
リンクトインの度胸号ではないですけど
各社が例えば過去に受けたけど
ちょっと落とした人
1年後にもう一回再プッシュしてみようかなとか
そういった自分の会社を受けてくれそうな
タレントの人が
Speaker 2
タレントプールって言ったりするんですね
結構大きい会社
Googleとかインディートとか受けると
彼ら独自のタレントプール
内製ツールとか使ったりするんですけど
それのソフトウェアザサービスみたいな会社があって
そこでカフカをがっつり使ってる
カフカとあとグラフデータベースを使ってる
っていう話があって
そこの話を聞いたときに
すごい面白かったなと思っていて
Speaker 2
それがHRスタートアップの例で
あとはロンドンだとやっぱり
フィンテック系が多いので
フィンテックスタートアップもそうだし
皆さんが名前を聞いたことあるような
大手銀行系も多くて
どっちでもカフカを使ってる例が多いですね
結構エンタープライズというか
エンジニア以外の人も聞く
よくある日本でいう
三菱UFJ的な感じの銀行でも
カフカ使ってますみたいなところがあったりして
なかなか幅が広いなと思って
カフカ使ったものとしては
だいぶちょっとこう
ボーナスポイントを持って
転職活動してるみたいな感じでしたけど
カフカの特徴と設定
Speaker 2
そういうのがありましたね
Speaker 3
すごいですね
やっぱりそれだけ安定性とか
対障害性みたいなのが
かなりあるっていうことですよね
カフカ
Speaker 2
多分ね運用する知見っていうのも
だいぶ枯れてきたと思うんですよ
カフカ自体ももちろん継続的に
アップデートされてるんですけれども
使うエンジニアの裾のボリュームが
結構広がってきたので
やっぱりアパッチスパーク
アパッチフリンクとか
他のストリーム使ってますってより
やっぱりアパッチカフカっていうのは
よく効くじゃないですか
だからよく効くってことは
選定される機会もそれだけ多いということで
ログのセマンティクスとかも
結構コンフィギュアラブルだし
割とそのいろいろコンフィギュアラブル
設定可能な幅が広いので
そういうところでも
選定しやすいっていうのは
あるのかもしれないですね
Speaker 1
カフカについて聞いてもいいですか
僕はあんまりカフカ自体は
すごく詳しくなくて
カフカはやっぱり
イベントは基本的に
ずっと取っておくものなんですか
それとも途中で
一定期間以前のものは
クリアするとか
最終的な
データ保持のために
も使うのか
それはやっぱり別のサービス
ドキュメントデビとかに流すのが
一般的なのかとか
その辺知りたいなと思ってるんですけど
Speaker 2
それが面白くてどっちも選べて
カフカはリテンションピリオド
ログをどれぐらいの期間持つかっていうことで
例えばアプリケーションログを作るときってのは
もうその1年も必要ないので
例えば30日で切るようにして
そうすると30日以降の
タイムスタンプのログは
どんどん勝手に消してくれる
一方でアプリケーションログ的に
セキュリティ関連の監査ログ的なのを
保存したいときは
ちょっとディスクの容量とか
気にする必要があるので
アプリケーションの設定としては
カフカの設定としては
どっちのつまみも触れられるので
そういったコンフィギュアラブルな幅っていうのも
カフカを選定する理由が
多い理由なのかなと思ったりしますね
Speaker 3
イベントソーシングのソースのデータベースとしても
使えるんですか
そうですね
Speaker 1
使っているっていう話は結構聞いたことがあって
私はドキュメントDBを先に使って
そっちをメインにしているので
カフカを
何か
何か
流す経路として
これから何か考えていきたいなと思っていて
古いものは
コスモスDBとかに
永続化みたいなのもできるかな
って考えていたところで
あともう一個
時間のことが
ここにも書いていたと思うんですけれども
カフカの場合の
時間の整合性というか
並べ替えの
単位っていうのはやっぱり
パーティションというか
パーティション
パーティション的な
このパーティション内では
時間並べ替えを
担保できますみたいな
そういうのってあったりするんですか
Speaker 2
そこもね
関数みたいなので結構
コンフィギュラブだった気がするんですよね
ちょっとそこ曖昧ですね
Speaker 1
ありがとうございます
結構順番って重要で
順番変わっているとね
Speaker 2
パーティションの中は
さすがに
北順だった気がしますね
Speaker 3
パーティション
Speaker 2
カフカでいうパーティションは
物理的な単位
Speaker 1
そうですよね
そこがまず一番大事
っていうところかなと思いますね
Speaker 2
パーティション単位では
ライターヘッドログと一緒に
どんどんアップエンドしていくだけなので
そこは一定だった気がしますね
Speaker 1
多分パーティションを超えた
順番の
担保っていうのは
無理だと思うんですよね
Speaker 2
そこをデフォルトだと
順不動です
ちょっとヘッタなこと言わないですけど
確かカフカもラップしてて
カフカストリームを使用した結合や変換
Speaker 2
いい感じにする設定もあってもないような
でも
頑張ればできなくはないですよね
バギーですけど
データベースやってくれたらいいので
パーティションごとには
タイムスタンプは順不動だけど
実装の詳細ではあるので
使う側からしたら
どっちも対応してくれたらいいな
あるので
確かに
Speaker 1
ありがとうございます
この章の最初のところの文章が
すごい良い文章で
うまく動作する複雑なシステムは
例外なく
うまく動作するシンプルなシステムから
進化してきたものだっていう
文章でこの章が始まっていたんですけれども
やっぱり
まずそのパーティション内の
順序
それをずれるとしても
それをどうやって
修正していくかみたいな
感じで
順位的には多分そういう感じだと思うので
結構やっぱこのシステムって
それぞれデータベースの
単体としても
いろいろ考えないといけないし
分散についても考えていかないといけないし
アプリケーションについても
考えていかないといけないんですけれども
どういう順番で
整合性を
担保していくかっていう
まずシンプルなところから
スタートして
少しずつ複雑にしていく
Speaker 2
というのが
Speaker 1
っていう感じかなと思って
自分たちの
作っているシステムはまだ全然
完全ではないんですけれども
この範囲だったらできるよ
みたいな
まずシンプルなところから
成長させていきたいなと思っていますね
Speaker 2
この一部かっこいいですよね
シンプルと複雑の
狭間でっていうのは
ソフトウェアエンジニアの永遠の課題だと思いますね
Speaker 3
いかにシンプルにできるか
というところが大事なんですかね
Speaker 2
すみません
Speaker 3
もう一個質問があるんですけれども
Speaker 2
しゅうへいさんからでして
Speaker 3
このストリームの結合っていうところが
前回のバッジについて
結合をどうするかっていう話がありまして
このストリーム
ストリーム結合の部分のジョインは
そのカフカみたいな
プラットフォーム上で実現できるのか
もしくはコンシューマー側でやっているのか
みたいな具体的なイメージが
わからなかったって話なんですけど
これケンさん分かりますか
Speaker 2
これあれだよ
KSQL DBっていうのでできるはず
僕プロダクションレベルで使ったことない
あくまで趣味プロで触ったレベルなんですけど
カフカを作ってる会社
コンフルエントっていう会社があって
アパチカフカのコンビニターたちがいるような会社で
そこでが作ってるAPIとして
カフカのスキルを作っている会社があるんですけど
ストリームに対してSQLっぽいものが
発行できますよっていうやつがあるんですよ
SQLって大抵どこのソフトウェアエンジニアも知ってるんで
各社データベースはやっぱり
SQLに仕様を寄せるんですよね
Neo4jのCypherっていうクエリ言語とかも
ちょっとSQLっぽく書かせようとしてたりする
SQLっぽくさせるとやっぱり
参入障壁が下がるので
ストリームのデータベースに対して
SQLっぽく書けるよっていうのがあり
そこで
ストリームのデータベースに対して
そこでストリームっていう概念を作るんですよ
クリエイトテーブルみたいな感じで
クリエイトストリームS1みたいな感じで作って
基本カフカのストリームを流れてくるものに対して
SQLっぽいのが書けますって感じなんだけど
そこでジョインができるんですよ
なのでそこのカフカを流れているものに対して
ジョインができて
カフカストリームに対する命令発行の
ラッパーのAPIに過ぎないので
カフカにはカフカコネクトって言って
カフカにデータを入れる側と
カフカからデータを吸い出す側との
つながりをいい感じにしてくれる
ツール群みたいなのがあって
例えばカフカからイラスティックサーチに流したいとか
ポスグレーのデータをカフカに入れたいってなった時に
それ思う人いっぱいいるじゃないですか
それが一人一人が
ゼロからプロデューサーとかコンシューマーのコード返したら
なんか
Speaker 1
カフカに入れる側とカフカからデータを吸い出す側との
Speaker 2
人類の知恵の無駄じゃないですか
だからカフカコネクタっていうのがあって
それをデプロイしてコンフィグいじるだけで
誰かが書いてくれたようなのはいい感じに
ポスグレーとカフカのコネクタがオープンソースにあれば
そこはいい感じにしてくれるとか
カフカとイラスティックサーチのコネクタがあれば
いい感じにしてくれるっていうのがあるので
例えばポスグレーから吸い取ったやつと
別のS3から吸い取ったやつを
カフカのスリム投げて
KCクリックDBのジョインを使って
ジョインして
イラスティックサーチに吐き出すっていうのは
それでできるはず
プロダクションレベルでしたことないんだけど
理論上そうですね
だからプラットフォームできますかという答えに関しては
そう思います
Speaker 3
ちなみにこのストリームに対して結合するっていうのが
ストリームって流れてくるもので
一定期間
溜めておいて
それを結合するっていう感じなんですか
例えばここからここの範囲で
流れてきたものに対して
結合するっていう感じですか
結合するっていう感じですか
カフカを利用したシンプルな要素の組み合わせ
Speaker 3
そういうことになるんですかね
ストリームで結合するっていうの
Speaker 2
そこで結合するキーを選ぶでしょ
だから結合する同じレコードが
両方から流れてきたらってだと思うけれども
ここから先は
想像なので
分からないですね
調べてみます
間違ってたら次回で補足しますが
Speaker 1
でもCDCとかと
つなげられて
そういうのに
変更に
基づいて
このテーブルが変更されたら
このマテリアルビューを
セレクトして
アップデートするとか
やっぱりかなり
マイクロサービスが
使いやすくなるっていうんでしょうかね
いろんな要件に対する
データを作るための
ハブ的なものとして
使えるっていうのが
非常によくできているな
それこそやっぱりシンプルなものを
組み合わせて
複雑なことを実現するのに
核化っていうのがすごい役立っているな
っていうふうに感じますね
Speaker 3
自分も
ちょっとまた話変わりますけど
会社で
この本を書を読んでから
イベントソーシングの可能性
Speaker 3
イベントソーシングっぽいところを
体験したことがあって
デプロイの
回数を測るための
処理が
測るタスクが
習字であって
それをデプロイする
ジョブがあって
デプロイの回数みたいなPRとかの数を
数えれば分かるんですけど
そうじゃなくて
デプロイするジョブから
ログをクラウドウォッチとかに吐き出して
それを集計
1週間に1回集計するみたいな
ことをやっているのを見て
これイベントソーシングに
すごい近いなと思って
アプリケーション
全体でやらなくても
小さく始められるのかなみたいな
ふうに思ったので
これはすごい面白いなと
思ったんですけど
イベントソーシングなんですから
もっとやってみたいなというふうに
結構自分は思いまして
いいなと思ったんですけど
友下さんの
会社にもし入ったら
そういう経験がいっぱいできる
という感じなんですかね
Speaker 1
まだね
イベントソーシングを扱っている
のが
少なくてうちの会社の中でも
主流にはなっていないんですけれども
面白い体験はできるんじゃないかと
かなと思います
Speaker 2
イベントソーシングやりたくなったらね
主流になってきたら
入るしかないじゃん
Speaker 3
そうですね
めちゃくちゃ僕興味があるんですよね
Speaker 2
アメリカですかスイスの次は
Speaker 3
アメリカ
行きたいですね
Speaker 1
でもイベントソーシング
やっぱり日本で
かなり積極的に
扱ってくださっている
イベントソーシングの
インフルエンサー的な
方が数人いるんですけれども
日本ではやっぱまだ
あんまり知られていない
というところなので
日本人が作っていた
イベントソーシングフレームワークで
Cシャープは日本でも結構
ビジネス側では
よく使われていて
Cシャープで私たち書いているんですけれども
Cシャープで
イベントソーシングを
関数型的に
書けるみたいなのを
オープンソース化したら
例えば趣味プロジェクトとか
でも使っていただけるんじゃないかな
と思うので
早めにリリースしたいと思います
Speaker 3
はい
楽しみにしています
Speaker 1
今回ね
DDIAの
ブッククラブに
参加させていただいて
うちの会社でも
ブッククラブを
開始させていただいて
その時に
アサヒさんの作ってくださった
フォーマットが非常に良かったので
ほとんど同じフォーマットで
本だけ変えて
会社内で
スタートさせてもらったんですけれども
結構やっぱり
うちの会社自体は
本を読む人は結構
限定的にいるものの
やっぱり忙しいのでね
なかなか読めない
という人が多かったですけれども
賞を限定して
こういう
まとめを書く時間と
この話す時間は
仕事時間でやるようにしたので
結構多くの人が
参加してくれて
本を読むことができて
良かったと言ってくださっているので
ちょっと今回
ロンドンテックトークのおかげで
そういう良い
取り組みが広まっていますというのを
感謝したいと思います
ありがとうございます
Speaker 2
すごい
アサヒさんめっちゃ嬉しいやつじゃん
Speaker 3
めちゃくちゃ嬉しいですよ
だってやってたことが
他の会社にもちょっと影響を与えられたっていうのは
すごい嬉しいですし
このフォーマット自体は
けんさんが作ってくださったところはあるんですけど
それはすごいシンプルで分かりやすい
いや多分そうです
めちゃくちゃシンプルで分かりやすいなと思うんですけど
これはすごい嬉しいですね
Speaker 2
ありがとうございます
ディスコードのね
僕らのディスコードのチャンネルにも
友下さん共有してくれましたけど
会社の方が書かれたノートコムの記事もありましたよね
なんかそこで
インタビュー形式で社員に
いろんな本を聞いてるみたいなのがあって
あれも面白く読ませてもらいましたね
Speaker 3
面白かったですね
本当に多くの方が参加してるんだなっていうのが分かって
なんかすごいですね
巻き込み力も
友下さんの巻き込み力もあるのかなっていう感じはしたんですけど
Speaker 1
でもやっぱり
このロンドンテックトークの
ブッククラブは
結構みんなそれぞれ
すごい
すごい時間かけてやっていますけれども
社内の方がもうちょっと参加しやすくして
結構聞いてるだけの人も
多いし
それでもいいし
だからこういう風に
結構シンプルな
コメントの書き方とか
変数名の付け方とか
そういうことが書かれている本を選んで
そういうことについて
社内で語り合っているのを聞いて
ちょっと刺激を受けるみたいなね
そういうことについて
ロンドンテックトークのブッククラブ
Speaker 1
新しいメンバーとかも
入りやすい形に
アレンジしてやっているっていう感じですね
Speaker 3
めちゃくちゃいいですね
PRとかにコメントするよりも
なんか
意見のすり合わせがしやすいというか
いうような
メリットもありそうだなと思いました
ロンドンテックトークの
臨読会もこの後一章で終わりですけど
引き続きまた
別の本で
臨読会を続けていこうと思っていますので
興味がある方はぜひ
ご連絡くださいっていうのを
宣伝しておきたいですね
Speaker 2
楽しみだね
次の本も決まったしね
詳しく本の紹介会があるのかな
Speaker 3
あると思います
やります
Speaker 1
私も
一リスナーの立場から
参加させていただいたんですけれども
全然怖くなかったので
聞いている方で
関心がある方も
ぜひ
どこから連絡するかを
っていうのが一番いいんでしょうかね
ディスコードなのか
Speaker 3
ツイッターか
そうです
一応ケンさんが最近
アンケートフォーム作られたんで
そこから声掛けていただいてもいいですし
Speaker 2
どこがいいんだろうね
トバヒラさんって何でくれましたっけ
Speaker 3
連絡
Speaker 1
僕はXで
ケンさんにリプライをして
最初興味あるって
言ったと思うんですけれども
人によっては
パブリックリプライで
書きにくいっていう人も
いるのかなと思って
今週出たエピソードで
Googleフォームっていうのは
非常にいいなと思いましたね
Speaker 2
いきなりDMとか
ハードル高い方もいらっしゃるだろうからね
うん
Speaker 3
ぜひ
Speaker 2
Googleドックスなのか
Googleカレンダーなのか
それできたら
それをパブリックに放出しちゃうとかも
ありなのかな
Speaker 3
確かにいいですね
それはやってみますか
確かに
Speaker 2
運用の話は
やりましょう
Speaker 3
はい了解です
Speaker 2
ありがとうございます
Speaker 3
今日はこんなところですが
Speaker 1
すごい面白い話が聞かれてよかったです
ありがとうございました
Speaker 3
ご参加いただきありがとうございました
Speaker 2
ありがとうございました
Speaker 1
お疲れ様でした
54:17

Comments

Scroll