microservices mit spring cloud - guild42.ch mit spring cloud alain sahli alain.sahli@ mimacom.com...
TRANSCRIPT
ALAIN SAHLIMICROSERVICES MIT SPRING CLOUD
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?