Integration of Microservices

What is microservice

  • is relatively small
  • can be developed and deployed independently
  • Ideally, each service should have only a small set of responsibilities (SRP)
  • Opposite to monolithic application

MOSi, POSi, Weather API, Warning text service, ....

Monolith is evil and only right way is microservice, which is one process written in any language.

Monolith advantages

  • One change in one commit
  • Easier to test functionality
  • No compatibility issues and dependencies
  • Deployment and rollback is simple

Integration

  • Direct client-to-microservice communication
  • API Gateway (Facade)
  • Service discovery
  • Database per service
  • Events sourcing
  • Deployment

Direct client to microservice communication

Pro

  • Easy to implement

Cons

  • Only HTTP protocol
  • Too many connections - slow
  • Difficult to refactor microservices - merging, splitting

API Gateway

Pros

  • encapsulate internal structure
  • simplify client code
  • auth, cache

Cons

  • another component
  • development bottleneck

Types

  • One for all clients
  • One for mobile, one for desktop, one for web

MeteoGroup

  • RoadMaster - Backed for Frontend
  • Weather API (access to MOSi, POSi)

Service discovery

  • Client side service discovery

Service Discovery

Client

Service

  • Server side service discovery

Service Discovery

Load Balancer

Service

Client

Service discovery in MG

Service Discovery

(Consul)

Load Balancer

Service A

Client

Service A

manifest.toml

manifest.toml

Database per service

Service A

Database

MySQL

Service B

Database

MongoDB

Pros

  • Loosely coupled
  • Best suited database for every service

Cons

  • Business transactions are harder to implement
  • Joining data is challenging
  • Complexity - managing SQL and NonSQL databases

 

"Database per service" doesn't mean a database SERVER per service

Event sourcing

Rather than persisting an object in its current state, event sourcing instead writes an immutable log of deltas (domain events) to the database

App

Event

Event

Event Store

Materialized View

Event

Event

External

Systems

Deployment

Multiple services per Host

Service per Host

Host

Service A

Service B

Service C

Service per VM

VM

Service A

VM

Service B

Service per Container

Container

Service A

Container

Service B

Host

Deployment in MG

Service per Container

Container

Service A

Container

Service A

Docker Host

Container

Service B

  • Marathon
    • Check app (running, stopped)
  • Grafana
    • Check resources (cpu, memory, ...)
  • Kibana
    • Check application logs

Q&A

deck

By Milan Hradil

deck

  • 499