Skip to main content

Qotto/eventy

Project description

Eventy

What is Eventy?

Eventy is both a protocol and a library for making the design of fault-tolerant, event-driven, concurrent and distributed applications in a microservices-oriented architecture easier.

As a protocol, Eventy is language-agnostic.

However, the reference implementation is written in Python. Whatever is your programming language, you can use Eventy. If you are using Python, you will be able to make the most of it quicker.

Motivation

The reality is, a distributed, microservices-oriented architecture is a bit hard to make right.

Martin Fowler even ended up stating:

First Law of Distributed Object Design: “don't distribute your objects”.

He later detailed his view of the First Law regarding microservices.

As Martin Folwer points out, inherently microservices come with their undeniable advantages and a few companies use them with great success. The only reason why a lot of people end up struggling with microservices, is because it greatly increases the complexity of the whole system, which makes it harder to get it right.

Eventy is adressing exactly that issue — providing you with a reliable framework to make microservices work for you.

A big part of the design process to create Eventy was to understand different use cases and see how the design can be simplified. For instance, not only does Eventy offer state partitionning for free, it actually comes up with a few stratagies that eliminate the need to persist state altogether.

Inspiration

Kafka Streams was a great influence in making Eventy. Celery and Faust are also worth to be looked at if you are looking for an opiniated framework easy to get started with.

However, these frameworks only partially solve all the issues you will have with microservices. And, in our opinion, these frameworks are not suitable for designing large critical systems.

They're both opinanated, and therefore cannot be easily integrated in your existing software. You will have to build your software around the framework, instead of the other way around. They also don't give you the full control on the way you can use them: you can only use them as a whole, or not at all.

What Eventy can do for you

Eventy implements multiple features, but all of them simply solve two main problems:

  • How to make services communicate with each other
  • How to access and persist state

With Eventy, you can serialize data the way you want. You can use Avro , JSON, gRPC, or whatever customer serializer you like.

With Eventy, you can use any system you like as a persistency layer, as long as it supports transactions, if you need strong processing guarantees. The most obvious choice is to use Apache Kafka, but persisting messages over PostgreSQL is completely feasable, too.

Eventy was destined with the mindset of a library of related but independently usable components - and not a framework: the behaviour is explicit and you're the one in charge: you can design your software your own way.

This explicit behaviour, albeit requiring more boilerplate, gives you better clarity on what is happening. Recipes and examples are provided so that you can understand how to use Eventy for most use cases.

You're free to use any part of Eventy as well. Even if you end up not using the Eventy protocol at all, simply reading the documentation and understanding the issues that are adressed and how they are adressed can help you to get on the right path.

Main components of Eventy

  • a well-defined communication protocol for sending various types of persisted messages, called Records: Events , Requests and Responses
  • persistency of Records that can be stored forever, which lets you keep track of all the changes in your system ( especially useful for audits and business analytics)
  • queues so that Records can be processed asynchroneously, and aren't lost even if your system is down or overloaded
  • strong processing guarantees: a Record can be designed to be processed at least once, at most once and _ exactly once_ even if your system encounters a process or network failure at any point
  • self-propagating Contexts that in many cases entirely eliminate the need of persisting state
  • partitionned state persistency so that you no longer have a single point of failure in your system (aka the database) and can scale up as your business grows

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

eventy-3.0.1a3.tar.gz (18.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

eventy-3.0.1a3-py3-none-any.whl (24.3 kB view details)

Uploaded Python 3

File details

Details for the file eventy-3.0.1a3.tar.gz.

File metadata

  • Download URL: eventy-3.0.1a3.tar.gz
  • Upload date:
  • Size: 18.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for eventy-3.0.1a3.tar.gz
Algorithm Hash digest
SHA256 34657b1c4622e3366d175f533b8fb248c0cb2c0bf8e47c4a44e8f3cdd757b5b6
MD5 1962c13cc01330f34fdca4be5a4229b6
BLAKE2b-256 02c3580eb1f2a69f9dcc6818bf01706059dd7dd4cb724e826f82be201c9898b3

See more details on using hashes here.

File details

Details for the file eventy-3.0.1a3-py3-none-any.whl.

File metadata

  • Download URL: eventy-3.0.1a3-py3-none-any.whl
  • Upload date:
  • Size: 24.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for eventy-3.0.1a3-py3-none-any.whl
Algorithm Hash digest
SHA256 391ceabf891609d5ae8825e2380393b286753321c22de81414bb9a3ed3eb24d2
MD5 5ea8b890ea9430469276f03927f748dd
BLAKE2b-256 5e7e0f2abf210106a09104040f07a8d5514b21196e5fd6967ea3062f7f8dfa6a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page