55
@crichardson A pattern language for microservices Chris Richardson Founder of Eventuate.io Founder of the original CloudFoundry.com Author of POJOs in Action @crichardson [email protected] http://learnmicroservices.io Copyright © 2017. Chris Richardson Consulting, Inc. All rights reserved

Spring Days NYC - A pattern language for microservices

Embed Size (px)

Citation preview

Page 1: Spring Days NYC - A pattern language for microservices

@crichardson

A pattern language for microservices

Chris Richardson

Founder of Eventuate.io Founder of the original CloudFoundry.com Author of POJOs in Action

@crichardson [email protected] http://learnmicroservices.io

Copyright © 2017. Chris Richardson Consulting, Inc. All rights reserved

Page 2: Spring Days NYC - A pattern language for microservices

@crichardson

Presentation goal

Overview of the microservice architecture pattern language

and how to use it to architect an

application

Page 3: Spring Days NYC - A pattern language for microservices

@crichardson

About Chris

Page 4: Spring Days NYC - A pattern language for microservices

@crichardson

About Chris

Consultant and trainer focusing on modern

application architectures including microservices

(http://www.chrisrichardson.net/)

Page 5: Spring Days NYC - A pattern language for microservices

@crichardson

About Chris

Founder of a startup that is creating an open-source/SaaS platform

that simplifies the development of transactional microservices

(http://eventuate.io)

Page 6: Spring Days NYC - A pattern language for microservices

@crichardson

About Chris

http://learnmicroservices.io

Page 7: Spring Days NYC - A pattern language for microservices

@crichardson

Agenda

Why microservices?

Benefits of the microservice architecture

Microservices != silver bullet

The microservice pattern language

Applying the microservice pattern language

Page 8: Spring Days NYC - A pattern language for microservices

@crichardson

Modern software development: moving fast and not breaking things!

46x

440x

24x

5x lower

Amazon: ~0.001%

Netflix: 16 minutes

Page 9: Spring Days NYC - A pattern language for microservices

@crichardson

How to move fast and not break things?

Architecture:

Process:

Small, autonomous teams ????

DevOps/Continuous delivery/deployment

Organization:

Page 10: Spring Days NYC - A pattern language for microservices

@crichardson

The monolithic architecture

Tomcat

Browser

WAR

SQL database

HTML

REST/JSON

Client App

Simple to ….

Develop Test

Deploy Scale

Catalog Module

Reviews Module

Orders Module

StoreFront UI Module

Page 11: Spring Days NYC - A pattern language for microservices

@crichardson

But successful applications keep

growing ….

Page 12: Spring Days NYC - A pattern language for microservices

@crichardson

… and modularity breaks down…

http://www.laputan.org/mud/

“Shantytowns are squalid, sprawling slums.”

Page 13: Spring Days NYC - A pattern language for microservices

@crichardson

Monolithic hell

Agile development and deployment

becomes impossible

By John Martin, Public Domain, https://commons.wikimedia.org/w/index.php?curid=3353638

Page 14: Spring Days NYC - A pattern language for microservices

@crichardson

Monolithic hell:

Technology stack becomes increasingly obsolete BUT a rewrite is not feasible

Page 15: Spring Days NYC - A pattern language for microservices

The microservice architecture is an architectural style that

structures an application as a set of loosely coupled, services

organized around business capabilities

Page 16: Spring Days NYC - A pattern language for microservices

@crichardson

The Microservice architecture tackles complexity through

modularization

Improved scalability is secondary

*

Page 17: Spring Days NYC - A pattern language for microservices

@crichardson

Microservice architecture

Browser

Mobile Device

Content Router

API Gateway

Catalog Service

Review Service

Order Service

… Service

Catalog Database

Review Database

Order Database

… Database

HTTP /HTML

REST

REST

Browse & Search WebApp

Product Detail WebApp

….

Page 18: Spring Days NYC - A pattern language for microservices

@crichardson

Agenda

Why microservices?

Benefits of the microservice architecture

Microservices != silver bullet

The microservice pattern language

Applying the microservice pattern language

Page 19: Spring Days NYC - A pattern language for microservices

@crichardson

Microservices enable continuous delivery/deployment

Process: Continuous delivery/deployment

Organization:Small, agile, autonomous,

cross functional teams

Architecture: Microservice architecture

Enables

Enables Enables

SuccessfulSoftware

Development

Services =

testability and

deployability

Teams own services

Page 20: Spring Days NYC - A pattern language for microservices

@crichardson

Smaller, simpler applications

Easier to understand, develop and test

Less jar/classpath hell - who needs OSGI?

Faster to build, test and deploy

Reduced startup time - improves MTTR

Page 21: Spring Days NYC - A pattern language for microservices

Scales development: develop, deploy and scale each service independently

Small, autonomous teams

Clearly defined responsibilities

Catalog Service

Review Service

Order Service

… Service

Catalog Team

Review Team

Order Team

… Team

Responsible for

Page 22: Spring Days NYC - A pattern language for microservices

@crichardson

Easier to scale

Page 23: Spring Days NYC - A pattern language for microservices

@crichardson

Improves fault isolation

Page 24: Spring Days NYC - A pattern language for microservices

@crichardson

Easily evolve your technology stack

... and fail safely

Page 25: Spring Days NYC - A pattern language for microservices

@crichardson

Agenda

Why microservices?

Benefits of the microservice architecture

Microservices != silver bullet

The microservice pattern language

Applying the microservice pattern language

Page 26: Spring Days NYC - A pattern language for microservices

@crichardson

No silver bullets

http://en.wikipedia.org/wiki/Fred_Brooks

Page 27: Spring Days NYC - A pattern language for microservices

@crichardson

Complexity

http://highscalability.com/blog/2014/4/8/microservices-not-a-free-lunch.html

Page 28: Spring Days NYC - A pattern language for microservices

@crichardson

Complexity of developing a distributed system

Page 29: Spring Days NYC - A pattern language for microservices

@crichardson

Multiple databases &

Transaction managementMust use event-driven eventual consistency

Page 30: Spring Days NYC - A pattern language for microservices

@crichardson

Complexity of testing a distributed system

Page 31: Spring Days NYC - A pattern language for microservices

@crichardson

Complexity of deploying and operating a distributed system

You need a lot of automation: VM/container

orchestration or PaaS

Page 32: Spring Days NYC - A pattern language for microservices

@crichardson

Developing and deploying features that span multiple services requires careful coordination

Page 33: Spring Days NYC - A pattern language for microservices

@crichardson

Agenda

Why microservices?

Benefits of the microservice architecture

Microservices != silver bullet

The microservice pattern language

Applying the microservice pattern language

Page 34: Spring Days NYC - A pattern language for microservices

@crichardson

Are microservices a good fit for my application?

Page 35: Spring Days NYC - A pattern language for microservices

@crichardson

When using microservices:How to decompose an application into services?

How to deploy an application’s services?How to handle cross cutting concerns?

Which communication mechanisms to use?

How do external clients communicate with the services?

How does a client discover the network location of a service instance?

How to prevent a network or service failure from cascading to other services?

How to maintain data consistency and implement queries?

How to make testing easier?

How to understand the behavior of an application and troubleshoot problems?

How to implement a UI screen or page that displays data from multiple services?

Page 36: Spring Days NYC - A pattern language for microservices

@crichardson

Microservice pattern language =

collection of patterns that solve these

architecture, design, development and operational problems

Page 37: Spring Days NYC - A pattern language for microservices

@crichardson

What’s a pattern?

Reusable solution to a problem

occurring in a particular context

Page 38: Spring Days NYC - A pattern language for microservices

@crichardson

The structure of a pattern encourages objectivity

Resulting context

The situationName

Context

Problem

Related patterns

The issues that must be addressed

Forces

Solution Benefits Drawbacks

IssuesPatterns that are alternative solutions

Patterns that address the issues

Page 39: Spring Days NYC - A pattern language for microservices

@crichardson

Microservice architecture pattern

Context Developing large, complex architecture

Problem What’s the runtime architecture?

Benefits Faster development Easy adopt new technologies

Drawbacks Complexity of a distributed system

Issues Decomposition Distributed system issues: IPC, discovery, …

Alternative patterns Monolithic architecture

Successor patterns Service Registry, API Gateway, …

Page 40: Spring Days NYC - A pattern language for microservices

@crichardsonMicroservice patterns

Communication patterns

Core

Cross-cutting concerns Security

Deployment

Maintaining data consistency

Database architecture

External API

Reliability

Discovery

Communication style

Testing

Observability

UI

Decomposition

API gateway

Client-side discovery

Server-side discovery

Service registry

Self registration

3rd party registration

Multiple Services per host

Single Service per Host

Service-per-Container

Service-per-VM

Messaging Remote ProcedureInvocation

Database per Service

Event-driven architectureShared

database

Microservice Chassis

Backend for front end

Event sourcing

Transaction log tailing

Database triggers

Application events

Monolithic architecture

Microservice architecture

CQRS

MotivatingPattern

SolutionPattern

Solution A Solution B

General Specific

Serverless deployment

Circuit BreakerAccess Token

Domain-specific

Externalized configuration

Service Integration Contract Test

Service Component Test

Exception tracking

Distributed tracing

Audit logging Application metrics

Log aggregation

Health check API

Service deployment platform

Server-side page fragment

composition

Client-side UI composition

Decompose bybusiness capability

Decompose bysubdomain

Application patterns

Infrastructure patterns

Application Infrastructure patterns

Microservices pattern language: http://microservices.io

Page 41: Spring Days NYC - A pattern language for microservices

@crichardson

Agenda

Why microservices?

Benefits of the microservice architecture

Microservices != silver bullet

The microservice pattern language

Applying the microservice pattern language

Page 42: Spring Days NYC - A pattern language for microservices

@crichardson

The pattern language guides you when developing an architecture

What architectural decisions you must make

For each decision:

Available options

Trade-offs of each option

Page 43: Spring Days NYC - A pattern language for microservices

@crichardson

Key patterns

Page 44: Spring Days NYC - A pattern language for microservices

Issue: What’s the deployment architecture?Forces

Maintainability

Deployability

Testability

Extensibility

Monolithic architecture

Microservice architecture

Single deployable/executable OR

Tightly coupled services

Multiple loosely coupled services

Page 45: Spring Days NYC - A pattern language for microservices

Issue: How to decompose an application into services?

Forces

Stability

Cohesive

Loosely coupled

Not too large

Decompose bybusiness capability

Decompose bysubdomain

Organize around business capabilities

Organize around DDD subdomains

Page 46: Spring Days NYC - A pattern language for microservices

@crichardson

Issue: how to maintain data consistency?

Event-driven architecture

Event sourcing

Transaction log tailing

Database triggers

Application events

Context

• Each service has its own database

• Data is private to a service

Forces

Transactional data consistency must be maintained across multiple services

2PC is not an option

Page 47: Spring Days NYC - A pattern language for microservices

@crichardson

Issue: how to perform queries?

CQRS

Context

Each service has its own database

Forces

Queries must join data from multiple services

Data is private to a serviceMaintain query views by subscribing to events

Page 48: Spring Days NYC - A pattern language for microservices

@crichardson

Issue: How do services communicate?

Messaging Remote ProcedureInvocation

Domain-specific

Forces

Services must communicate

Usually processes on different machines

Page 49: Spring Days NYC - A pattern language for microservices

@crichardson

The rest are generic technical architecture patterns

= Undifferentiated heavy lifting!

Page 50: Spring Days NYC - A pattern language for microservices

@crichardson

Issue: How to handle cross cutting concerns?

Microservice Chassis

Forces

Every service must implement logging; externalize configuration; health check endpoint; metrics; …

Page 51: Spring Days NYC - A pattern language for microservices

Issue: How to deploy an application’s services?

Multiple Services per host

Single Service per Host

Service-per-Container

Service-per-VM

Serverless deployment

Service deployment platform

Forces

Multiple languages

Isolated

Constrained

Monitor-able

Reliable

Efficient

Page 52: Spring Days NYC - A pattern language for microservices

@crichardson

Issue: How to discover a service instance’s network location?

Client-side discovery

Server-side discovery

Service registry

Self registration

3rd party registration

Forces

Client needs IP address of service instance

Dynamic IP addresses

Dynamically provisioned instances

Page 53: Spring Days NYC - A pattern language for microservices

@crichardson

Issue: how to monitor the behavior of your application?

Exception tracking

Distributed tracing

Audit logging Application metrics

Log aggregation

Health check API

Page 54: Spring Days NYC - A pattern language for microservices

@crichardson

Summary

The monolithic architecture is a good choice for small/simple applications

Use the microservice architecture for large/complex applications

Microservice architecture != silver bullet

Use the microservice architecture pattern language to guide your decision making

Page 55: Spring Days NYC - A pattern language for microservices

@crichardson

@crichardson [email protected]

http://learnmicroservices.io

Thank you!