复习《微服务模式》的第六章,事件溯源
概述
- Java読書会でせっかく勉強したのにつぎつぎと忘れていくので、印象に残ったところを記録していく
使用事件溯源来开发业务逻辑。
不是创建反映了建模结果的表,而是将与实体相关的生成和更新事件记录到数据库中。
传统方法
-
- やり方
なんらかモデリング
対応するクラスを作る
対応するテーブル作る
ORマッパーでテーブルとクラスをつなぐ
欠点
履歴が残らない
後付で履歴つくるのは大変
生成・更新イベントも後付
事件溯源
-
- やり方
モデリングはする
対応するクラスは作る
でも永続化するのは、生成・更新イベントのみ(永続化用のテーブルをイベントストアと呼ぶ)
デシリアライズは、空オブジェクトにイベント履歴を繰り返し適用する
場合によっては、スナップショットテーブルを用意して、高速化する
イベントの発行は、イベントテーブルのトランザクションログを見るなり、ポーリングするなりして発行する
利点
履歴ファーストなので、当然すべての履歴が残る
イベント発行もネイティブに対応
欠点
イベントや対象となるオブジェクトのスキーマに追随するのが大変
従来手法とあまりに違いすぎるので習得難易度が高すぎる
履歴が残る分、削除が苦手
履歴しかないので、検索が困難⇒これは7章のCQRSで説明されている検索専用サービスを建てることで解決する
实现方式
基本上,使用作者所创建的Eventuate框架系列。
-
- Eventuate Local
イベントストアの実装用ライブラリ
イベントの永続化はMySQL、イベントのパブリッシュはKafkaベース
スナップショット機能もあり
Eventuage Client
Eventuate Localを基盤として、サービスを実装するためのライブラリ
Eventuate Tram Saga
Sagaを実現するためのライブラリ
Sagaは4章で説明されている。マイクロサービスだとサービスをまたがるところはトランザクションが効かないので、変わりにSagaと呼ばれるものを作る
– 我的思考
– 我的想法
– 我的印象
– 我的体验
– 我的感受
-
- 難しくてついていけません。
-
- 概要レベルなら分かるのですが。
-
- Eventuateシリーズをよほど使いこなせないと実現できなさそう
ピットフォールになる部分をよくしっているか
トラブル時にどうデバッグするか?
6章、7章を合わせて読んでみると、マイクロサービスはイベントを発行するのが当たり前なのか?
世の中のマイクロサービス開発というのは本当にこの本に書いてあるようなことをやっているのか?それとも2、3種類程度のWebアプリがコンテナ化されて動いているだけでモノリシックアプリと大差ないのか?