Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/pawelkaczor/ddd-leaven-akka-v2
Sample e-commerce system #Microservices #Akka #Reactive-DDD #CQRS
https://github.com/pawelkaczor/ddd-leaven-akka-v2
akka cqrs ddd event-sourcing microservices
Last synced: about 2 months ago
JSON representation
Sample e-commerce system #Microservices #Akka #Reactive-DDD #CQRS
- Host: GitHub
- URL: https://github.com/pawelkaczor/ddd-leaven-akka-v2
- Owner: pawelkaczor
- License: mit
- Created: 2015-01-03T22:47:04.000Z (about 10 years ago)
- Default Branch: master
- Last Pushed: 2018-07-21T15:20:05.000Z (over 6 years ago)
- Last Synced: 2024-08-07T23:47:50.357Z (5 months ago)
- Topics: akka, cqrs, ddd, event-sourcing, microservices
- Language: Scala
- Homepage: http://pkaczor.blogspot.com
- Size: 1.17 MB
- Stars: 385
- Watchers: 38
- Forks: 70
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- my-awesome - pawelkaczor/ddd-leaven-akka-v2 - sourcing,microservices pushed_at:2018-07 star:0.4k fork:0.1k Sample e-commerce system #Microservices #Akka #Reactive-DDD #CQRS (Scala)
README
ddd-leaven-akka-v2[![Build Status](https://travis-ci.org/pawelkaczor/ddd-leaven-akka-v2.svg?branch=master)](https://travis-ci.org/pawelkaczor/ddd-leaven-akka-v2)
==================[![Join Akka-DDD chat at https://gitter.im/pawelkaczor/akka-ddd](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/pawelkaczor/akka-ddd?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
Sample e-commerce application built on top of [Akka](http://akka.io) and [EventStore](http://geteventstore.com) following a [CQRS/DDDD](http://abdullin.com/post/dddd-cqrs-and-other-enterprise-development-buzz-words)-based approach.
Overview
--------------------This sample e-commerce system has unique set of properties. It is:
* responsive, resilient, elastic :clap:,
* incorporates a SOA, EDA, and Microservice architecture :ok_hand:,
* incorporates [CQRS/DDDD](http://abdullin.com/post/dddd-cqrs-and-other-enterprise-development-buzz-words) architectural patterns :+1:,
* supporting long-running business processes (eg. payment deadlines) :muscle:, and
* developer-friendly (implemented in Scala, ~1500 lines of code) :smile:.All these capabilities are obviously supported by the underlying technology stack, which includes:
* [Akka](http://akka.io) - actor-based, reactive middleware implemented in Scala,
* [Akka HTTP](http://doc.akka.io/docs/akka-http/current/scala/http/introduction.html) - HTTP server build upon [Akka Stream](http://doc.akka.io/docs/akka/2.4/scala/stream/stream-introduction.html) (Akka's implementation of [Reactive Streams Specification](http://www.reactive-streams.org/)),
* [Akka Persistence](http://doc.akka.io/docs/akka/current/scala/persistence.html) - infrastructure for building durable (event sourced) actors, which has a pluggable journal,
* [Event Store](http://geteventstore.com) - scalable, highly available event store with akka-persistence journal implementation. Provides engine for running user-defined projections (javascript functions) over single or multiple event streams. Projections allow the system to group or combine events into new event streams that can represent domain-level journals such as office journals (events grouped by emitter (`Aggregate Root`) class) or business process journals (events related to concrete business process). Domain journals are topic of interest for services such as:
* **view updaters** - responsible for updating the read side of the system
* **receptors** - allow event-driven interaction between subsystems (event choreography), including long-running processes (sagas),
:exclamation: Both view uppdaters and receptors are operating within non-blocking **back-pressured** event processing pipeline :exclamation:* [Akka-DDD](http://github.com/pawelkaczor/akka-ddd) - framework containing glue-code and all building blocks
Subsystems
--------------------The system currently consists of the following subsystems:
* Sales/Reservation - responsible for creating and confirming Reservations
* Invoicing - responsible for the invoicing
* Shipping - responsible for the goods delivery
* Headquarters - executes the Ordering Process (see below)
Ordering Process
--------------------
![Ordering Process](https://raw.githubusercontent.com/pawelkaczor/ddd-leaven-akka-v2/master/project/diagrams/OrderingSystem.png)Subsystem components
--------------------Each subsystem is divided into **write** and **read** side, each side containing **back-end** and **front-end** application:
![](https://docs.google.com/drawings/d/12Lwwq3WROlu2pkXsIwICQvuWiPNKW5XQwc7bRtLaauI/pub?w=722&h=620)***
#### write-back
Backend cluster node hosting `Aggregate Roots`, `Receptors` and `Process Managers (Sagas)`.#### write-front
HTTP server forwarding commands to backend cluster.***
#### read-back
View update service that consumes events from event store and updates view store (PostgreSQL database).#### read-front
HTTP server providing rest endpoint for accessing view store.Running and testing the system
--------------------
- [Running the system on physical server](https://github.com/pawelkaczor/ddd-leaven-akka-v2/wiki/Running-the-system-on-physical-server)
- [Running virtualized system](https://github.com/pawelkaczor/ddd-leaven-akka-v2/wiki/Running-virtualized-system)
- [Manual testing of order process](https://github.com/pawelkaczor/ddd-leaven-akka-v2/wiki/Manual-testing-of-order-process)
- [End-to-end test of order process](https://github.com/pawelkaczor/ddd-leaven-akka-v2/wiki/End-to-end-test-of-order-process)
- [Stress testing](https://github.com/pawelkaczor/ddd-leaven-akka-v2/wiki/Stress-testing)
- [Monitoring](https://github.com/pawelkaczor/ddd-leaven-akka-v2/wiki/Monitoring)