Decompose that WAR! A pattern language for microservices Chris - - PowerPoint PPT Presentation

decompose that war a pattern language for microservices
SMART_READER_LITE
LIVE PREVIEW

Decompose that WAR! A pattern language for microservices Chris - - PowerPoint PPT Presentation

Decompose that WAR! A pattern language for microservices Chris Richardson Author of POJOs in Action Founder of the original CloudFoundry.com @crichardson chris@chrisrichardson.net http://plainoldobjects.com http://microservices.io


slide-1
SLIDE 1

@crichardson

Decompose that WAR! A pattern language for microservices

Chris Richardson

Author of POJOs in Action Founder of the original CloudFoundry.com @crichardson chris@chrisrichardson.net http://plainoldobjects.com http://microservices.io

slide-2
SLIDE 2

@crichardson

Presentation goal

Why patterns and pattern languages? A pattern language for microservices

slide-3
SLIDE 3

@crichardson

About Chris

slide-4
SLIDE 4

@crichardson

About Chris

Founder of a startup that’s creating a platform for developing event-driven microservices

slide-5
SLIDE 5

@crichardson

For more information

https://github.com/cer/event-sourcing-examples http://microservices.io http://plainoldobjects.com/ https://twitter.com/crichardson

slide-6
SLIDE 6

@crichardson

Agenda

Why a pattern language for microservices? Core patterns Deployment patterns Communication patterns

slide-7
SLIDE 7

@crichardson

In 1986…

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

slide-8
SLIDE 8

@crichardson

Yet almost 30 years later developers are still passionately arguing over “silver bullets”

slide-9
SLIDE 9

@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

slide-10
SLIDE 10

@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

slide-11
SLIDE 11

@crichardson

How we make decisions

Decide using emotions Rationalize with

  • ur intellect

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

slide-12
SLIDE 12

@crichardson

We need a better way to discuss and think about technology

slide-13
SLIDE 13

@crichardson

What’s a pattern?

Reusable solution to a problem

  • ccurring

in a particular context

slide-14
SLIDE 14

@crichardson

The structure of a pattern = Great framework for discussing and thinking about technology

slide-15
SLIDE 15

@crichardson

The structure of a pattern

Resulting context

aka the situation

Name Context Problem

Related patterns

(conflicting) issues etc to address

Forces Solution

slide-16
SLIDE 16

@crichardson

Resulting context

Benefits Drawbacks Issues to resolve

slide-17
SLIDE 17

@crichardson

Related patterns

Alternative solutions Solutions to problems introduced by this pattern

slide-18
SLIDE 18

Pattern language

A 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

slide-19
SLIDE 19

@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!

slide-20
SLIDE 20

@crichardson

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 Core Communication Service-per-VM Partitioning Messaging Remote Procedure Invocation Style Motivating Pattern Solution Pattern Solution A Solution B General Specific

Work in progress

slide-21
SLIDE 21

@crichardson

Agenda

Why a pattern language for microservices? Core patterns Deployment patterns Communication patterns

slide-22
SLIDE 22

@crichardson

slide-23
SLIDE 23

@crichardson

Let’s imagine you are building an online store

Browser/ Client SQL Database

Review Service Product Info Service

Recommendation Service

StoreFrontUI Order Service HTML REST/JSON

slide-24
SLIDE 24

@crichardson

Problem: what’s the deployment architecture?

slide-25
SLIDE 25

@crichardson

Forces

There is a team of developers that must be productive The application must be easy to understand and modify Do continuous deployment Run multiple instances for scalability and availability Use emerging technologies (frameworks, programming languages, etc)

slide-26
SLIDE 26

@crichardson

Tomcat

Pattern: Monolithic architecture

Browser/ Client

WAR/EAR

MySQL Database

Review Service Product Info Service

Recommendation Service

StoreFrontUI Order Service HTML REST/JSON

develop test deploy

Simple to

scale

slide-27
SLIDE 27

@crichardson

Examples everywhere

slide-28
SLIDE 28

@crichardson

But when the application is large …

slide-29
SLIDE 29

@crichardson

Intimidates developers

slide-30
SLIDE 30

@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

  • ne basket
slide-31
SLIDE 31

@crichardson

Overloads your IDE and container

Slows down development

slide-32
SLIDE 32

@crichardson

Lots of coordination and communication required

Obstacle to scaling development

I want to update the UI But the backend is not working yet!

slide-33
SLIDE 33

@crichardson

Requires long-term commitment to a technology stack

slide-34
SLIDE 34

@crichardson

Pattern: Microservice architecture

slide-35
SLIDE 35

@crichardson

Apply functional decomposition

X axis

  • horizontal duplication

Z a x i s

  • d

a t a p a r t i t i

  • n

i n g Y axis - functional decomposition S c a l e b y s p l i t t i n g s i m i l a r t h i n g s Scale by splitting different things

slide-36
SLIDE 36

@crichardson

Product Info

Microservice architecture

Product Info Service Recommendation Service Review Service Order Service Browse Products UI Checkout UI Order management UI Account management UI

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

slide-37
SLIDE 37

@crichardson

Examples

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

slide-38
SLIDE 38

@crichardson

Benefits

Smaller, 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 Eliminates long-term commitment to a single technology stack System level architecture vs. service level architecture Easily and safely experiment with new technologies

slide-39
SLIDE 39

@crichardson

Drawbacks

Complexity 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

slide-40
SLIDE 40

@crichardson

The benefits typically

  • utweigh the drawbacks

for large, complex applications

slide-41
SLIDE 41

@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? ….

slide-42
SLIDE 42

@crichardson

Agenda

Why a pattern language for microservices? Core patterns Deployment patterns Communication patterns

slide-43
SLIDE 43

@crichardson

We have applied the microservices pattern: How to deploy the services?

slide-44
SLIDE 44

@crichardson

Forces

Services 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 cost-effective

slide-45
SLIDE 45

@crichardson

slide-46
SLIDE 46

@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

slide-47
SLIDE 47

Benefits and drawbacks

Benefits 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

slide-48
SLIDE 48

@crichardson

Pattern: Service instance per host

slide-49
SLIDE 49

@crichardson

Pattern: Service per VM host

Service VM image VM Service VM Service VM Service

packaged as deployed as

slide-50
SLIDE 50

@crichardson

Example

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

packer.io is a great tool

slide-51
SLIDE 51

Benefits and drawbacks

Benefits Great isolation Great manageability VM encapsulates implementation technology Leverage AWS infrastructure for Autoscaling/Load balancing
 Drawbacks Less efficient resource utilization Slow deployment

slide-52
SLIDE 52

@crichardson

VM VM

Pattern: Service per Container host

Service Container image Container Service Container Service Container Service

packaged as deployed as

slide-53
SLIDE 53

@crichardson

Examples

slide-54
SLIDE 54

Benefits and drawbacks

Benefits Great isolation Great manageability Container encapsulates implementation technology Efficient resource utilization Fast deployment Drawbacks Immature infrastructure for deploying containers

slide-55
SLIDE 55

@crichardson

Agenda

Why a pattern language for microservices? Core patterns Deployment patterns Communication patterns

slide-56
SLIDE 56

@crichardson

Communication issues

System Client Service A Service B Service C

The System

How do clients of the system interact with the services? How do services within the system interact?

slide-57
SLIDE 57

@crichardson

slide-58
SLIDE 58

@crichardson

How do clients of the system interact with the services?

slide-59
SLIDE 59

@crichardson

Forces

Mismatch between the fine-grained microservices and needs

  • f the clients

Different clients need different data LAN vs. WAN vs. Mobile network performance The number of service instances and their locations (host +port) is changes dynamically Partitioning into services can change over time and should be hidden from clients

slide-60
SLIDE 60

@crichardson

Directly connecting the front-end to the backend

Model View Controller

Product Info service Recommendation Service Review service

REST REST Thrift

Model View Controller

Browser/Native App Traditional server-side web application

Chatty API Web unfriendly protocols What’s the host/port??

slide-61
SLIDE 61

@crichardson

Pattern: API gateway

Model View Controller

Product Info service Recommendation Service Review service

REST REST Thrift API Gateway

Model View Controller

Browser/Native App

Single entry point Client specific APIs Protocol translation

Traditional server-side web application

slide-62
SLIDE 62

@crichardson

Example: Netflix API

http://techblog.netflix.com/2013/01/optimizing-netflix-api.html

Device specific end points

slide-63
SLIDE 63

@crichardson

Benefits of the API gateway

Insulates the clients from the partitioning Insulates the clients from the problem of discovery Provides the optimal API for each client Reduces the number of requests/roundtrips Simplifies the client by moving logic for calling multiple services from the client to API gateway Gateway translates between web-unfriendly protocols and HTTP/WebSockets

slide-64
SLIDE 64

@crichardson

Drawbacks of the API gateway

Increased complexity - the API gateway is yet another highly available component that must be developed, deployed and managed Increased response time due to the additional network hop through the API gateway

slide-65
SLIDE 65

@crichardson

slide-66
SLIDE 66

Benefits and drawbacks of messaging

Benefits Decouples client from services Message broker buffers messages Supports a variety of communication patterns
 Drawbacks Additional complexity of message broker Request/reply-style communication is more complex Client needs to discover location of message broker

slide-67
SLIDE 67

Benefits and drawbacks of RPC

Benefits Simple and familiar Request/reply is easy No intermediate broker Drawbacks Only supports request/ reply Service must be available Client needs to discover locations of service instances

slide-68
SLIDE 68

@crichardson

slide-69
SLIDE 69

@crichardson

The problem of discovery

Service Client Service Instance A Service Instance B Service Instance C

?

10.4.3.1:8756 10.4.3.99:4545 10.4.3.20:333

Client or API gateway Dynamically changing Service Instance A Service Instance B Service Instance C

10.4.3.1:8756 10.4.3.99:4545 10.4.3.20:333

How to load balance? Dynamically assigned

slide-70
SLIDE 70

@crichardson

Pattern: Client-side discovery

Service Client

Registry- aware HTTP Client

Service Registry Service Instance A Service Instance B Service Instance C

10.4.3.1:8756 10.4.3.99:4545 10.4.3.20:333

register query request load balance

slide-71
SLIDE 71

@crichardson

Example: Netflix Eureka and Ribbon

https://github.com/Netflix/eureka/wiki/Eureka-at-a-glance https://github.com/Netflix/ribbon

slide-72
SLIDE 72

Benefits and drawbacks

Benefits Flexible, application-specific load balancing Fewer network hops and moving parts compared to Server-side discovery
 Drawbacks Couples the client to the Service Registry Need implement client-side discovery and load balancing logic in multiple languages/ frameworks Service Registry is yet another moving part to setup and operate - highly available

slide-73
SLIDE 73

@crichardson

Pattern: Server-side discovery

Service Client

Router

Service Registry Service Instance A Service Instance B Service Instance C

10.4.3.1:8756 10.4.3.99:4545 10.4.3.20:333

register query request

request load balance

slide-74
SLIDE 74

@crichardson

Example

http://docs.aws.amazon.com/ElasticLoadBalancing/latest/ DeveloperGuide/vpc-loadbalancer-types.html

Internal ELB Internal ELB Public ELB

slide-75
SLIDE 75

Benefits and drawbacks

Benefits Simpler client code Built-in to some cloud/ container environments, e.g. AWS ELB, Kubernetes, Marathon Drawbacks Limited to (generic) load balancing algorithms provided by router More network hops Router and Service Registry is yet another moving part to setup and operate - highly available

slide-76
SLIDE 76

@crichardson

The problem of registration

Service Registry Service Instance A Service Instance B Service Instance C

10.4.3.1:8756 10.4.3.99:4545 10.4.3.20:333

register

How does registration happen?

slide-77
SLIDE 77

@crichardson

slide-78
SLIDE 78

@crichardson

Forces

Service instances must be registered with the service registry on startup unregistered on shutdown Service instances that crash must be unregistered from the service registry Service instances that are running but incapable of handling requests must be unregistered from the service registry

slide-79
SLIDE 79

@crichardson

Pattern: Self registration

Service Registry Service Instance A

10.4.3.1:8756

register heart-beat unregister

slide-80
SLIDE 80

@crichardson

Examples

Netflix Eureka Java client API for registering/unregistering with Eureka server Specify state: STARTING, UP , DOWN, OUT_OF_SERVICE Register a periodically invoked health check callback Zookeeper-based Java applications Service = znode Service instance = ephemeral child of znode

slide-81
SLIDE 81

Benefits and drawbacks

Benefits Simple - no extra components Service can implement a more sophisticated state model Drawbacks Couples the service to service registry Must implement registration logic in multiple languages/ frameworks Service might lack the self- awareness to unregister itself

slide-82
SLIDE 82

@crichardson

Pattern: 3rd party registration

Service Registry Service Instance A

10.4.3.1:8756

register heart-beat unregister

Registrar

healthcheck

slide-83
SLIDE 83

@crichardson

Examples

AWS Autoscaling groups Automatically register/unregister EC2 instance with ELB Registrator Registers and unregisters Docker containers with service registry Kubernetes/Marathon Automatically register/unregister services Netflix Eureka Prana Sidecar application for non-Java clients Registers/unregisters service with Eureka Performs health checks

slide-84
SLIDE 84

Benefits and drawbacks

Benefits Simpler service Registrar can perform health checks Some cloud/container environments provide a Registrar Drawbacks Registrar is yet another component that must be setup/operated. Must be highly available

slide-85
SLIDE 85

@crichardson

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

Think about technology Discuss technology Apply technology

slide-86
SLIDE 86

@crichardson

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

Think about microservices Discuss microservices Apply microservices (or not)

slide-87
SLIDE 87

@crichardson

@crichardson chris@chrisrichardson.net http://plainoldobjects.com http://microservices.io