microservices pattern language (microxchg microxchg2016)

76
@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://microservices.io http://eventuate.io http://plainoldobjects.com

Upload: chris-richardson

Post on 13-Feb-2017

6.968 views

Category:

Software


2 download

TRANSCRIPT

Page 1: Microservices pattern language (microxchg microxchg2016)

@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://microservices.io http://eventuate.io http://plainoldobjects.com

Page 2: Microservices pattern language (microxchg microxchg2016)

@crichardson

Presentation goal

Why patterns and pattern languages?

A pattern language for microservices

Page 3: Microservices pattern language (microxchg microxchg2016)

@crichardson

About Chris

Page 4: Microservices pattern language (microxchg microxchg2016)

@crichardson

About Chris

Consultant and trainer focusing on modern

application architectures including microservices

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

Page 5: Microservices pattern language (microxchg microxchg2016)

@crichardson

About Chris

Founder of Eventuate, Inc Creating a platform that makes it easy for application developers to

write microservices (http://eventuate.io)

Page 6: Microservices pattern language (microxchg microxchg2016)

@crichardson

For more information

https://github.com/cer/event-sourcing-examples

http://microservices.io

http://plainoldobjects.com/

https://twitter.com/crichardson

http://eventuate.io/

Page 7: Microservices pattern language (microxchg microxchg2016)

@crichardson

Agenda

Why a pattern language for microservices?

Core patterns

Deployment patterns

Communication patterns and more

Page 8: Microservices pattern language (microxchg microxchg2016)

@crichardson

In 1986…

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

Page 9: Microservices pattern language (microxchg microxchg2016)

@crichardson

Yet almost 30 years later developers are still

passionately arguing over “silver bullets”

Page 10: Microservices pattern language (microxchg microxchg2016)

@crichardson

Popular silver bullets

Functional programming

Page 11: Microservices pattern language (microxchg microxchg2016)

@crichardson

Suck/Rock Dichotomy

Spring vs. Java EE

JavaScript vs. Java

Functional programming vs. Object-oriented

http://nealford.com/memeagora/2009/08/05/suck-rock-dichotomy.html

Containers vs. Virtual Machines

Page 12: Microservices pattern language (microxchg microxchg2016)

@crichardson

Gartner Hype Cycle

http://upload.wikimedia.org/wikipedia/commons/b/bf/Hype-Cycle-General.png

It’s awesome

It’s not awesome

Trade-offs understood

Page 13: Microservices pattern language (microxchg microxchg2016)

@crichardson

How we make decisions

Decide using

emotions

Rationalize with our intellect

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

Page 14: Microservices pattern language (microxchg microxchg2016)

@crichardson

We need a better way to discuss and think about technology

Page 15: Microservices pattern language (microxchg microxchg2016)

@crichardson

What’s a pattern?

Reusable solution to a problem

occurring in a particular context

Page 16: Microservices pattern language (microxchg microxchg2016)

@crichardson

The structure of a pattern

=

Great framework for discussing and thinking about technology

Page 17: Microservices pattern language (microxchg microxchg2016)

@crichardson

The structure of a pattern

Resulting context

aka the situation

Name

Context

Problem

Related patterns

(conflicting) issues etc to address Forces

Solution

Page 18: Microservices pattern language (microxchg microxchg2016)

@crichardson

Resulting context

Benefits

Drawbacks

Issues to resolve

Page 19: Microservices pattern language (microxchg microxchg2016)

@crichardson

Related patterns

Alternative solutions

Solutions to problems introduced by this pattern

Page 20: Microservices pattern language (microxchg microxchg2016)

Pattern languageA collection of related patterns that solve problems in a particular domain

Relationships

Pattern A results in a context that has a problem solved by Pattern B

Patterns A and B solve the same problem

Pattern A is a specialization of pattern B

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

Access to Water

Promenade

Local townhall

Intimacy gradient

Light on two sides

Page 21: Microservices pattern language (microxchg microxchg2016)

@crichardson

Meta-pattern

Problem: How to talk/reason about technology?

Solution: Use the pattern format

Benefit: More objective

Drawback: Less exciting

Context: Emotional software development culture

Related patterns: It’s awesome!

Page 22: Microservices pattern language (microxchg microxchg2016)

@crichardson

Work in

progress

http://microservices.io/

Monolithic architecture

Microservice architecture

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

Deployment

Discovery

Data

Communication

Service-per-VM

Partitioning

Messaging Remote ProcedureInvocation

Style

Core

Database per Service

Event-driven architecture

Event sourcing

MotivatingPattern

SolutionPattern

Solution A Solution B

General Specific

Page 23: Microservices pattern language (microxchg microxchg2016)

@crichardson

Agenda

Why a pattern language for microservices?

Core patterns

Deployment patterns

Communication patterns and more

Page 24: Microservices pattern language (microxchg microxchg2016)

@crichardson

Page 25: Microservices pattern language (microxchg microxchg2016)

@crichardson

Let’s imagine you are building an online store

Browser/Client

SQL Database

Review Service

Catalog Service

Recommendation Service

StoreFrontUI

Order Service

HTML

REST/JSON

Page 26: Microservices pattern language (microxchg microxchg2016)

@crichardson

Problem: what’s the deployment architecture?

Page 27: Microservices pattern language (microxchg microxchg2016)

@crichardson

Forces

Businesses must innovate faster ⇒

Develop more complex, higher-quality software faster

Page 28: Microservices pattern language (microxchg microxchg2016)

@crichardson

Forces

Developers must be productive

The code must be easy to understand and modify

Continuous deployment of applications

Developers must leverage emerging technologies (frameworks, programming languages, etc)

Deploy multiple application instances for scalability and availability

Page 29: Microservices pattern language (microxchg microxchg2016)

@crichardson

Tomcat

Pattern: Monolithic architecture

Browser/Client

WAR/EAR

MySQL Database

Review Service

Catalog Service

Recommendation Service

StoreFrontUI

Order Service

HTMLREST/JSON

Page 30: Microservices pattern language (microxchg microxchg2016)

@crichardson

Examples everywhere

Page 31: Microservices pattern language (microxchg microxchg2016)

@crichardson

Simple to ….

Develop Test

Deploy Scale

Page 32: Microservices pattern language (microxchg microxchg2016)

@crichardson

Successful applications have a habit of growing

⇒ Big, complex, monolithic

applications

Page 33: Microservices pattern language (microxchg microxchg2016)

@crichardson

Agile development and deployment becomes impossible

Page 34: Microservices pattern language (microxchg microxchg2016)

@crichardson

Intimidates developers

Page 35: Microservices pattern language (microxchg microxchg2016)

@crichardson

Obstacle to frequent deployments

Need to redeploy everything to change one component

Interrupts long running background (e.g. Quartz) jobs

Increases risk of failure

Fear of change

Updates will happen less often - really long QA cycles

e.g. Makes A/B testing UI really difficult

Eggs in one basket

Page 36: Microservices pattern language (microxchg microxchg2016)

@crichardson

Scaling the application can be challenging

Memory intensive CPU intensive

IO intensive

Conflicting Needs

Page 37: Microservices pattern language (microxchg microxchg2016)

@crichardson

Overloads your IDE and container

Slows down development

Page 38: Microservices pattern language (microxchg microxchg2016)

@crichardson

Lots of coordination and communication required

Requires lots of coordinationI want to update

the UI

But the backend is not working

yet!

Page 39: Microservices pattern language (microxchg microxchg2016)

@crichardson

Requires long-term commitment to a technology stack

Page 40: Microservices pattern language (microxchg microxchg2016)

@crichardson

Pattern: Microservice architecture

Page 41: Microservices pattern language (microxchg microxchg2016)

@crichardson

Apply functional decomposition

X axis - horizontal duplication

Z axis

- data

partit

ioning

Y axis - functional

decomposition

Scale b

y split

ting s

imilar

thing

s

Scale by splitting

different things

Page 42: Microservices pattern language (microxchg microxchg2016)

@crichardson

Catalog

Microservice architectureCatalogService

RecommendationService

ReviewService

OrderService

Browse Products UI

Checkout UI

Order management UI

Account management UI

Apply X-axis and Z-axis scaling to each service independently

Page 43: Microservices pattern language (microxchg microxchg2016)

@crichardson

Goal of partitioning:

Most changes affect only a single service ⇒

Develop and deploy independently in parallel with other changes

Page 44: Microservices pattern language (microxchg microxchg2016)

@crichardson

Goal of partitioning:

Separate components with conflicting resource

requirements ⇒

Scale more easily

Page 45: Microservices pattern language (microxchg microxchg2016)

@crichardson

http://highscalability.com/amazon-architecture

http://techblog.netflix.com/

http://www.addsimplicity.com/downloads/eBaySDForum2006-11-29.pdf

http://queue.acm.org/detail.cfm?id=1394128

~600 services

100-150 services to build a page

Examples of microservices

Page 46: Microservices pattern language (microxchg microxchg2016)

@crichardson

http://bit.ly/msexample_yelp

http://bit.ly/msexample_soundcloud

http://bit.ly/msexample_uber

Examples of microservices

Page 47: Microservices pattern language (microxchg microxchg2016)

@crichardson

BenefitsSmaller, simpler apps

Easier to understand and develop

Less jar/classpath hell - who needs OSGI?

Faster to build and deploy

Scales development: develop, deploy and scale each service independently

Improves fault isolation

Easier scaling

Eliminates long-term commitment to a single technology stack

System level architecture vs. service level architecture

Easily and safely experiment with new technologies

Page 48: Microservices pattern language (microxchg microxchg2016)

@crichardson

Drawbacks

Complexity

Page 49: Microservices pattern language (microxchg microxchg2016)

@crichardson

DrawbacksComplexity of developing a distributed system

Implementing inter-process communication

Handling partial failures

Implementing business transactions that span multiple databases (without 2PC)

Complexity of testing a distributed system

Complexity of deploying and operating a distributed system

Managing the development and deployment of features that span multiple services

Fortunately solutions exists

Page 50: Microservices pattern language (microxchg microxchg2016)

@crichardson

The benefits typically outweigh the drawbacks

for large, complex applications

Page 51: Microservices pattern language (microxchg microxchg2016)

@crichardson

Issues to address

How to deploy the services?

How do the services communicate?

How do clients of the application communicate with the services?

How to partition the system into services?

How to deal with distributed data management problems?

….

Page 52: Microservices pattern language (microxchg microxchg2016)

@crichardson

Agenda

Why a pattern language for microservices?

Core patterns

Deployment patterns

Communication patterns and more

Page 53: Microservices pattern language (microxchg microxchg2016)

@crichardson

We have applied the microservices pattern:

How to deploy the services?

Page 54: Microservices pattern language (microxchg microxchg2016)

@crichardson

ForcesServices are written using a variety of languages, frameworks, and framework versions

Each service consists of multiple service instances for throughput and availability

Building and deploying a service must be fast

Service must be deployed and scaled independently

Service instances need to be isolated

Resources consumed by a service must be constrained

Deployment must be reliable

Deployment must be cost-effective

Page 55: Microservices pattern language (microxchg microxchg2016)

@crichardson

Page 56: Microservices pattern language (microxchg microxchg2016)

@crichardson

Pattern: Multiple service instances per host

Host (Physical or VM)

Service-A Instance-1

Service-B Instance-2

Service-C Instance-2

Process WAR

OSGI bundle

Page 57: Microservices pattern language (microxchg microxchg2016)

Benefits and drawbacksBenefits

Efficient resource utilization

Fast deployment

Drawbacks

Poor/Terrible isolation

Poor visibility (with WAR/OSGI deployment)

Difficult to limit resource utilization

Risk of dependency version conflicts

Poor encapsulation of implementation technology

Page 58: Microservices pattern language (microxchg microxchg2016)

@crichardson

Pattern: Service instance per host

Page 59: Microservices pattern language (microxchg microxchg2016)

@crichardson

Pattern: Service per VM host

Service VM image

VM

Service

VM

Service

VM

Service

packaged as

deployed as

Page 60: Microservices pattern language (microxchg microxchg2016)

@crichardson

Examplehttp://techblog.netflix.com/~600 services

packer.io is a great tool

Page 61: Microservices pattern language (microxchg microxchg2016)

Benefits and drawbacksBenefits

Great isolation

Great manageability

VM encapsulates implementation technology

Leverage AWS infrastructure for Autoscaling/Load balancing

Drawbacks

Less efficient resource utilization

Slow deployment

Page 62: Microservices pattern language (microxchg microxchg2016)

@crichardson

VM

VM

Pattern: Service per Container host

Service Container image

Container

Service

Container

Service

Container

Service

packaged as

deployed as

Page 63: Microservices pattern language (microxchg microxchg2016)

@crichardson

Page 64: Microservices pattern language (microxchg microxchg2016)

@crichardson

Docker clustering solutions

https://www.dchq.io/landing/index.html

Page 65: Microservices pattern language (microxchg microxchg2016)

Benefits and drawbacksBenefits

Great isolation

Great manageability

Container encapsulates implementation technology

Efficient resource utilization

Fast deployment

Drawbacks

Immature infrastructure for deploying containers

Page 66: Microservices pattern language (microxchg microxchg2016)

@crichardson

Agenda

Why a pattern language for microservices?

Core patterns

Deployment patterns

Communication patterns and more

Page 67: Microservices pattern language (microxchg microxchg2016)

@crichardson

Communication issues

System Client

Service A

Service B

Service C

The SystemHow do clients of the

system interact with the services?

How do services within the system

interact?

Page 68: Microservices pattern language (microxchg microxchg2016)

@crichardson

How do external clients interact with the microsevices?

Page 69: Microservices pattern language (microxchg microxchg2016)

@crichardson

How do services communicate with each other?

Page 70: Microservices pattern language (microxchg microxchg2016)

@crichardson

How does a client determine the network location of a service?

Page 71: Microservices pattern language (microxchg microxchg2016)

@crichardson

What’s the database architecture?

Page 72: Microservices pattern language (microxchg microxchg2016)

Database per Service

Orders Service Customer Service

Order Database

Customer Database

Sharded SQL

NoSQL DB

Page 73: Microservices pattern language (microxchg microxchg2016)

How to solve distributed data management challenges?

How to implement transactions that span multiple services?

How to implement queries that span multiple services?

Page 74: Microservices pattern language (microxchg microxchg2016)

@crichardson

Summary: Patterns and pattern languages are a great way to …

Think about technology

Discuss technology

Apply technology

Page 75: Microservices pattern language (microxchg microxchg2016)

@crichardson

Summary: The Microservices pattern language is a great way to …

Think about microservices

Discuss microservices

Apply microservices (or not)

Page 76: Microservices pattern language (microxchg microxchg2016)

@crichardson

@crichardson [email protected]

http://eventuate.iohttp://plainoldobjects.com http://microservices.io

Questions?