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.

Dependiencies - tree

my-company-monolith (backend) CircleCI

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-angular-fe (frontend) CircleCI

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)


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.

Dependiencies - tree

my-company-blog-domain-microservice (backend) CircleCI

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) CircleCI

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) CircleCI

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) CircleCI

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) CircleCI

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) CircleCI

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) CircleCI

Authorization server. Backingservice.

Description

Authorization server for issuing tokens and authorize requests.

my-company-api-gateway-backingservice (backend) CircleCI

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) CircleCI

Admin server. Backingservice.

Description

A simple application to manage and monitor microservices.


Components (Libraries)

my-company-blog-domain (backend) CircleCI release

BlogPost aggregate. Command side. Spring Boot. CQRS. Eventsourcing. Axonframework.

my-company-blog-materialized-view (backend) CircleCI release

BlogPost. Query side - Materialized view. Spring Boot. CQRS. Eventsourcing. Axonframework.

my-company-project-domain (backend) CircleCI release

Project aggregate. Command side. Spring Boot. CQRS. Eventsourcing. Axonframework.

my-company-project-materialized-view (backend) CircleCI release

Project. Query side - Materialized view. Spring Boot. CQRS. Eventsourcing. Axonframework.

my-company-team-domain (backend) CircleCI release

Team aggregate. Command side. Spring Boot. CQRS. Eventsourcing. Axonframework.

my-company-team-materialized-view (backend) CircleCI release

Team. Query side - Materialized view. Spring Boot. CQRS. Eventsourcing. Axonframework.

my-company-common (backend) CircleCI release

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 release

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)