MICROSERVICES MIT SPRING CLOUD - Guild42.ch MIT SPRING CLOUD ALAIN SAHLI ALAIN.SAHLI@ MIMACOM.COM...

Post on 20-May-2018

223 views 1 download

Transcript of MICROSERVICES MIT SPRING CLOUD - Guild42.ch MIT SPRING CLOUD ALAIN SAHLI ALAIN.SAHLI@ MIMACOM.COM...

ALAIN SAHLIMICROSERVICES MIT SPRING CLOUD

ALAIN SAHLIALAIN.SAHLI@MIMACOM.COM

DISTRIBUTED SYSTEM DEPLOYMENTS@GITHUB

175 DEPLOYMENTS / DAY

NETFLIXSERVICE ORIENTED ARCHITECTURE

CLOUD

SERVICE REGISTRY,CIRCUIT BREAKER, METRICS

CORE

FRAMEWORK SECURITY GROOVY REACTOR

IO E

XECU

TION

IO F

OUND

ATIO

NGRAILS

FULL STACK, WEB

XD

STREAMS, TAPS, JOBS

BOOT

BOOTABLE, MINIMAL, OPS-READY

BATCH

JOBS, STEPS,READERS, WRITERS

DATA

RELATIONAL DATA NON-RELATIONAL DATA

BIG DATA

INGESTION, EXPORT,ORCHESTRATION, HADOOP

WEB

CONTROLLERS, REST, WEBSOCKET

INTEGRATION

CHANNELS, FILTERS,ADAPTERS, TRANSFORMERS

IO C

OORD

INAT

ION

TOOLBOXFOR DISTRIBUTED SYSTEMS

SPRING CLOUDINTRODUCTION

Spring Cloud

BusConfig Netflix

AWS

Cloud FoundryCLIConnectors

Starters

Application

CONFIGURATION MANAGEMENTMONOLITHIC VS. DISTRIBUTED

Application

JNDI

Service

ServiceService

Service

Service

Spring Cloud Config

Spring Cloud Config Server

GIT

SVN

File

Config Server

@Configuration@EnableAutoConfiguration@EnableConfigServerpublic class ConfigServerApplication { public static void main(String[] args) { SpringApplication.run(ConfigServerApplication.class, args); } }

Spring Cloud Config Server

Application

Spring Cloud Config Client

Application

Spring Cloud Config Client

Application

Spring Cloud Config Client

Application

Spring Cloud Config Client

@SpringBootApplicationpublic class CustomerApp { public static void main(String[] args) { SpringApplication.run(CustomerApp.class, args); } }

Bootstrap

Spring Cloud Bus

Spring Cloud Config Server

Application

Application

/bus/refresh

AMQP

PATTERNSSTABILITY CAPACITYTRANSPARENCY

SPRING CLOUDNETFLIX

Hystrix

Feign

Zuul

Eureka

Turbine

Ribbon

Service Registry

Circuit Breaker

Stream Aggregator

Load Balancer

Edge Service

HTTP Communication

HYSTRIXCIRCUIT BREAKER

Execute Command Queue Pool available

Run

Fallback

HYSTRIXBULKHEADS

Tomcat Thread Pool

Thre

ad -

1

Service

Service

Service Service

Thre

ad -

2

Thre

ad -

3

XTh

read

- 4

Thre

ad -

5

Thre

ad -

6

Thre

ad -

7

Thre

ad -

8

HYSTRIXBULKHEADS

Execute Command Queue Pool available

Execute Command Queue Pool available

Execute Command Queue Pool available

HYSTRIX EXAMPLESERVICE CONSUMER

public class SearchGateway { @HystrixCommand(fallbackMethod = "fallback") public List<SearchHit> search(String query) { return …; } public List<SearchHit> fallback() { return Collections.emptyList(); } }

HYSTRIXTRANSPARENCY

HYSTRIX DASHBOARDEXAMPLE

@EnableCircuitBreaker@EnableHystrixDashboardpublic class HystrixApp { public static void main(String[] args) { SpringApplication.run(HystrixApp.class, args); }}

TURBINEAGGREGATOR

Dashboard

Service

Service

Dashboard

Turbine

Service Service

EUREKASERVICE DISCOVERY

Service

Service

Service

Service

XService

Service

Service

Service

Eure

ka

EUREKA REGISTRATIONEXAMPLE

@SpringBootApplication@EnableDiscoveryClientpublic class CustomerApp { public static void main(String[] args) { SpringApplication.run(CustomerApp.class, args); } }

spring.application.name=customers

EUREKA REGISTRATIONEXAMPLE

DiscoveryClientApplication

HostPortURI

RIBBONLOAD-BALANCER

Service

Service

Eure

ka

Service

Service

Eure

ka

ServiceService

Load Balancer

RIBBONRESTTEMPLATE INTEGRATION

@Servicepublic class Service { @Autowired @LoadBalanced RestTemplate restTemplate; public String callService() { return restTemplate.getForObject("http://CUSTOMERS/{id}", String.class,"23"); }}

ZUULEDGE-SERVICE

Service

Eure

ka

Edge Proxy

Service

Eure

ka

ServiceService

Load Balancer

Web Browser

Web Browser

ZUULREVERSE PROXY SETUP

@EnableAutoConfiguration@EnableZuulProxypublic class SimpleZuulServerApplication { public static void main(String[] args) { SpringApplication.run(SampleZuulProxyApplication.class, args); } }

http://localhost:9090/customershttp://localhost:9090/stores

CLOUD FOUNDRYDEPLOYMENT

Stage App

Run n App Instances(and keep them running)

Push App> cf

Route to Apphttp://…

CLOUD FOUNDRYAPI

DEA Pool (Droplet Execution Agent)

CloudController

(API)

Push App> cf

Router

http://…

CLOUD FOUNDRYDROPLET EXECUTION AGENT

DEA Pool (Droplet Execution Agent)

CloudController

(API)

Push App> cf

Router

http://…

CLOUD FOUNDRYDROPLET EXECUTION AGENT

CloudController

DEA Pool (Droplet Execution Agent)

DEA

Staging Apps

Running Apps(API)

Router

Push App> cf

http://…

CLOUD FOUNDRYCONTAINERIZATION

CloudController

DEA Pool (Droplet Execution Agent)

DEA

Staging Apps

Running Apps

Warden

Containerization

(API)

Router

Push App> cf

http://…

CLOUD FOUNDRYHEALTH MANAGER

CloudController

DEA Pool (Droplet Execution Agent)

DEA

Staging Apps

Running Apps

Warden

ContainerizationHealth Manager

(API)

Router

Push App> cf

http://…

CLOUD FOUNDRYNATS

CloudController

Router

DEA Pool (Droplet Execution Agent)

DEA

Staging Apps

Running Apps

Warden

ContainerizationHealth Manager

NATS(message bus)

(API)

Push App> cf

http://…

Fortune UI

Service Discovery

EurekaFortune Service

Config Server

Circuit Breaker Dashboard

Browser

FRAGEN?