Using fmodel to build ES/CQRS apps #164
-
Hi I have few questions, kindly answer. a. Is this a complete solution for building even-sourcing/CQRS applications? Does it support features like replay, snapshots out-of-the-box? b. Can we use Nats Jetstream, Mongo, Postgres as an event store? c. Can we use it in production, stable enough? d. Also pl. tell about the production status of fmodel-ts (written in TypeScript). Does it implement all the features that fmodel offers? |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments 12 replies
-
Hi @cloudcompute , a. It is not a complete solution. b. Mongo and Postgres can be used as an event stores. First, It is important for the storage technology to support concurrency control so your event streams are totally ordered. Second, it is valuable if your event store can stream events to your Views/Query side (think of concurrent consumers on the Query side!). Unfortunately, SQL/Document Databases are not really made for streaming (but it can be done). I am not knowledgeable about Jetstream, but Mongo and Postgress will work. c. Yes you can. It is already used in production to my knowledge. d. We are actively engaged on all GitHub repos and trying to solve all the bugs or issues as they occur, for your information. We have
We plan to implement more application extensions/modules that will actually provide an implementation for the infrastructure. Application extensions will cover:
Expected in Summer 2023. We will do this iteratively and release an extension as we find it production ready. If you are in hurry, please contact me via email PS. Materialized View can request a 'replay' of Events from your storage. The question is who is maintaining the token/position of the last event being handled by that Materialized View? Is it infra (DB, Axon Server, Event Store, Kafka) that is doing that and you only need to Ack the last position, or your application is maintaining the Tracking Token on the client side? We believe that this topic is related to Event Streaming (advertising events to Views constantly, as they are stored) and not to Event Sourcing (sourcing the Aggregate state per request) actually. Many different technologies can be used to achieve robust event streaming, but they are very specific in their own design and it usually requires a specific implementation to make it simple and performant. Best, |
Beta Was this translation helpful? Give feedback.
-
Hi, I'm new to the party here. Getting ready to migrate from Axon to our own NATS-based ES+CQRS implementation. I was glad to read the above paragraph ⬆️, as that's exactly what I expected a snapshotting event-sourced aggregate to be: a combination of of Also, @cloudcompute I'm convinced that NATS's JetStream can be used as an event store (see https://github.com/bruth/rita for an initial, prototype implementation in Go), and I think it can support snapshots via a JetStream |
Beta Was this translation helpful? Give feedback.
Hi @cloudcompute ,
a. It is not a complete solution.
FModel
is a set of libraries that can be used to accelerate the solution on your end. It only proposes generic infrastructure interfaces on theapplication
module, but the implementation of these interfaces is on you/your team. For example. Please, check the demo application(s) for moreb. Mongo and Postgres can be used as an event stores. First, It is important for the storage technology to support concurrency control so your event streams are totally ordered. Second, it is valuable if your event store can stream events to your Views/Query side (think of concurrent consumers on the Query side!). Unfortunately, SQL/Document Databases ar…