イベントアーキテクチャの種類

イベントアーキテクチャを選択する

イベント駆動システムは、2000年からずっと使って来ました。
 Event Driven Architectures (EDA)
ただ、すべてこの文章に紹介されたSEDA(Staged Event-Driven Architecture)に該当します。

従って結果整合性(eventual consistency)を取り入れたシステムではなく、氏の言う希望的一貫性(hopeful consistency)が実現することになるのだ。すべてが正常に動作していれば、システムには一貫性がある。しかし問題が発生した場合には、システムの一貫性は失われ、復元のために手作業による回復操作が必要になる。

確かにそうでしたね。

整合性を再構築可能にするためのDawson氏のベストソリューションは、イベントはデータであることを認識し、イベントストリームを永続化することだ。 ... 氏は、このスタイルをストリームプロセッシングと呼んでいる。氏によれば、これはKafkaに極めて適したアーキテクチャである。Kafkaのクライアントはストリームから順番にイベントを読み込むが、必要ならば再度先頭から、あるいは特定のイベントから読み込むことも可能だからだ。

このように「永続性を備えたイベントストリーム」については、作者が不十分だと言っており、

集約で発行されたすべてのイベントを永続化し、そのイベントを再生して集約の同じ状態を構築することにより、イベントをソースとする集約のルーツを得ることができる。これが本来のイベントソーシングと氏の定義するものだ。

なんかトランザクション的な考え方でしょうかね?

イベントアーキテクチャモデルに基づいたシステムを構築するために、Dawson氏は、メッセージおよびイベント指向の分散システムを構築するためのライブラリとサービスのセットであるMuon Stackを開発した。これにはイベントストリームAPIのクライアントとイベントストアのPhoton が含まれており、現在はKafkaへの移植作業中である。

Event Persistence Muon Stack

Persisting your events into an event store that permits events so be replayed on demand solves these issues. It allows your applications to emit events, observe them and then selectively replay the streams that you are interested in at some later point as well.
The server side is implemented by Photon (A Clojure based Event Store with functional event Projections), PhotonLite (an event stream API layer) or any other service (local or remote) that implements the server side of this protocol. This gives you the ability to vary the implementation of your event store, including having different event stores for different streams.

Photon is an event store with cold+hot event streaming

Photon is an attempt at avoiding such redundancy by abstracting and encapsulating both the storage and the transformation of data as service methods. It is designed as a black box with an internal database with a projection engine, both generic enough to store free-form data and allow for a wide range of expressivity for data transformation, in real time. In this way, business rules can be implemented and deployed in Photon instances via projections, effectively decoupling business logic and data storage and processing.

なるほどですね。