microservices for java architects (indianapolis, april 15, 2015)

50
Micro Services for Java Architects Given by Derek C. Ashmore April 15, 2015 ©2015 Derek C. Ashmore, All Rights Reserved 1

Upload: derek-ashmore

Post on 17-Jul-2015

1.113 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Microservices for Java Architects (Indianapolis, April 15, 2015)

Micro Services for Java Architects

Given by Derek C. Ashmore

April 15, 2015

©2015 Derek C. Ashmore, All Rights Reserved 1

Page 2: Microservices for Java Architects (Indianapolis, April 15, 2015)

Who am I?

• Professional Geek since 1987

• Java/J2EE/Java EE since 1999

• Roles include: • Developer

• Architect

• Project Manager

• DBA

• System Admin

©2015 Derek C. Ashmore, All Rights Reserved 2

Page 3: Microservices for Java Architects (Indianapolis, April 15, 2015)

Discussion Resources

• This slide deck – http://www.slideshare.net/derekashmore

• Sample code on my Github – https://github.com/Derek-Ashmore/

• Sample Java Microservice (Moneta) – https://github.com/Derek-Ashmore/moneta

• Slide deck has hyper-links!

– Don’t bother writing down URLs

©2015 Derek C. Ashmore, All Rights Reserved 3

Page 4: Microservices for Java Architects (Indianapolis, April 15, 2015)

Agenda

The “What” and “Why” of micro services

Design Considerations

and Patterns

Packaging Options

Cross-cutting concerns

When to use micro services

Summary / Q&A

©2015 Derek C. Ashmore, All Rights Reserved 4

Page 5: Microservices for Java Architects (Indianapolis, April 15, 2015)

What are Micro services?

• No concrete definition

• Common micro service traits

– Single functional purpose

• Most/all changes only impact one service

• Not dependent on execution context – “loosely coupled”

– Independent process/jvm

– Standard Interface (typically Web Service/REST)

– Analogy: Stereo system, Linux utilities

©2015 Derek C. Ashmore, All Rights Reserved 5

Page 6: Microservices for Java Architects (Indianapolis, April 15, 2015)

Traditional Java EE Application Architecture

• Like a layer cake

• Highly cohesive

• Defined dependencies

• Deployed as one unit (war/ear)

• Limited Scalability

• Code Size

©2015 Derek C. Ashmore, All Rights Reserved 6

Page 7: Microservices for Java Architects (Indianapolis, April 15, 2015)

What is a Monolith?

• Hard to change – QA test cycles are long

– Change causes unintended consequences

• Hard to onboard new developers

• Married to your technical stack

• Harder to diagnose bottlenecks and memory issues

©2015 Derek C. Ashmore, All Rights Reserved 7

Page 8: Microservices for Java Architects (Indianapolis, April 15, 2015)

Micro services organize by domain

• Silo by business competency

• Divide and Conquer

• How to divide is the hard part

©2015 Derek C. Ashmore, All Rights Reserved 8

Page 9: Microservices for Java Architects (Indianapolis, April 15, 2015)

Micro services follow the Org Chart

• Conway’s Law

– Systems copy the structure of the organizations that build them

• Why?

– Corps need one manager in charge

– Reduces inter-group conflict

©2015 Derek C. Ashmore, All Rights Reserved 9

Page 10: Microservices for Java Architects (Indianapolis, April 15, 2015)

Refactoring into Micro Services

• Large benefits to unified user interface

• Databases introduce unwanted coupling between services

©2015 Derek C. Ashmore, All Rights Reserved 10

Page 11: Microservices for Java Architects (Indianapolis, April 15, 2015)

Refactoring further

• Databases physically separated

• What to do with common data needs?

• Service call or

• Data copy

©2015 Derek C. Ashmore, All Rights Reserved 11

Page 12: Microservices for Java Architects (Indianapolis, April 15, 2015)

No Lock-in • Platform agnostic

• Fewer dependency conflicts

• Still have cross-cutting concerns

• “Toll” for first app

• Still have support concerns

• Others need to be able to support your work

12 ©2015 Derek C. Ashmore, All Rights Reserved

Page 13: Microservices for Java Architects (Indianapolis, April 15, 2015)

Easier Management / Higher Throughput

• Easier to manage large numbers of developers – Concentrate on

intelligently drawing service boundaries

– Manage/enforce service contracts

• Each service team works independently

• Team independence leads to higher development throughput

©2015 Derek C. Ashmore, All Rights Reserved 13

Page 14: Microservices for Java Architects (Indianapolis, April 15, 2015)

Isn’t this SOA?

• Yes – More or less

• No concrete definitions

• SOA == dumb endpoints and smart routes – ESB routes using Mule, Camel, etc.

– Transformations en route

• MS == dumb routes and smart end-points – Simple routes

• Usually REST or Soap calls via http(s)

• Persistent queue route at it’s most complex

• Analogy: Electrical supply for Stereo

©2015 Derek C. Ashmore, All Rights Reserved 14

Page 15: Microservices for Java Architects (Indianapolis, April 15, 2015)

Agenda

The “What” and “Why” of micro services

Design Considerations

and Patterns

Packaging Options

Cross-cutting concerns

When to use micro services

Summary / Q&A

©2015 Derek C. Ashmore, All Rights Reserved 15

Page 16: Microservices for Java Architects (Indianapolis, April 15, 2015)

Design considerations

• Service Boundaries (gerrymandering)

• Service call Failure / Unavailability

• Data Integrity

• Performance

©2015 Derek C. Ashmore, All Rights Reserved 16

Page 17: Microservices for Java Architects (Indianapolis, April 15, 2015)

Service Boundaries

• Core Services – Services responsible for maintaining a specific business area data – Usually named after Nouns

• Service is a system of record for a <blank> – Student, Course, Classroom, etc.

• Process Services – Services responsible for performing single complex tasks – Usually represents an Action or Process

• Service is responsible for processing <blank> – Student applications, Debt collection, etc.

– These services rely on core services

• Partitioning is an art – Too few same drawbacks as traditional architecture – Too many excessive network hops

©2015 Derek C. Ashmore, All Rights Reserved 17

Page 18: Microservices for Java Architects (Indianapolis, April 15, 2015)

Boundary Sanity Check

• Verbalize a mission statement in one sentence in business terms

– Examples

• This service is the system of record for Student information

• This service registers students for classes

• This service suspends students

• This service records student payments

• This service produces official transcripts

©2015 Derek C. Ashmore, All Rights Reserved 18

Page 19: Microservices for Java Architects (Indianapolis, April 15, 2015)

Micro services are not about size

©2015 Derek C. Ashmore, All Rights Reserved 19

….. Micro services are about having a single business purpose!

Page 20: Microservices for Java Architects (Indianapolis, April 15, 2015)

Designing for Failure

• Dependent services could be down

– Minimize human intervention

– Fail sooner rather than later

– Horizontal scaling / clustering is your first line of defense

– Coding patterns can help as a backup

• Common Patterns:

– Retry

– Circuit Breaker

– Dispatch via Messaging

©2015 Derek C. Ashmore, All Rights Reserved 20

Page 21: Microservices for Java Architects (Indianapolis, April 15, 2015)

Retry Pattern

©2015 Derek C. Ashmore, All Rights Reserved 21

• Best for asynchronous tasks • Limit the number of tries • Use sleep interval between tries • Only addresses temporary outages • Sample Retry Pattern implementation here. • Tooling Support:

– Apache CXF supports Retry – Spring Batch RetryTemplate – Apache HttpClient (Example here)

Page 22: Microservices for Java Architects (Indianapolis, April 15, 2015)

Circuit Breaker

©2015 Derek C. Ashmore, All Rights Reserved 22

Page 23: Microservices for Java Architects (Indianapolis, April 15, 2015)

Circuit Breaker (continued)

• Objective: Error out sooner – Conserves resources – Automatically “recovers” after a time period

• Modeled after home circuit • Works on thresholds

– Number of errors required to trip circuit – Amount of time required to attempt retry

• No formal tooling support for this pattern • Best embedded in interface clients / delegates • More information here. • Sample Circuit implementation here.

©2015 Derek C. Ashmore, All Rights Reserved 23

Page 24: Microservices for Java Architects (Indianapolis, April 15, 2015)

Dispatch via Messaging

©2015 Derek C. Ashmore, All Rights Reserved 24

• Place work instruction on persistent queue • If receivers are down, work stacks in queue • Work throttled by number of receivers • Queue can be JMS or AMQP • Tooling Support:

– JMS Api (easy API – many use natively) – Spring JMSTemplate or RabbitTemplate (producer)

Page 25: Microservices for Java Architects (Indianapolis, April 15, 2015)

Designing for Performance

• More network traffic

– Make services course-grained

– User Interfaces need a general manager

– Horizontal or Vertical Scaling helps

• Common Patterns:

– Back-ends for Front-ends (a.k.a. API Gateway)

– Dispatch via Messaging

– Expiring Cache

©2015 Derek C. Ashmore, All Rights Reserved 25

Page 26: Microservices for Java Architects (Indianapolis, April 15, 2015)

Back-ends for Front-ends

©2015 Derek C. Ashmore, All Rights Reserved 26

Page 27: Microservices for Java Architects (Indianapolis, April 15, 2015)

Back-ends for Front-ends (continued)

• Consolidates service calls for the browser

– Enhances performance

• Open web often not as performant as local LAN

• Also known as “API Gateway”

• Implications

– Don’t expose micro services directly to the browser

©2015 Derek C. Ashmore, All Rights Reserved 27

Page 28: Microservices for Java Architects (Indianapolis, April 15, 2015)

Expiring Cache

©2015 Derek C. Ashmore, All Rights Reserved 28

Page 29: Microservices for Java Architects (Indianapolis, April 15, 2015)

Expiring Cache (continued)

• Look up data once and cache it – Evict data from the cache after a defined time period – Sometimes known as “Cache Aside” – Reduces network calls for data – Trades memory for speed – More information here

• When to use – Only use with static data – Different clustered nodes “could” have different data for a short

time

• Tooling Support: – I recommend Google Guava – EHCache, Gemfire, and other tools available

©2015 Derek C. Ashmore, All Rights Reserved 29

Page 30: Microservices for Java Architects (Indianapolis, April 15, 2015)

Designing for Integrity

• Services are context independent

– Have no knowledge of how/when they are executed

• One service == One Transaction

– Two-phase commits/rollbacks are a much larger problem

• Common Patterns:

– Custom Rollback • Write your own reversing transaction

©2015 Derek C. Ashmore, All Rights Reserved 30

Page 31: Microservices for Java Architects (Indianapolis, April 15, 2015)

Custom Rollback

©2015 Derek C. Ashmore, All Rights Reserved 31

Page 32: Microservices for Java Architects (Indianapolis, April 15, 2015)

Custom Rollback (continued)

• Reverses a transaction previously posted

• Only use this for multi-service transactions

– Keeping the transaction within one service is preferred

• This pattern is completely custom

– No special product support available

• More information here

©2015 Derek C. Ashmore, All Rights Reserved 32

Page 33: Microservices for Java Architects (Indianapolis, April 15, 2015)

Agenda

The “What” and “Why” of micro services

Design Considerations

and Patterns

Packaging Options

Cross-cutting concerns

When to use micro services

Summary / Q&A

©2015 Derek C. Ashmore, All Rights Reserved 33

Page 34: Microservices for Java Architects (Indianapolis, April 15, 2015)

Packaging Support

• Micro services are deployed as a process

– For Java, embedded containers are easy

– Spring Boot

– Dropwizard

• Docker – standardizes the process deployment and environment

©2015 Derek C. Ashmore, All Rights Reserved 34

Page 35: Microservices for Java Architects (Indianapolis, April 15, 2015)

Spring Boot

• Packages Java EE application into *one* deployment jar – java –jar myApp.jar

• Support for health checks and other admin add ons via ‘Actuator’ add-on

• Supports either Jetty or Tomcat • Best for ‘Spring-mvc’ apps

– For non-spring apps, it’s swimming upstream

• Required artifacts – Maven

• spring-boot • spring-boot-starter-jetty (tomcat is available)

• spring-boot-starter-actuator (optional – health checks, etc.)

– Application class with public static void main() • Configuration coded (usually into the application class) • Will read application.properties (app-specific properties)

©2015 Derek C. Ashmore, All Rights Reserved 35

Page 36: Microservices for Java Architects (Indianapolis, April 15, 2015)

Dropwizard

• Packages Java EE application into *one* deployment jar – java –jar myApp.jar server myConfig.yaml

• Provides file configuration options (yaml format) – Database connection pools – Logging config – Port and other container specs

• Provides easy metrics/healthcheck support • Uses Jetty • Required artifacts

– Application class (with main()) – Maven: dropwizard-core, maven-shade-plugin

©2015 Derek C. Ashmore, All Rights Reserved 36

Page 37: Microservices for Java Architects (Indianapolis, April 15, 2015)

Docker • Is a “mini VM”

• runs a linux kernal

• Compare to shipping container

• Standard “connections” to outside world

• Supported formally by Oracle, Tomcat, Jboss, and many more

37 ©2015 Derek C. Ashmore, All Rights Reserved

Package Once, Run Anywhere!

Page 38: Microservices for Java Architects (Indianapolis, April 15, 2015)

Why Docker?

• Docker is Win-Win – Easier for OPS and system administrators

• All software looks the same

• Standard interface for disk and network resources – Containers can be “linked”

• Inherently automated

– Easier for developers • Fewer environment difference issues

• Less to communicate to OPS / system administrators

• Easy to leverage work of others (docker-hub)

– If you haven’t tried Docker yet – you should!

©2015 Derek C. Ashmore, All Rights Reserved 38

Page 39: Microservices for Java Architects (Indianapolis, April 15, 2015)

Agenda

The “What” and “Why” of micro services

Design Considerations

and Patterns

Packaging Options

Cross-cutting concerns

When to use micro services

Summary / Q&A

©2015 Derek C. Ashmore, All Rights Reserved 39

Page 40: Microservices for Java Architects (Indianapolis, April 15, 2015)

Cross-cutting Concerns

• Transaction tracking

• Security

• Contract Testing

• Same as traditional applications

– Health checks

– Logging consolidation

– Performance measurement

©2015 Derek C. Ashmore, All Rights Reserved 40

Page 41: Microservices for Java Architects (Indianapolis, April 15, 2015)

Correlation IDs • Provides context for

service calls or user actions

• Track using HTTP Header

• Log it on all messages / error reports

• Include it on all service calls or message dispatches

• Code sample here

• Spring Boot support has been requested

41 ©2015 Derek C. Ashmore, All Rights Reserved

Page 42: Microservices for Java Architects (Indianapolis, April 15, 2015)

Security

©2015 Derek C. Ashmore, All Rights Reserved 42

Page 43: Microservices for Java Architects (Indianapolis, April 15, 2015)

Security (continued)

• Keep User-level security to the UI

• Micro-service security in layers

– Layer 1 – Network routing enforcement

• Limit access only to within the firewall

• Limit access to specific hosts or subnets

– Layer 2 – Use Service Accounts

• Similar to database access

©2015 Derek C. Ashmore, All Rights Reserved 43

Page 44: Microservices for Java Architects (Indianapolis, April 15, 2015)

Contract Testing

• Critical for MS architectures – Contract changes can break other services

– Bulkhead for rogue developers

– Makes individual services more disposable

• Consumer-based testing

• Tooling support – Apache HttpClient

– SoapUI

– ActiveMQ for JMS (embedded broker)

©2015 Derek C. Ashmore, All Rights Reserved 44

Page 45: Microservices for Java Architects (Indianapolis, April 15, 2015)

Agenda

The “What” and “Why” of micro services

Design Considerations

and Patterns

Packaging Options

Cross-cutting concerns

When to use micro services

Summary / Q&A

©2015 Derek C. Ashmore, All Rights Reserved 45

Page 46: Microservices for Java Architects (Indianapolis, April 15, 2015)

When to consider MS

• Starting out with MS isn’t recommended unless – Parts of the application will have extremely high volume

• Need to scale a portion of the application differently

• Note: MS isn’t all or nothing!

• Warning signs for app that’s too large – Unintended consequences after release

– High technical debt / design rot

– Release testing cycles abnormally large

– Need to coordinate large numbers of developers for a single code base • Large number == takes more than two pizzas to feed

©2015 Derek C. Ashmore, All Rights Reserved 46

Page 47: Microservices for Java Architects (Indianapolis, April 15, 2015)

Where’s the marketing fluff?

• Easier to manage – Maybe

• You *must* be good at contract management

• You *must* be good at specifying precisely what a micro service needs to do

• You *must* ensure that services make no assumptions on how they get invoked

• Easier for developers to “understand” applications – No – sorry

• It is easier to understand a particular ‘cog’ in the machine (e.g. the function of one service

• It is *not* easier to understand how micro services fit together to provide a particular piece of business functionality

©2015 Derek C. Ashmore, All Rights Reserved 47

Page 48: Microservices for Java Architects (Indianapolis, April 15, 2015)

Where’s the marketing fluff? (continued)

• Increased Development Throughput – Maybe

• Harder for business to ‘test’ a business function for a specific combination of micro services

• You *must* be good at error detection (unintended consequences) • The more assumptions a service makes about its execution context, the more

unintended consequences (e.g. errors) you are likely to have on deployment

• Services become disposable and can be “replaced” instead of “maintained / fixed”. – Maybe

• It’s more easily replaced than when using traditional architectures • Requires rigorous contract testing

– Can’t have the “replacement” act any differently than the original (except for the bug being fixed, of course)

• Requires architecture support for cross-cutting concerns – Can’t take a lot of time to implement / test

©2015 Derek C. Ashmore, All Rights Reserved 48

Page 49: Microservices for Java Architects (Indianapolis, April 15, 2015)

Further Reading

• Micro services reading list – http://www.mattstine.com/microservices

• Microsoft’s Cloud Design Patterns – https://msdn.microsoft.com/en-us/library/dn600223.aspx

• Moneta Java micro service example – https://github.com/Derek-Ashmore/moneta

• This slide deck – http://www.slideshare.net/derekashmore

©2015 Derek C. Ashmore, All Rights Reserved 49