The source code of this lab is open, and hosted on Github within the ‘ivans-innovation-lab’ organziation. Each project has its own git repository.
Monolithic
This version of the application is deployed as a single monolithic application on the backend, and an Angular application on the frontend.
my-company-monolith (backend)
Spring Boot. CQRS. Eventsourcing. Axonframework. Event-driven. Docker. REST API.
Description
Application consist of many components. There are two types of components:
- command-side (domain) and a
- query-side (materialized view)
This is CQRS in its most literal form.
Communication between the two components is event-driven and the demo uses simple event store (Database in this case - JPA) as a means of passing the events between components.
Additionally, application exposes a REST API that is consumed by my-company-angular-fe application.
Components (Dependencies)
- my-company-blog-domain
- my-company-blog-materialized-view
- my-company-project-domain
- my-company-project-materialized-view
- my-company-team-domain
- my-company-team-materialized-view
my-company-angular-fe (frontend)
Angular. Atomic design methodology. Feature and presentational components.
Description
The application consumes a my-company-monolith (backend) that exposes a JWT enabled authorization (OAuth2) endpoints for managing (CRUD operations) blog posts
, projects
and teams
.
Components/Modules (Dependencies)
- my-company-angular-fe-presentational-components
- my-company-angular-fe-shared
- my-company-angular-fe-blog
- my-company-angular-fe-team
- my-company-angular-fe-users
- my-company-angular-fe-projects
Microservices
This version of the application is deployed as a microservices and it demonstrates end-to-end best practices for building a cloud native, event driven microservice architecture.
my-company-blog-domain-microservice (backend)
Command side. REST API. Blog post. Microservice.
Description
Application exposes a REST API for sending commands related to BlogPost
aggregate.
Components (Dependencies)
my-company-blog-materialized-view-microservice (backend)
Query side. REST API. Blog post. Microservice.
Description
Application exposes a REST API for querying the BlogPost
materialized views.
Components (Dependencies)
my-company-project-domain-microservice (backend)
Command side. REST API. Project. Microservice.
Description
Application exposes a REST API for sending commands related to Project
aggregate.
Components (Dependencies)
my-company-project-materialized-view-microservice (backend)
Query side. REST API. Project. Microservice.
Description
Application exposes a REST API for querying the Project
materialized views.
Components (Dependencies)
my-company-registry-backingservice (backend)
Service registry. Backingservice. Client side load balancing
Description
Netflix Eureka is a service registry. It provides a REST API for service instance registration management and for querying available instances. Netflix Ribbon is an IPC client that works with Eureka to load balance(client side) requests across the available service instances.
my-company-configuration-backingservice (backend)
Configuration service. Backingservice.
Description
The configuration service is a vital component of any microservices architecture. Based on the twelve-factor app methodology, configurations for your microservice applications should be stored in the environment and not in the project.
my-company-authserver-backingservice (backend)
Authorization server. Backingservice.
Description
Authorization server for issuing tokens and authorize requests.
my-company-api-gateway-backingservice (backend)
API gateway. Backingservice.
Description
Implementation of an API gateway that is the single entry point for all clients. The API gateway handles requests in one of two ways. Some requests are simply proxied/routed to the appropriate service. It handles other requests by fanning out to multiple services.
my-company-adminserver-backingservice (backend)
Admin server. Backingservice.
Description
A simple application to manage and monitor microservices.
Components (Libraries)
my-company-blog-domain (backend)
BlogPost aggregate. Command side. Spring Boot. CQRS. Eventsourcing. Axonframework.
my-company-blog-materialized-view (backend)
BlogPost. Query side - Materialized view. Spring Boot. CQRS. Eventsourcing. Axonframework.
my-company-project-domain (backend)
Project aggregate. Command side. Spring Boot. CQRS. Eventsourcing. Axonframework.
my-company-project-materialized-view (backend)
Project. Query side - Materialized view. Spring Boot. CQRS. Eventsourcing. Axonframework.
my-company-team-domain (backend)
Team aggregate. Command side. Spring Boot. CQRS. Eventsourcing. Axonframework.
my-company-team-materialized-view (backend)
Team. Query side - Materialized view. Spring Boot. CQRS. Eventsourcing. Axonframework.
my-company-common (backend)
Common and shared libraries. Domain events.
Automation
Atomist consumes your code (Java, C#, JavaScript, Scala, Python, Clojure, even Dockerfiles and Maven POMs), understanding your files, classes, variables, exceptions and more. This understanding is used to modify code directly and to connect code changes to runtime changes.
Atomis is more then the code, it understands the relationship between your code, your tools, your environments, and your running services and brings this information to where you live: chat (Slack).
my-company-automations
ChatOps. DevOps. Continuous Delivery.
Description
This Atomist project contains a command and event handlers for generating new modules/projects, editing existing projects,…
Documentation
We use Gitbook to write the documentation.
my-company-documentation
Documentation. Markdown.
Description
Gitbook documentation for the lab is saved in this repository. The documentaion is available for reading here: https://www.gitbook.com/read/book/ivans-innovation-lab/my-company
my-company-architecture-overview
Visualization. 4C model.
Description
Visualize the architecture with Structurizr (4C model)