Eventz: Event sourcing Microservices Infrastructure in Python
Eventz is an open source python framework for developing and deploying microservices.
Microservice architectures have great promise for developing and deploying solutions that are loosely coupled and coherent. They also can be daunting to implement and deploy. Eventz is a framework that provides an infrastructure that makes this process considerably easier.
Eventz has several components:
- EventzAPI a python library that provides objects and methods that facilitate AMQP messaging that links microservices.
- A RabbitMQ server that implements a publish and subscribe broker.
- Services in Docker containers that archive and allow querying an indelible archive of published events.
Figure 1 below shows an overview of the components and how they interact.
Every application
models some activity. These activities generate events. It is these
events that are published and subscribed to by the microservices.
This constitutes the sole means of communication between
microservices.
One or more Archivist services subscribe to all events and put them in indelible data store(s). Librarian services provide
the ability to query a data store and return a result set containing
the requested events. This provides data persistence to the
microservices.
For fast response
each microservice can have it's own local archive that contains the
events that the service subscribes to.
Event records are
published and stored in a defined format. The record begins with a
record type identifier followed by metadata that provides information
about the record. Following the metadata is the payload of data
generated by the event. The message is an ascii encoded tuple.
A range of record
types (900000000.00 to 999999999.99) is reserved for system
messages. System messages provide a way to report errors, ping
services etc.) System messages are handled by the API.