Microservices Infrastructure

External API Level

This level is a composition of APIs that exposes the services to external consumers.

It is merely a technical wrapper for the real services implemented at the Core Services Layer. This level translates those services to the APIs provided to the external systems

Core Services Level

This level implements the services, with all the business rules and core entities

Integration Services

Integration services connect to Backend Systems and Corporate Databases using extensions or consuming APIs.

Applications Infrastructure

Applications or end user layer

OutSystems applications consume the services and web blocks provided by the core and library services layers.

Extended Services

Extends the cores services, caching data in local entities and reusable Web Blocks to promote RAD capabilities.

Integration Services

This is an extra layer that I’ve added to the model, which is consumed by Extended Services. It consumes APIs provided by the microservices or external systems and provides façade server actions. Using a façade ensures that the consumers of the façade server action are independent of the consumed service contract. Thus lowering the impact of a version upgrade or a switch to a completely new service.

Service Façade

A service façade decouples the core service logic from the service contract thus enabling loose coupling. The introduction of the façade component introduces design effort and performance overhead.

Example OSMDb

For the example we modified the OutSystems Movie Database application to implement the architecture.

The Cinema entity is removed from OSMDb Core and replaced by a MovieTheater entity in a separate MovieTheater Core layer (MovieTheater_CS)

The Movie entity is renamed to Film and moved to the Film_CS and exposed by the Film_API

The consumption to the TheMovieDb api is moved to a TheMovieDb_IS eSpace.

The application is refactored to implement the microservices architecture

The goal of this modifications is to illustrate how you can create a loosely coupled architecture by decoupling the Core and Integration Services layers from the front end layers. Thus minimizing the impact of changes to these lower layers.

The picture below shows the resulting application landscape which we will describe in the next sections.