Coder Social home page Coder Social logo

eventhorizon's Introduction

Build Status Coverage Status GoDoc Go Report Card

Event Horizon

Event Horizon is a CQRS/ES toolkit for Go.

NOTE: Event Horizon is used in production systems but the API is not final!

CQRS stands for Command Query Responsibility Segregation and is a technique where object access (the Query part) and modification (the Command part) are separated from each other. This helps in designing complex data models where the actions can be totally independent from the data output.

ES stands for Event Sourcing and is a technique where all events that have happened in a system are recorded, and all future actions are based on the events instead of a single data model. The main benefit of adding Event Sourcing is traceability of changes which can be used for example in audit logging. Additionally, "incorrect" events that happened in the past (for example due to a bug) can be compensated for with an event which will make the current data "correct", as that is based on the events.

Read more about CQRS/ES from one of the major authors/contributors on the subject: http://codebetter.com/gregyoung/2010/02/16/cqrs-task-based-uis-event-sourcing-agh/

Other material on CQRS/ES:

Inspired by the following libraries/examples:

Suggestions are welcome!

Usage

See the example folder for a few examples to get you started.

Storage drivers

These are the drivers for storage of events and entities.

Local / in memory

There are simple in memory implementations of an event store and entity repo. These are meant for testing/experimentation.

MongoDB

Fairly mature, used in production.

AWS DynamoDB

https://github.com/seedboxtech/eh-dynamo

Messaging drivers

These are the drivers for messaging, currently only publishers.

Local / in memory

Fully synchrounos. Useful for testing/experimentation.

GCP Cloud Pub/Sub

Experimental driver.

Kafka

https://github.com/Kistler-Group/eh-kafka

NATS Streaming

https://github.com/v0id3r/eh-nats

Development

To develop Event Horizon you need to have Docker and Docker Compose installed.

To start all needed services and run all tests, simply run make:

make

To manualy run the services and stop them:

make services
make stop

When the services are running testing can be done either locally or with Docker:

make test
make test_docker
go test ./...

The difference between make test and go test ./... is that make test also prints coverage info.

Get Involved

License

Event Horizon is licensed under Apache License 2.0

http://www.apache.org/licenses/LICENSE-2.0

eventhorizon's People

Contributors

apterf avatar balboah avatar dhogborg avatar dtravin avatar gongdo avatar hartca avatar janhalfar avatar jensrantil avatar jkralik avatar jonwarghed avatar maxekman avatar mbucc avatar mcarriere avatar semenovdl avatar superchalupa avatar v0id3r avatar zoer avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.