Project Overview
Welcome to the MisArch project - A representable microservice reference architecture
Project Purpose
Modern software systems often adhere to the Microservices architectural style, where applications are composed of multiple independently developed microservices. Well-known applications following this style include Netflix and Amazon. These individual microservices often communicate through synchronous calls (REST, GraphQL, etc.) or asynchronous calls (gRPC, messaging, etc.). Additionally, such applications are monitored and traced using tools like Prometheus and Zipkin. To be able to respond to constant changes in the environment, such as fluctuating workload, autoscalers are typically used to scale the individual services accordingly.
In order to test applications and concepts for such architectures, both research and industry require what are known as reference architectures. However, existing microservice reference architectures are often not representative, as they are frequently very small and utilize outdated technologies, primarily relying on synchronous communication. Realistic applications from the industry, on the other hand, are often not available. Therefore, there is a need for a realistic and representative open-source microservice application.
The aim of this development project is to create such a reference architecture.
Comparison with exisiting Reference Architectures
Feature | TeaStore | T2-Store | TrainTicket | MisArch |
---|---|---|---|---|
# Microservices | 5 | 6 | 41 | 17 ( + 3 non-domain services) |
Multilanguage | - | - | ✔ | ✔ |
Asynchronous Communication | - | Partial | ✔ | ✔ |
Technologies | - | Kubernetes | Kubernetes | Dapr, Keycloak, Minio, GraphQL, Kubernetes |
Configurable System Behaviour | - | SLO Violations | Predefined Faults | ✔ |
Documentation
See
- Installation for details regarding system requirements and setup
- Usage for user manuals, e.g. the Frontend User Guide
- Architecture for the architectural process
- Services & System Components for detailed documentation of every domain service or system components
- Infrastructure, Experiments & Others for detailed documentation of the infrastructure and supporting services
- Architectural Decision Records for the architectural decisions
- Tooling for the tooling setup
- GraphQL for federated GraphQL schema
- /docs/graphql/<service> for the individual service GraphQL schema
Repository Structure
The MisArch-project is structured under the MisArch Github organization.
The source code of this documentation is stored in the Documentation repository.
Frontend
Infrastructure
These repositories include the different DevOps approaches.
Microservices
These repositories include the core microservices.
- Address
- Catalog
- Discount
- Gateway
- Inventory
- Invoice
- Media
- Notification
- Order
- Payment
- Return
- Review
- Shipment
- Shopping Cart
- Simulation
- Tax
- User
- Wishlist
Helpers
These repositories provide additional (non-core) functionalities
Domain
An extensive Tradeoff Analysis regarding different possible domains for the reference architecture was conducted. The e-commerce domain was identified as most promising candidat to fullfill the given requirments. The model shows all entities and relationships of the reference ecommerce shop.
Bounded contexts that are implemented within one service are highlighted with a purple frame.