Microservices mit Java, Spring Boot & Spring...

56
Microservices mit Java, Spring Boot & Spring Cloud Eberhard WolFellow @ewol

Transcript of Microservices mit Java, Spring Boot & Spring...

Page 1: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Microservices mit Java, Spring Boot &

Spring Cloud Eberhard Wolff

Fellow @ewolff

Page 2: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

What are Microservices?

Page 3: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Server Server

Micro Service: Definition

>  Small

>  Independent deployment units

>  i.e. processes or VMs

>  Any technology

>  Any infrastructure

Micro Service

Micro Service

Page 4: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Components Collaborate

Micro Service

Micro Service

Link

Data Replication

REST Messaging

Page 5: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Infrastructure >  Lots of services

>  Need infrastructure >  Easy to create a new project

>  REST integrated

>  Messaging supported

>  Uniform operations

Page 6: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Spring Boot Demo

Page 7: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Simple Infrastructure

>  One pom.xml >  …Gradle / Ant

>  Very few dependencies >  One plug in >  Versions defined for you

Page 8: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

REST Integrated

>  Support in Spring MVC >  As we have seen

>  Also support for JAX-RS >  Jersey

Page 9: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Messaging Support

>  Numerous Spring Boot Starter

>  AMQP (RabbitMQ) >  HornetQ (JMS) >  ActiveMQ (JMS, no starter)

Page 10: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Messaging Support >  Spring JMS abstraction >  Message driven POJOs >  Scalable >  Simplify sending JMS

>  Can use other libs, too! >  Boot: everything Spring / Java can do

Page 11: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Infrastructure >  More services >  Need infrastructure

>  Easy to create a new project

>  REST integrated

>  Messaging supported

>  Simple deployment

>  Uniform operations

Page 12: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Deploy >  Just package everything in an

executable JAR >  …or a WAR

>  Based on Maven, Ant or Gradle

>  Add configuration

Page 13: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Spring Boot Deploy Demo

Page 14: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Deploy

>  Install a basic machine

>  Install Java

>  Copy over JAR

>  Optional: Make it a Linux Service (1.3)

>  Optional: Create application.properties

Page 15: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Infrastructure >  More services >  Need infrastructure

>  Easy to create a new project

>  REST integrated

>  Messaging supported

>  Simple deployment

>  Uniform operations

Page 16: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Spring Boot Actuator

>  Provide information about the application

>  Via HTTP / JSON

>  Can be evaluated by monitoring tools etc.

>  Another alternative approach to monitoring

Page 17: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Spring Boot Actuator Demo

Page 18: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Infrastructure >  More services >  Need infrastructure

>  Easy to create a new project

>  REST integrated

>  Messaging supported

>  Simple deployment

>  Uniform operations

Page 19: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Spring Cloud

Page 20: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Based on Spring Boot

Page 21: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Spring Cloud

>  Spring support for Amazon Web Services

>  Connector for Heroku PaaS

>  …and Cloud Foundry PaaS

>  The rest of Spring Cloud is for Microservices

Page 22: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Coordinating Microservices

Page 23: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

>  Must find each other

Microservice Microservice

Page 24: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Service Discovery Eureka

Page 25: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Why Eureka? >  REST based service registry

>  Supports replication

>  Caches on the client

>  Resilient

>  Fast

>  …but not consistent

>  Foundation for other services

Page 26: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Eureka Client in Spring Cloud

>  @EnableDiscoveryClient: generic

>  @EnableEurekaClient: more specific

>  Dependency to spring-cloud-starter-eureka

>  Automatically registers application

Page 27: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS
Page 28: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

>  Must find each other

>  Route calls to a service

Microservice Microservice

Page 29: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Zuul Routing

Page 30: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Routing >  One URL to the outside

>  Internal: Many Microservices

>  REST

>  Or HTML GUI

Page 31: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Customer Order Catalog

Zuul Proxy

Automatically maps route to server registered on Eureka i.e. /customer/**

to CUSTOMER No configuration

Can add filters etc

Page 32: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

>  Must find each other

>  Route calls to a service

>  Configuration

Microservice Microservice

Page 33: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Spring Cloud Config

Page 34: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Configuration >  Spring Cloud Config

>  Central configuration

>  Dynamic updates

>  Can use git backend

>  I prefer immutable server

>  & DevOps tools (Docker, Chef…)

Page 35: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Spring Cloud Bus

>  Pushed config updates

>  …or individual message

>  I prefer a messaging solution

>  Independent from Spring

Page 36: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

>  Must find each other

>  Route calls to a service

>  Configuration

>  Security

Microservice Microservice

Page 37: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Spring Cloud Security

Page 38: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Spring Cloud Security

>  Single Sign On via OAuth2

>  Forward token e.g. via RestTemplate

>  Support for Zuul

>  Very valuable!

Page 39: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Implementing Microservices

Page 40: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Microservice Microservice

>  Load Balancing

Page 41: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Load Balancing Ribbon

Page 42: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Server Client

Ribbon: Client Side Load Balancing

>  Decentralized Load Balancing

>  No bottle neck

>  Resilient

>  Hard to consider metrics / health

>  Data might be inconsistent

Load Balancer

Page 43: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

RestTemplate & Load Balancing

@RibbonClient(name = "ribbonApp")

public class RibbonApp {

@Autowired

private RestTemplate restTemplate;

public void callMicroService() {

Store store = restTemplate.

getForObject("http://stores/store/1",Store.class);

}

}

Enable Ribbon

Left out other annotations

Eureka name or server list

Standard Spring REST client

Can also use Ribbon API

Page 44: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Microservice Microservice

>  Load Balancing

>  Resilience

Page 45: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Hystrix Resilience

Page 46: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Hystrix

>  Enable resilient applications

>  Do call in other thread pool

>  Won’t block request handler

>  Can implement timeout

Page 47: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Hystrix

>  Circuit Breaker

>  If call system fail open

>  If open do not forward call

>  Forward calls after a time window

>  System won’t be swamped with requests

Page 48: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Hystrix / Spring Cloud

>  Annotation based approach

>  Annotations of javanica libraries

>  Java Proxies automatically created

>  Simplifies Hystrix dramatically

>  No commands etc

Page 49: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

@HystrixCommand(fallbackMethod = "getItemsCache")

public Collection<Item> findAll() {

this.itemsCache = pagedResources.getContent();

return itemsCache;

}

private Collection<Item> getItemsCache() {

return itemsCache;

}  

Fallback

Page 50: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Hystrix Dashboard Stream via http

Circuit Breaker status

Thread Pool status

Page 51: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Conclusion

Page 52: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Infrastructure

>  Easy to create a new project >  REST integrated >  Messaging supported >  Simple deployment >  Uniform operations

Page 53: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Spring Cloud

>  Eureka: Service Discovery >  Zuul: Route calls to a service >  Spring Cloud Config: Configuration >  Ribbon: Load Balancing >  Hystrix: Resilience

Page 54: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Links >  http://projects.spring.io/spring-boot/

>  http://projects.spring.io/spring-cloud

>  https://github.com/ewolff/spring-boot-demos

>  https://github.com/ewolff/microservices

>  https://spring.io/guides/

Page 55: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS
Page 56: Microservices mit Java, Spring Boot & Spring Cloud2015.java-forum-stuttgart.de/_data/C7_Wolff.pdf · Spring Cloud > Spring support for Amazon Web Services > Connector for Heroku PaaS

Thank You!! @ewolff