そうですね、データ処理周りとかですね、はいはい。
ので、その辺の話がうまいこと全員巻き込めていけるといいかもしれないと。
はい、ということでよろしくお願いします。
お願いします。
お願いします。
早速なんですけど、ちょっとマイクロサービスって困って、マイクロサービスって困ってるわけじゃないな。
マイクロサービスは、モノリスのでかいサービスがあって、ララベルの。
つらいと。
そう。
で、そうするとこのバズワードで最近マイクロサービスっていうやつがありまして、
マイクロサービスにすればもう全部解決みたいな。
で、実際にあの書籍を読んでみると、どうもそんなわけはないなっていう風になるわけですよ。
そうそうそうそう。
そりゃそうですね。
それはそうだって話なんですけど、要はデータベースも分割しなきゃいけないし、じゃないといわゆる分散モノリスっていう最悪の状態になるんで。
そう。
で、じゃあ今何やってるのって話は、この間サーステックっていうカンファレンスというかイベントがあったんで話したんですけど、
今僕がやってることはコメントをちゃんと書いて仕様をまとめることですって事を。
地道なことをやって、その先を見据えて動いているみたいな感じですね。
なので目指すはモジュラーモノリスかもしれないなみたいなところ。
でもモジュラーモノリスもまだあんまり現実のこんな風にやってますみたいなのが出てきてないんで、
まだ迷いながらいろんなこと試しながらっていう感じで行動を整理していってるって感じですね。
そうですね。なんかShopifyがすごくうまくやってるみたいな匂いだけ感じてますね。
あれ本当にうまくいってんのかなって、なんかあの後のブログポストとか出てなくないみたいな。
その後どうなったのみたいな。幸せになったのみたいな。
すごい気になりますね。
気になりますよね。いや、モジュラーモノリスもなんかいろんなパターンがあって、
単純に機能をディレクトリ構成で分けるみたいなパターンと、
あと要はララベル複数同じリポジトリに入れますみたいな。
1つのララベルだったのを5つのララベルにしようみたいな、なんかそういうパターン。
データベースは同じのを見てるみたいな。そういうやり方とかいろいろあって、
どれがうちのコードに向いてるのかなみたいな。
それよりも俺は今この目の前にあるif文を消したいなみたいな。
スカラーにしましょう、スカラーに。
そういうのもあれじゃないですか。
APIゲートウェイより、例えば今だとグラフQLみたいなのがトレンドだったりとかすると思うんですけど、
やっぱりどうしてもその適当性のあるものに対してどういうアプローチをするかっていうのが抜群に多いわけですよね。
やっぱりそっちのほうが分かりやすいからなんですけど。
ではなくて、じゃあログってどういう風に扱うのかと。
で、分割しないといけないし、分割しなくてもいいんですけど、システムごとリファクタリングするときっていうのはその不変なデータをコピーしてうまく使うっていうのがまずテクニックとして出てくるんですね。
で、これをやるときに全てを、例えばめちゃくちゃ話すると長くなるのでちょっと端折りますけど、
ドメインイベントとかそういう分析をしてアプリケーションでどういう物事が発生するのかって書き出していくんですけど、
物事は大体それを全て映像化していきますっていうのがさっきの話ですね。
で、データベースに入るときのタイミングっていうのはそのドメインイベントが起きたタイミングとまたちょっと違うわけですよね。
非機能要件的なものが含まれてくるので。
なんですけど、そこにあるものが生として見なされるので、その入った時点のものですね。
データベースのその時点のものはスナップショットですけど、違うデータが来ると生で変わっていくので不変ではないんですけど、その時点で見るとスナップショットと。
なので、その変更したタイミングをバイナリログから引っ張ってきて、イベントとして不変なものとして扱って他にイベントバスするっていうのがCDCとかのテクニックなんですけど、
これを使うことによって、そこのデータベースしか見ないといけないんですっていう考えをこれで外すことができるんですね。
他に転送先からそっちでやってないみたいになるので、こういうふうにやっていくとモジュラーモノリストを支えるためのデータベースのリファクタリングを一緒にやったりだとか、
あとはマイクロサービスをやるときにサービス間をまたぐときにうまくできないというときはこのCDCを使って、
もちろん他のデータベースに直接転送するんじゃなくて、カフカとかを使って間に置くっていうのが大事ですけど、
そういうのを使ってやっていくことによってリファクタリングとかデータベースリファクタリングもそうだし、
サービスの分割っていうのもやっていくみたいなところですね。
なのでこれがドメインから見るとドメインイベントとかイベントソーシングになりますけど、
データ処理から見るとCDCだけどイベントソーシングでもあるみたいな感じですね。
ここに似てるようでちょっと違うんですけど、でも同じとしても見なされるみたいな感じですね。
だからあれか、ポイントシステムなんか使うとあるじゃないですか。
履歴みたいな形で執行もすべてレコードとしてイベントとして積み上げていくみたいな。
それとだからイミュータブルデータベースモデルみたいなのとこの考え方が似てるというか。
そうですね。
なるほどね。でもその場合ってカフカがその間を取り持つパイプみたいな役なんですか?サービス間の。
そうですね。この場合はそうですね。
でもそれって中央集権のRDBとカフカは何が違うんですかって話になりませんか?
うまく使ったRDBとカフカは同じものになるんですか?
同じものにはならないですね。
あくまでカフカっていうのは他のものに対して転送しますよみたいな扱いなので。
なるほど。
カフカ自体に対してクエリを投げることもできるんです。
カフカっていわゆる給料じゃないのでいろんなことができるんですけど同義ではないですね。
カフカに入ってカフカから他のデータベースとかその他に転送するのっていくら何個あってもいいんですよ。
データベースじゃなくてもいいしアプリケーションのプロセスが直接見に来てもいいのでそれはもう制限ないんですけど。
なので同義ではないですね。
他のところに転送してそこから引っ張るのが調子良ければそうすればいいし。
いや僕たちはこのイベントを取ってメッセージングって言うんですけどメッセージを受け取ってそれを例えばイベントソーシングCQRSの言い方をすると
リードモデルハンドラーみたいなやつが持って行って自分たちのデータベースと結合させて自分たちが欲しいインデックスを作るみたいな感じですね。
こういう風にしていくとアプリケーションでどういう検索を作りたい。
でもこの検索って他のサービス絡んでるんですよねっていう時に
じゃあ他のサービス発生したドメイベント僕らも取っていこう。
でも相手は誰に投げてるか知らないので誰か取っていってもいいですよみたいな仕組みになってくるんですね。
じゃあそのデータはそのカフカとそのスキーマ定義ファイルみたいなのでそのデータがやり取りできるようになってるみたいな。
そうですね。
なるほどなるほど。
なんかイメージがちょっとついてきた。
じゃないと例えば別にディスるわけじゃないですけど
フリーダムなJSONでデータ処理って送られるとめちゃくちゃ困るわけですよ。
本当にデータ処理ばっかりやってるのであれですけど
ここのイベント投げるんでこれとあそこのデータくっつけて新しいの欲しいんですよって言われて
分かりましたじゃあSparkで作るからってスカラーで書くんですけど
なんだこれオプショナルなのかどうなのか分からないぞって生のJSON見たら違うんですよネストが。
どうやって定義つけるのよみたいなのがやっぱりすごく多かったりするので
そういうのを防ぐためにもやっぱりスキーマエボリューションですね
プロトコルバッファーアプリケーションの人たちが使いやすいと思いますし
データ処理の観点で言うとアパッチアブロでインターナルなところはやり取りすることが多いんですけど
あれはもうそこで型がついて割と安全にカフカを経由してデータのやり取りができるみたいな
少し抽象的にメッセージのやり取りをカフカを通じて行うみたいな
そうですそうですそうです
太古の昔はアパッチスリフトってやつがあってそういう仕組みを使った人は分かると思うんですけど
あれと同じですね
そっかデータフローみたいなメッセージングの流れみたいなのを掴む
何となく分かってきたあれですね俺の嫌いなAWSのファイアホースとかいうのを使ってゴニョゴニョする系の
そうですそうです
理解してきた
そういうのを分割するお手伝いをよくやってますね
なるほどね
でも確かに竹田さんがイベントのネタシートに書いてあるのが
グラフQLとかRESTとかにみんな興味があるけど
イベントソーシングとデータのやり取りの話って出てこないですよね
特にウェブ系で
そうなんですよ
去年かな今年も一応参加予定なんですが海外でイベントソーシングライブっていうカンファレンスがあって2日くらいやるんですけど
本当にイベントソーシングっていうぐらいなんでイベントソーシングの話ばっかりなんですよ
イベントソーシング軸なのでDDDのどうやってドメインモデルの分析するかみたいな話もあるし
イベントソーシングをするにあたってのアンチパターンの話とかもすごい面白いのがいっぱいあったりだとか
あとは僕らはこういう風にやってアプローチしてるんだぜとか失敗もあるけどねみたいなのを結構やってくれるんですね
マイクロサービスもそこにあるみたいなイベントなんですけど
そこに行くとほとんどこの副作用を与えるためにどういうことをアプローチしてどういうことを考えないといけないかっていう話がほとんどなんですよ
で日本って逆でいかにそのAPI GatewayとかそのGraphQLを活用するかみたいな
もうあるものに対してのアプローチがあってすごい全然違うんですよね
別にそれはいい悪いって話じゃないんですけど海外のトレンドの追い方と日本のトレンドの追い方
時系列が違うのはもちろんなんですけどなんか結構違ってて面白いなって思いますね
そうですねなんかレイヤーがすげえ真逆ですよね方向性が
そうだよね日本だとGraphQLとかBFFの話は結構聞くんですよね
だからそこで衝撃を吸収してそのなんか延命しつつ少しずつサービスを分けていくみたいな話はよく聞くんだけど
確かにないな何ですかねこれは
なんかこうさっきも言ったみたいにいきなり高層ビルにするっていう大胆さが我々にないのか
これ僕と松尾さんが反省しなきゃいけないやつかもしれない
2022.イベントソーシング.ライブ
これかな
ヒルトン&ワープ
去年めっちゃ面白かったですね
10月3から4
ちなみにイベントソーシングって仮にじゃあ学ぼうってした時に
例えばカフカイジルとかキリタ見るなりググって外国の人のあれ見るなり
サンプル触るなりっていうのはあると思うんですけど
それ以来に例えば人間が学びやすい書籍とかリソースとかってあるんですか
概念というかミドルウェアについては学べますけど