namely / chief-of-state

gRPC clustered event sourcing tool
MIT License
47 stars 2 forks source link
akka cqrs distributed-systems docker event-sourcing grpc kubernetes protobuf protocol-buffer reactive

Chief of State

GitHub Workflow Status (branch) Codacy grade Docker Hub Docker Pulls

Overview

Chief-of-state (COS) is an Open Source clustered persistence tool for building event sourced applications. COS supports CQRS and event-sourcing through simple, language-agnostic interfaces via gRPC, and it allows developers to describe their schema with Protobuf. Under the hood, COS leverages Akka to scale out and guarantee performant, reliable persistence.

Chief-of-state was built by Namely with the following principles:

Anatomy of a chief-of-state app

Developers implement two gRPC interfaces: a write handler for building state and, optionally, many read handlers for reacting to state changes.

Architecture Diagram

Chief Of State Service

The main entry point of a chief-of-state based application is the Service. Developers will interact with chief of state via:

Write Handler

Developers describe state mutations by implementing two RPC’s in the WriteSideHandlerService:

Read Handler

In response to state mutations, COS is able to send changes to many ReadSideHandlerService implementations, which may take any action. COS guarantees at-least-once delivery of events and resulting state to each read side in the order they were persisted.

Some potential read side handlers might:

Features

Documentation

The following docs are available:

Community

You can join these groups and chat to discuss and ask Chief Of State related questions on:

Gitter Github: namely/chief-of-state

Contribution

Contributions are welcome!

The project adheres to Semantic Versioning and Conventional Commits. If you see an issue that you'd like to see fixed, the best way to make it happen is to help out by submitting a pull request implementing it. To test your implementation locally follow the steps below:

Locally build / test

# install earthly cli
brew install earthly/earthly/earthly (for mac users)

# locally build the image
earthly +build-image

# run tests
earthly -P --no-output +test-local

License

License: MIT

Sample Projects

Python