Share
Embed
Transcript
38 slides
-
• 名前:なかやまひろ@せち • 都内のシステム開発会社に勤務 ◦ フリーランスと会社員を行ったりきたり • 最近のお仕事は社内の何でも屋! ◦ AWSからFEまでやってます
◦ Javaやりたい・・・ • 趣味は自転車乗ったりゲームしたり ◦ スライド作りとかで乗れてないのがつらい • JJUGはオフラインでは初めて • 猫可愛いので覚えて帰って 自己紹介 JJUG Tシャツを バリバリした直後の犯 猫 -
このセッションで得られる(といいなぁ・・・)もの • 知らない人 ◦ EventSourcingっていうものがあること • 知ってるけどやったことない人 ◦ 経験しなければわからないところを知っていただければ •
既に導入してる人 ◦ こういうアプローチもある 知らなくても大丈夫です -
一般的にこういうところがメリットと言われています。 • 関心ごとが別れているため、ソースコードの複雑さが軽減する ◦ アーキテクチャの複雑さでなんとかする • 発生したEventを全て記録することで、データロス発生を防ぐ • Eventが監査にも利用できるログやデータ更新の履歴管理として利用で きる(副次的な効果)
もちろん欠点もありますが、それは後ほど。 で、Event Sourcingは何を解決したいの? -
Event Sourcingを構成する要素を、以下の5つに定義します。 • Command:Eventを登録する更新用API • Query:現在のデータを参照するAPI • EventListner:Eventを再生して現在のデータを作り出す処理。キューを 用いて非同期で実行することもある。 •
EventStore:Eventを登録するデータベース • ViewModel:Eventを再生して作成した参照用データベース ※色々呼び名はあります 本資料における用語の定義(参考) -
昔のことなのでうろ覚えですが、こんなことを感じました。 • 上手く作ればハマりそうな気がする • でも難易度が高すぎるのでは? ◦ そこそこ大きなプロジェクトなのでメンバーが多く、全員にEvent Sourcingを習得させるのは困難 ◦ 設計失敗したら取り返しがつかないのでは?
• イレギュラーなケース出てきたとき対応し切れるのか・・・ ◦ 将来発生するであろう未知の要件への不安 Event Sourcingを諦めた理由 -
Event Sourcingの恩恵は受けれたと思います。 • CommandとQueryの構成による関心ごとの分離 • 参照データに変更が必要な場合、EventListenerとViewmodelを追加 するというアプローチが取れる ◦ REST APIにおけるV2が作りやすい
◦ 変更しやすいことで、Query周りの設計のコスト削減ができる ▪ テーブル含めたリファクタリングがやりやすい この構成で解決できたこと -
もちろん、いいことだらけではないです。 • Event Sourcingの課題である設計の難しさ ◦ 普通にCRUD作るより難しい ◦ 開発のコストがかかる • システム全体の正しさの担保が難しい
◦ 特に1つのユースケースでイベントが複数発生する場合 ◦ よくわからないけど動いてる、コワイ!なところはたまにある • オーバーエンジニアリング感 一方で課題も・・・ -
悩みを • Command実行時に現在の状態を参照したいときどうするか ◦ EventStore参照はコストが辛い ◦ ViewModel見るのは依存関係的に辛い • Listenerでエラーが発生したらどうするか? ◦
今回は全部ロールバックできるが、非同期とかにしていた場合は・・・ 設計時にも悩み・・・ -
プロジェクトの技術選定する立場でEventSoucingを採用するかを問われた ら、この辺りを考慮したらいいと思います。 • 自分たちが作ろうとするアプリケーションとマッチするか • チームに技術力と学習する時間は確保できているか • 工数はちゃんと合意できてるか • 運用面で発生する課題に立ち向かう覚悟はあるか
技術選定するにあたって多角的な視点を身につけられたのはプラス。(昔だっ たら飛びついてたかも・・・!) とは言え、気軽に始められない