Current Version: 2.0.0.0
Status: Stable / Production
Features
Message Store
- Underlying storage implementation with stream semantics, including categories and expected version protection for writes
- Primitive raw data format and serialization to JSON
- Used for both event storage as well as command transport and storage
- Event source for projected entities
- Postgres and Event Store support
Messaging
- Messaging primitives layered on top of the message store
- Handlers, Messages, Reader, Writer, Streams
- Handle either message types or raw data
- Conversion from raw data format to message classes
- Substitues and telemetry for testing and exercising
Entity Projection
- Apply events recorded to an entity's stream to the entity to restore its data
- Apply either messages or raw data
- Use either with a reader or with arbitrary data in-memory
- Use any entity data structure to project into
- No special entity base class needed (even an ORM object or a Hash will work)
Entity Store
- Retrieve an entity from its stream storage
- Uses entity projection to apply events to the entity
- Caches retrieved entity using entity cache
- Retrieves only new events on subsequent reads
- Substitute dependency to support tests and exercising
- Configurable batch size of events read
ENtity Cache
- In-memory (L1) and on-disk (L2) cache of entities
- Pluggable implementations of both memory and disk cache
- Used by entity store to avoid re-reading streams in their entirety when retrieving entities
- Optionally stores entity snapshot to disk
- Retrieves latest on-disk snapshot before retrieving new events
- Configurable snapshotting interval
Entity Snapshot
- Periodic storage of cached entities to disk
- Pluggable into entity cache
- Simple interface allows implementation for any storage medium
- Postgres and Event Store implementations provided, with JSON serialization
- No special entity base class needed
- Serialization format is not prescribed
- Pluggable serialization interface
Consumer
- Subscription to a stream via a continuous reader
- Registry of handlers that will be dispatched the stream's commands and events
- Graceful shutdown of consumers, allowing unit of work to complete
- Top-level error handling
- Can be started independently, or coordinated through the component host
Component HOst
- Hosts components as runtime services
- Entry point from operating system via start-up script
- Starts components' consumers
- Actor model coordinates components and readers
- Specialized reader pre-fetches batches of events via actor to eliminate waiting on reads
Other Features
- Data Aggregation tools
- Dependency declaration and substitution
- Serialization and transformation protocols
- Validation protocols
- Proper casing for JSON vs Ruby naming conventions
- Data structure mapping and copying utilities
- And many more....
Docs
Code
GitHub
Eventide Project code is hosted on GitHub:
github.com/eventide-project
A complete list of the libraries that make up the Eventide stack, as well as third-party libraries used, is available on the Libraries page of the Eventide documentation.
Community
Slack
Sign up for the Eventide Slack team at:
join.slack.com/t/eventide-project
Follow the Eventide Project on twitter:
twitter.com/eventideproject
Read our Community Protocols
Training
Attend a public workshop or bring specialized training in-house for your team
3-Day Evented Microservices, Autonomous Services, and Event Sourcing Workshop
Distributed Systems Fundamentals
Design Principles
Analysis and design for evented and message-based systems
Services & Components
Service Boundaries
Events
Commands
Handlers
Projections
Entities
Idempotence & Concurrency
Testing
Message Validation
Consumers & Subscriptions
Coordinating Multiple Services
Workflows Between Services
Building and Distributing Client Libraries for Your Services
Logging
Snapshotting State
2-Day Advanced Data Aggregation, View Data, and UI Workshop
Using Events to Update Databases
Aggregating Data from Multiple Streams
Data Command Streams and Processing
UI Patterns for Eventually-Consistent Systems
Custom Training
Get in touch and tell us about the learning that you'd like to do. We can build custom materials and curriculum for you and your team that aligns with the goals and the circumstances of your project.
About
Eventide was developed in the course of building applications at a consumer financial services company that was versed in service architectures, messaging, and traditional message bus, and had become mired in a legacy of monolith Rails applications.
Eventide is currently the operational, production microservice backbone for a range of implementations, covering scenarios including:
Marketing Automation
Ad Tech
Blockchain
Consumer Mobile Banking
Wealth Management
Investments
P2P Payments
Affiliate Programs
Bill Pay
Loan Origination
Loan Servicing
Payroll
Mortgage
Data Analysis and Transformation
The toolkit was operational in production systems for a year before it was open-sourced at the end of 2015.
Eventide v1 was released in November of 2018 when its documentation was ready.