SlideShare ist ein Scribd-Unternehmen logo
1 von 110
Spring Cloud
Why? How? What?
Speaker
• Orkhan Gasimov, Software Engineer
– 14 years of software engineering;
– variety of technologies (languages & frameworks);
– solution design and implementation;
• Teaching training courses.
– Architecture.
– Java.
– JavaScript / TypeScript.
• Author of training courses.
– Spring Cloud.
– Akka for Java.
Spring Cloud
• Why?
– Provide the Spring developer with an
easily consumable set of tools to build
distributed systems.
Motivation
Spring Cloud
• Why?
– Provide the Spring developer with an
easily consumable set of tools to build
distributed systems.
• How?
– Wrapping other implementation stacks,
that are then consumed via the familiar
tools.
Motivation
Process
Spring Cloud
• Why?
– Provide the Spring developer with an
easily consumable set of tools to build
distributed systems.
• How?
– Wrapping other implementation stacks,
that are then consumed via the familiar
tools.
• What?
– Set of tools for developers to quickly
build some of the common patterns in
distributed systems.
Process
Motivation
Product
Spring Cloud
• Microservices
• Core Components
• Instrumentation
• Security
• Messaging & Streaming
• Distributed Event Bus
• Configuration Management
• Questions & Answers
Spring Cloud
• Spring Cloud Netflix
• Spring Cloud Sleuth
• Spring Cloud Security
• Spring Cloud Streams
• Spring Cloud Bus
• Spring Cloud Config
Examples
• A few notes about code examples:
– We will see
• Spring Cloud project names.
• Simplified Java code examples.
• Basic configuration options.
– We omit
• Dependencies – easy to find at official website.
• Extensive configuration options – available in official documentation.
Microservices
Microservices
• Approach or Architecture?
– Approach
• Introduces general guidelines on ways of performing
the work.
– Architecture
• Defines the structured solution that meets all of the
technical and operational requirements.
Microservices
• Approach from organizational point of view.
– Which tools are going to be used?
– What technology stacks are available?
– How processes are going to be organized?
– Which protocols will be used?
– How the deployment will be organized?
Microservices
• Architecture from development point of view.
– Which elements will be used to build the software?
– How relations between elements will be organized?
– How elements will be structured?
– How elements, relations and structure are configured?
Monolith
Distributed
Scalability
Load Balancing
Cascading Calls
Service Discovery
Microservices
Core Components
Core Components
• Spring Cloud
– built on top of Spring Boot.
– ready for microservice development.
• Multiple implementations of common patterns.
– E.g. support for Eureka, ZooKeeper and Consul.
Core Components
• Spring Cloud Netflix.
– Discovery server and client.
– Latency and fault tolerance library.
– Client-side load balancing over RestTemplate.
– Declarative REST client.
– Edge proxy for API gateway implementations.
Core Components – Service Discovery
• A simple discovery server implementation using Spring Cloud looks like:
– By default Eureka will be available at http://localhost:8761/eureka
– Custom settings should be configured in bootstrap.yml (or .properties)
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class DiscoveryServer {
public static void main(String[] args) {
SpringApplication.run(DiscoveryServer.class, args);
}
}
Core Components – Service Discovery
• A simple discovery server configuration looks like:
spring:
application:
name: DiscoveryServer
server:
port: 8761
eureka:
server:
enable-self-preservation: false
Core Components – Service Discovery
• Eureka
– Self-Preservation
– Peer Awareness
– Availability Zones
– Regions
Core Components – Service Discovery
• Peer awareness configuration for two discovery server instances looks like:
spring:
application:
name: DiscoveryServer
server:
port: 8761
eureka:
server:
enable-self-preservation: false
client:
fetchRegistry: true
registerWithEureka: true
serviceUrl:
defaultZone: http://host2:8761/eureka
spring:
application:
name: DiscoveryServer
server:
port: 8761
eureka:
server:
enable-self-preservation: false
client:
fetchRegistry: true
registerWithEureka: true
serviceUrl:
defaultZone: http://host1:8761/eureka
Core Components – Service Discovery
• A simple service with discovery client looks like:
@SpringBootApplication
@EnableEurekaClient //@EnableDiscoveryClient
@RestController
public class HelloService {
@RequestMapping("/hello")
public String sayHello(@RequestParam String name) {
return "Hello " + name;
}
public static void main(String[] args) {
SpringApplication.run(HelloService.class, args);
}
}
Core Components – Service Discovery
• A simple service configuration looks like:
spring:
application:
name: HelloService
eureka:
client:
fetchRegistry: true
registerWithEureka: true
serviceUrl:
defaultZone: http://localhost:8761/eureka
Core Components – Load Balancing
• How do we load balance between instances of HelloService?
Core Components – Load Balancing
• Ribbon – the client-side load
balancer.
• Ribbon supports auto-retry, time-out
and other useful configurable
features.
Core Components – Load Balancing
• Spring Cloud implements Ribbon as a wrapper over RestTemplate.
• Default load balancing logic is round-robin.
Core Components – Load Balancing
@Bean
@LoadBalanced
public RestTemplate restTmpl() {
return new RestTemplate();
}
@RestController
public class HelloWorldRest {
@Autowired
private RestTemplate restTmpl;
@RequestMapping("/hello-world")
public String sayHello() {
String url = "http://HelloService/hello?name=World";
return restTmpl.getForObject(url, String.class);
}
}
Core Components – Circuit Breaker
• Remote service fails or is not available:
Core Components – Circuit Breaker
• Remote service fails or is not available:
– Long-running requests that result in failure.
Core Components – Circuit Breaker
• Remote service fails or is not available:
– Long-running requests that result in failure.
– Users wait to get the failure response.
Core Components – Circuit Breaker
• Remote service fails or is not available:
– Long-running requests that result in failure.
– Users wait to get the failure response.
• Failure continues for some unpredictable time:
Core Components – Circuit Breaker
• Remote service fails or is not available:
– Long-running requests that result in failure.
– Users wait to get the failure response.
• Failure continues for some unpredictable time:
– More dependent services can be blocked.
Core Components – Circuit Breaker
• Remote service fails or is not available:
– Long-running requests that result in failure.
– Users wait to get the failure response.
• Failure continues for some unpredictable time:
– More dependent services can be blocked.
– Longer response times, more users have to wait…
Core Components – Circuit Breaker
• Some of service dependencies will inevitably fail.
Core Components – Circuit Breaker
• Some of service dependencies will inevitably fail.
– Cascading failures turn into a chain reaction.
Core Components – Circuit Breaker
• Some of service dependencies will inevitably fail.
– Cascading failures turn into a chain reaction.
• Hystrix helps to control the interactions between distributed services by
adding latency tolerance and fault tolerance logic.
Core Components – Circuit Breaker
• Hystrix – the circuit breaker.
– Isolates points of access between services.
– Stops cascading failures.
– Provides fallback options.
Core Components – Circuit Breaker
@SpringBootApplication
@EnableHystrix //@EnableCircuitBreaker
@RestController
//other annotations – Eureka, etc.
public class HelloWorldService {
//beans, autowires, main method...
@HystrixCommand(fallbackMethod = "helloFallback")
@RequestMapping("/hello-world")
public String sayHello() {
String url = "http://HelloService/hello?name=World";
return restTmpl.getForObject(url, String.class);
}
private String helloFallback() {
return "Sorry World, try again later please.";
}
}
Core Components – REST Client
• Feign – declarative REST client.
Core Components – REST Client
• Feign – declarative REST client.
– Integrated support for Eureka, Ribbon and Hystrix.
Core Components – REST Client
• Feign – declarative REST client.
– Integrated support for Eureka, Ribbon and Hystrix.
– Enabled by adding @EnableFeignClients to your configuration class.
Core Components – REST Client
• Feign – declarative REST client.
– Integrated support for Eureka, Ribbon and Hystrix.
– Enabled by adding @EnableFeignClients to your configuration class.
@FeignClient(name = "HelloService")
public interface HelloClient {
@RequestMapping("/hello")
String sayHello(@RequestParam String name);
}
Core Components – REST Client
• Feign client with Hystrix fallbacks:
@FeignClient(name = "HelloService", fallback = HelloFallback.class)
public interface HelloClient {
@RequestMapping("/hello")
String sayHello(@RequestParam String name);
}
@Component
public class HelloFallback implements HelloClient {
@Override
public String sayHello(String name) {
return "Sorry " + name + ", try again later please";
}
}
Core Components
• Let’s imagine we are building an
application with microservices
architecture.
• Services depend on other services.
Core Components
• Let’s imagine we are building an
application with microservices
architecture.
• Services depend on other services.
• Services find each other through
service discovery.
Core Components
• Let’s imagine we are building an
application with microservices
architecture.
• Services depend on other services.
• Services find each other through
service discovery.
• How do clients integrate with our
microservices?
Core Components – API Gateway
• API gateway is the single entry
point for clients.
Core Components – API Gateway
• API gateway is the single entry
point for clients.
• The API gateway handles requests
in one of two ways:
Core Components – API Gateway
• API gateway is the single entry
point for clients.
• The API gateway handles requests
in one of two ways:
– Simply proxy/route requests to the
appropriate service.
Core Components – API Gateway
• API gateway is the single entry
point for clients.
• The API gateway handles requests
in one of two ways:
– Simply proxy/route requests to the
appropriate service.
– Expose a different API for each
client.
Core Components – API Gateway
• API gateway – the single entry point to your microservices
– eliminates the hassle of dealing with your internal infrastructure.
• Zuul – the edge proxy which is integrated with Eureka, Ribbon & Hystrix.
Core Components – API Gateway
• Zuul configuration example:
zuul:
ignoredServices: '*'
routes:
hello:
path: /hello/**
serviceId: HelloService
stripPrefix: true
hello-world:
path: /world/**
serviceId: HelloWorldService
stripPrefix: true
@SpringBootApplication
@EnableZuulProxy
public class ApiProxy {
//main method...
}
Core Components
• Spring Cloud Netflix
– Eureka
• service discovery server and client.
– Ribbon
• client-side load balancer.
– Hystrix
• circuit breaker.
– Feign
• declarative REST client.
– Zuul
• edge-proxy for API gateway implementations.
Instrumentation
Instrumentation
• Hystrix – near real-time metrics.
– Metrics stream is available at /hystrix.stream.
– Can be visualized with Hystrix Dashboard.
Instrumentation
• Hystrix Dashboard
@SpringBootApplication
@EnableHystrixDashboard
public class Dashboard {
//main method...
}
Instrumentation
• Hystrix metrics stream contain:
– Health indicator;
– Traffic volume;
– Request rate;
– Host count;
– Error percentage;
– Circuit-breaker status;
– Latency stats;
– Success count
– Reject count;
– Timeouts;
– Failures/Exception;
– Etc.
Instrumentation
• Turbine – aggregates metrics from Hystrix instrumented cluster.
Instrumentation
• Turbine AMQP allows any application post metrics to the single stream.
– Turbine Server – aggregates all metrics sent to the stream.
Instrumentation
• Spring Cloud Sleuth – distributed tracing compatible with Dapper, Zipkin
and HTrace.
Instrumentation
• Integrated tools for metrics and tracing
– Hystrix Stream and Hystrix Dashboard
• near real-time monitoring of circuit breakers at a single host.
– Turbine
• the Hystrix Stream aggregator that allows to monitor all nodes in cluster.
– Turbine AMQP
• the Hystrix Stream aggregator that allows to monitor all applications in network.
– Sleuth & Zipkin
• distributed tracing of cascading calls between microservices.
Security
Security
• Implementations:
– API Gateway / Perimeter Security;
– Everybody Can Auth (with HTTP Basic);
– Basic + Central Auth DB;
– Sessions Everywhere;
– API Tokens;
– SAML;
– Etc.
Security
• Common concerns:
– Central user store bottleneck;
– Lack of single sign on;
– Statelessness;
– Exposure of user credentials;
– Lack of fine grained authorization;
– Interoperability with non browser clients;
Security
• Spring Cloud Security
Security
• Spring Cloud Security
– OAuth2 – delegated authorization.
Security
• Spring Cloud Security
– OAuth2 – delegated authorization.
– JWT (JSON WebToken) – self-contained tokens.
Security
• Spring Cloud Security
– OAuth2 – delegated authorization.
– JWT (JSON WebToken) – self-contained tokens.
– OpenID Connect – delegated authentication.
Security
• Spring Cloud Security
– OAuth2 – delegated authorization.
– JWT (JSON WebToken) – self-contained tokens.
– OpenID Connect – delegated authentication.
– SSO through API gateway using Zuul.
Security
User Authentication and Authorization server (UAA) sample
configuration
Security – UAA sample configuration
@Configuration
@EnableAuthorizationServer
public class OAuth2Configuration extends AuthorizationServerConfigurerAdapter {
@Autowired
@Qualifier("authenticationManagerBean")
private AuthenticationManager authenticationManager;
@Bean
public TokenStore tokenStore() {
return new JwtTokenStore(jwtTokenEnhancer());
}
@Bean
protected JwtAccessTokenConverter jwtTokenEnhancer() {
KeyStoreKeyFactory keyStoreKeyFactory = new KeyStoreKeyFactory(
new ClassPathResource("jwt.jks"), "mySecretKey".toCharArray()
);
JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
converter.setKeyPair(keyStoreKeyFactory.getKeyPair("jwt"));
return converter;
}
Security – UAA sample configuration
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.inMemory()
.withClient("client")
.secret("secret")
.scopes("openid")
.autoApprove(true)
.authorizedGrantTypes("implicit","refresh_token", "password", "authorization_code");
}
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
endpoints.tokenStore(tokenStore()).tokenEnhancer(jwtTokenEnhancer())
.authenticationManager(authenticationManager);
}
@Override
public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception {
oauthServer.tokenKeyAccess("permitAll()").checkTokenAccess("permitAll()");
}
}
Security – UAA sample configuration
@Configuration
class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
@Bean
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.antMatchers("/**").authenticated()
.and().httpBasic()
.and().formLogin().permitAll()
.and().logout();
}
Security – UAA sample configuration
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("account")
.password("account")
.authorities("ACCOUNT_READ", "ACCOUNT_WRITE", "ACCOUNT_PROCESS")
.and()
.withUser("card")
.password("card")
.authorities("CARD_WRITE", "ACCOUNT_READ")
.and()
.withUser("client")
.password("client")
.authorities("CLIENT_READ", "CLIENT_WRITE", "ACCOUNT_READ", "CARD_READ")
.and()
.withUser("processing")
.password("processing")
.authorities("PROCESSING", "ACCOUNT_PROCESS");
}
}
Security
Resource Server configuration
Security – Resource Server configuration
@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
@Bean
@LoadBalanced
public OAuth2RestTemplate oAuth2RestTemplate(OAuth2ProtectedResourceDetails details) {
return new OAuth2RestTemplate(details);
}
@Override
public void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.antMatchers("/**").authenticated()
.antMatchers(HttpMethod.GET, "/test").hasAuthority("PROCESSING");
}
}
Security – Resource Server configuration
security:
oauth2:
client:
clientId: client
clientSecret: secret
scope: openid
accessTokenUri: http://localhost:8500/uaa/oauth/token
userAuthorizationUri: http://localhost:8500/uaa/oauth/authorize
resource:
jwt:
key-uri: http://localhost:8500/uaa/oauth/token_key
Security
SSO with Zuul
Security – SSO with Zuul
• To enable SSO at Zuul:
@SpringBootApplication
@EnableZuulProxy
@EnableOAuth2Sso
public class ApiGateway {
//main method...
}
Security
• Spring Cloud Security
– OAuth2 for delegated authorization.
– JWT for self-contained tokens.
– OpenID Connect for delegated authentication.
– SSO with Zuul at API gateway.
Messaging & Streaming
Messaging & Streaming
• Spring Cloud Stream – messaging/streaming API.
Messaging & Streaming
• Spring Cloud Stream – messaging/streaming API.
• Features:
– Publish-Subscribe;
– Consumer Groups;
– Partitioning;
Messaging & Streaming
• Spring Cloud Stream – messaging/streaming API.
• Features:
– Publish-Subscribe;
– Consumer Groups;
– Partitioning;
• REST – synchronous microservices.
• Spring Cloud Stream – asynchronous microservices.
Messaging & Streaming
• Basic channel abstraction interfaces:
– Sink – output message channel.
– Source – input message channel.
– Processor – extends Sink and Source.
Messaging & Streaming
• A simple processor application with Spring Cloud Stream looks like:
@SpringBootApplication
@EnableBinding(Processor.class)
public class WordNumFilter {
@StreamListener(Processor.INPUT)
@SendTo(Processor.OUTPUT)
private String filter(String word) {
//filter numbers, return only words
}
//main method...
}
Messaging & Streaming
• Configuration for the channels looks like:
spring:
application.name: WordNumFilter
cloud.stream.bindings:
input:
destination: wordNumFilter
group: WordNumFilters
consumer:
partitioned: true
instanceCount: 2
instanceIndex: 0
output:
destination: words
Distributed Event Bus
Distributed Event Bus
• Spring Cloud Bus – distributed event bus.
– Built on top of Spring Cloud Stream.
– Integrates with application events.
Distributed Event Bus
• Event publisher and listener example:
public class MyEventPublisher {
@Autowired
private SpringCloudBusClient busClient;
public void publishEvent(MyEvent event) {
busClient.springCloudBusOutput().send(
MessageBuilder.withPayload(event).build()
);
}
}
@EventListener
public void handleEvent(MyEvent event) {
//or implement ApplicationListener<MyEvent>
}
Configuration Management
Configuration Management
• Configuring applications separately is uncomfortable.
Configuration Management
• Configuring applications separately is uncomfortable.
– Application are deployed to different hosts.
Configuration Management
• Configuring applications separately is uncomfortable.
– Application are deployed to different hosts.
– Different environments (DEV, RC, PROD).
Configuration Management
• Spring Cloud Config – server and client support for external configuration.
Configuration Management
• Spring Cloud Config – server and client support for external configuration.
• Features:
– HTTP-based API for external configuration.
Configuration Management
• Spring Cloud Config – server and client support for external configuration.
• Features:
– HTTP-based API for external configuration.
– Encrypt and decrypt property values.
Configuration Management
• Spring Cloud Config – server and client support for external configuration.
• Features:
– HTTP-based API for external configuration.
– Encrypt and decrypt property values.
– Git as default repository storage.
• File-based, SVN and other options are available.
Configuration Management
• Config Server is the central place to manage external properties for
applications across all environments.
Configuration Management
Config Server application:
Config Server configuration: Config Client configuration:
@SpringBootApplication
@EnableConfigServer
public class ConfigServer {
public static void main(String[] args) {
SpringApplication.run(ConfigServer.class, args);
}
}
spring.cloud.config.server.git:
uri: http://git.xyz/config-repo
username: user
password: passkey
spring:
application.name: AppName
cloud.config.uri: http://host:8182
Configuration Management
• Spring Cloud Config Monitor
– Configuration updates are delivered to applications without restart.
Configuration Management
Questions & Answers
Questions & Answers
• Spring Cloud Netflix
– Eureka, Ribbon, Hystrix, Feign, Zuul
– Hystrix Stream and Hystrix Dashboard
– Turbine & Turbine AMQP
• Spring Cloud Sleuth
– Zipkin
• Spring Cloud Security
– OAuth2 + JWT, OpenID Connect + SSO
• Spring Cloud Streams
• Spring Cloud Bus
• Spring Cloud Config
Thank you!

Weitere ähnliche Inhalte

Was ist angesagt?

Nestjs MasterClass Slides
Nestjs MasterClass SlidesNestjs MasterClass Slides
Nestjs MasterClass SlidesNir Kaufman
 
React Interview Questions and Answers | React Tutorial | React Redux Online T...
React Interview Questions and Answers | React Tutorial | React Redux Online T...React Interview Questions and Answers | React Tutorial | React Redux Online T...
React Interview Questions and Answers | React Tutorial | React Redux Online T...Edureka!
 
Understanding MicroSERVICE Architecture with Java & Spring Boot
Understanding MicroSERVICE Architecture with Java & Spring BootUnderstanding MicroSERVICE Architecture with Java & Spring Boot
Understanding MicroSERVICE Architecture with Java & Spring BootKashif Ali Siddiqui
 
Introduction to elasticsearch
Introduction to elasticsearchIntroduction to elasticsearch
Introduction to elasticsearchhypto
 
REST API and CRUD
REST API and CRUDREST API and CRUD
REST API and CRUDPrem Sanil
 
Microservice With Spring Boot and Spring Cloud
Microservice With Spring Boot and Spring CloudMicroservice With Spring Boot and Spring Cloud
Microservice With Spring Boot and Spring CloudEberhard Wolff
 
Rest api standards and best practices
Rest api standards and best practicesRest api standards and best practices
Rest api standards and best practicesAnkita Mahajan
 
Microservices Architecture Part 2 Event Sourcing and Saga
Microservices Architecture Part 2 Event Sourcing and SagaMicroservices Architecture Part 2 Event Sourcing and Saga
Microservices Architecture Part 2 Event Sourcing and SagaAraf Karsh Hamid
 
What is REST API? REST API Concepts and Examples | Edureka
What is REST API? REST API Concepts and Examples | EdurekaWhat is REST API? REST API Concepts and Examples | Edureka
What is REST API? REST API Concepts and Examples | EdurekaEdureka!
 
Microservices Interview Questions and Answers | Microservices Architecture Tr...
Microservices Interview Questions and Answers | Microservices Architecture Tr...Microservices Interview Questions and Answers | Microservices Architecture Tr...
Microservices Interview Questions and Answers | Microservices Architecture Tr...Edureka!
 
Microservice vs. Monolithic Architecture
Microservice vs. Monolithic ArchitectureMicroservice vs. Monolithic Architecture
Microservice vs. Monolithic ArchitecturePaul Mooney
 
Microservice Architecture
Microservice ArchitectureMicroservice Architecture
Microservice Architecturetyrantbrian
 

Was ist angesagt? (20)

Nestjs MasterClass Slides
Nestjs MasterClass SlidesNestjs MasterClass Slides
Nestjs MasterClass Slides
 
React Interview Questions and Answers | React Tutorial | React Redux Online T...
React Interview Questions and Answers | React Tutorial | React Redux Online T...React Interview Questions and Answers | React Tutorial | React Redux Online T...
React Interview Questions and Answers | React Tutorial | React Redux Online T...
 
Springboot Microservices
Springboot MicroservicesSpringboot Microservices
Springboot Microservices
 
Domain Driven Design
Domain Driven Design Domain Driven Design
Domain Driven Design
 
Understanding MicroSERVICE Architecture with Java & Spring Boot
Understanding MicroSERVICE Architecture with Java & Spring BootUnderstanding MicroSERVICE Architecture with Java & Spring Boot
Understanding MicroSERVICE Architecture with Java & Spring Boot
 
Introduction to Microservices
Introduction to MicroservicesIntroduction to Microservices
Introduction to Microservices
 
Introduction to microservices
Introduction to microservicesIntroduction to microservices
Introduction to microservices
 
Introduction to elasticsearch
Introduction to elasticsearchIntroduction to elasticsearch
Introduction to elasticsearch
 
REST API and CRUD
REST API and CRUDREST API and CRUD
REST API and CRUD
 
Microservice With Spring Boot and Spring Cloud
Microservice With Spring Boot and Spring CloudMicroservice With Spring Boot and Spring Cloud
Microservice With Spring Boot and Spring Cloud
 
Rest api standards and best practices
Rest api standards and best practicesRest api standards and best practices
Rest api standards and best practices
 
An Introduction To REST API
An Introduction To REST APIAn Introduction To REST API
An Introduction To REST API
 
Microservices Architecture Part 2 Event Sourcing and Saga
Microservices Architecture Part 2 Event Sourcing and SagaMicroservices Architecture Part 2 Event Sourcing and Saga
Microservices Architecture Part 2 Event Sourcing and Saga
 
What is REST API? REST API Concepts and Examples | Edureka
What is REST API? REST API Concepts and Examples | EdurekaWhat is REST API? REST API Concepts and Examples | Edureka
What is REST API? REST API Concepts and Examples | Edureka
 
Microservices Interview Questions and Answers | Microservices Architecture Tr...
Microservices Interview Questions and Answers | Microservices Architecture Tr...Microservices Interview Questions and Answers | Microservices Architecture Tr...
Microservices Interview Questions and Answers | Microservices Architecture Tr...
 
Microservice's in detailed
Microservice's in detailedMicroservice's in detailed
Microservice's in detailed
 
Microservice vs. Monolithic Architecture
Microservice vs. Monolithic ArchitectureMicroservice vs. Monolithic Architecture
Microservice vs. Monolithic Architecture
 
Spring Security
Spring SecuritySpring Security
Spring Security
 
Introduction to Microservices
Introduction to MicroservicesIntroduction to Microservices
Introduction to Microservices
 
Microservice Architecture
Microservice ArchitectureMicroservice Architecture
Microservice Architecture
 

Ähnlich wie Spring Cloud: Why? How? What?

Debugging Microservices - key challenges and techniques - Microservices Odesa...
Debugging Microservices - key challenges and techniques - Microservices Odesa...Debugging Microservices - key challenges and techniques - Microservices Odesa...
Debugging Microservices - key challenges and techniques - Microservices Odesa...Lohika_Odessa_TechTalks
 
Tech talk microservices debugging
Tech talk microservices debuggingTech talk microservices debugging
Tech talk microservices debuggingAndrey Kolodnitsky
 
.NET microservices with Azure Service Fabric
.NET microservices with Azure Service Fabric.NET microservices with Azure Service Fabric
.NET microservices with Azure Service FabricDavide Benvegnù
 
SpringOne Tour: An Introduction to Azure Spring Apps Enterprise
SpringOne Tour: An Introduction to Azure Spring Apps EnterpriseSpringOne Tour: An Introduction to Azure Spring Apps Enterprise
SpringOne Tour: An Introduction to Azure Spring Apps EnterpriseVMware Tanzu
 
Microservice creation using spring cloud, zipkin, ribbon, zull, eureka
Microservice creation using spring cloud, zipkin, ribbon, zull, eurekaMicroservice creation using spring cloud, zipkin, ribbon, zull, eureka
Microservice creation using spring cloud, zipkin, ribbon, zull, eurekaBinit Pathak
 
CON 2107- Think Async: Embrace and Get Addicted to the Asynchronicity of EE
CON 2107- Think Async: Embrace and Get Addicted to the Asynchronicity of EECON 2107- Think Async: Embrace and Get Addicted to the Asynchronicity of EE
CON 2107- Think Async: Embrace and Get Addicted to the Asynchronicity of EEMasoud Kalali
 
Structured Functional Automated Web Service Testing
Structured Functional Automated Web Service TestingStructured Functional Automated Web Service Testing
Structured Functional Automated Web Service Testingrdekleijn
 
Stay productive_while_slicing_up_the_monolith
Stay productive_while_slicing_up_the_monolithStay productive_while_slicing_up_the_monolith
Stay productive_while_slicing_up_the_monolithMarkus Eisele
 
NET Aspire - NET Conf IL 2024 - Tamir Dresher.pdf
NET Aspire - NET Conf IL 2024 - Tamir Dresher.pdfNET Aspire - NET Conf IL 2024 - Tamir Dresher.pdf
NET Aspire - NET Conf IL 2024 - Tamir Dresher.pdfTamir Dresher
 
Netflix0SS Services on Docker
Netflix0SS Services on DockerNetflix0SS Services on Docker
Netflix0SS Services on DockerDocker, Inc.
 
Ibm cloud nativenetflixossfinal
Ibm cloud nativenetflixossfinalIbm cloud nativenetflixossfinal
Ibm cloud nativenetflixossfinalaspyker
 
Netflix Cloud Platform and Open Source
Netflix Cloud Platform and Open SourceNetflix Cloud Platform and Open Source
Netflix Cloud Platform and Open Sourceaspyker
 
Микросервисы со Spring Boot & Spring Cloud
Микросервисы со Spring Boot & Spring CloudМикросервисы со Spring Boot & Spring Cloud
Микросервисы со Spring Boot & Spring CloudVitebsk DSC
 
OpenStack Enabling DevOps
OpenStack Enabling DevOpsOpenStack Enabling DevOps
OpenStack Enabling DevOpsCisco DevNet
 
How to build a Neutron Plugin (stadium edition)
How to build a Neutron Plugin (stadium edition)How to build a Neutron Plugin (stadium edition)
How to build a Neutron Plugin (stadium edition)Salvatore Orlando
 
How to write a Neutron plugin (stadium edition)
How to write a Neutron plugin (stadium edition)How to write a Neutron plugin (stadium edition)
How to write a Neutron plugin (stadium edition)salv_orlando
 
Paa sing a java ee 6 application kshitiz saxena
Paa sing a java ee 6 application   kshitiz saxenaPaa sing a java ee 6 application   kshitiz saxena
Paa sing a java ee 6 application kshitiz saxenaIndicThreads
 
WebSockets in Enterprise Applications
WebSockets in Enterprise ApplicationsWebSockets in Enterprise Applications
WebSockets in Enterprise ApplicationsPavel Bucek
 
Ansible benelux meetup - Amsterdam 27-5-2015
Ansible benelux meetup - Amsterdam 27-5-2015Ansible benelux meetup - Amsterdam 27-5-2015
Ansible benelux meetup - Amsterdam 27-5-2015Pavel Chunyayev
 
Zure Azure PaaS Zero to Hero - DevOps training day
Zure Azure PaaS Zero to Hero - DevOps training dayZure Azure PaaS Zero to Hero - DevOps training day
Zure Azure PaaS Zero to Hero - DevOps training dayOkko Oulasvirta
 

Ähnlich wie Spring Cloud: Why? How? What? (20)

Debugging Microservices - key challenges and techniques - Microservices Odesa...
Debugging Microservices - key challenges and techniques - Microservices Odesa...Debugging Microservices - key challenges and techniques - Microservices Odesa...
Debugging Microservices - key challenges and techniques - Microservices Odesa...
 
Tech talk microservices debugging
Tech talk microservices debuggingTech talk microservices debugging
Tech talk microservices debugging
 
.NET microservices with Azure Service Fabric
.NET microservices with Azure Service Fabric.NET microservices with Azure Service Fabric
.NET microservices with Azure Service Fabric
 
SpringOne Tour: An Introduction to Azure Spring Apps Enterprise
SpringOne Tour: An Introduction to Azure Spring Apps EnterpriseSpringOne Tour: An Introduction to Azure Spring Apps Enterprise
SpringOne Tour: An Introduction to Azure Spring Apps Enterprise
 
Microservice creation using spring cloud, zipkin, ribbon, zull, eureka
Microservice creation using spring cloud, zipkin, ribbon, zull, eurekaMicroservice creation using spring cloud, zipkin, ribbon, zull, eureka
Microservice creation using spring cloud, zipkin, ribbon, zull, eureka
 
CON 2107- Think Async: Embrace and Get Addicted to the Asynchronicity of EE
CON 2107- Think Async: Embrace and Get Addicted to the Asynchronicity of EECON 2107- Think Async: Embrace and Get Addicted to the Asynchronicity of EE
CON 2107- Think Async: Embrace and Get Addicted to the Asynchronicity of EE
 
Structured Functional Automated Web Service Testing
Structured Functional Automated Web Service TestingStructured Functional Automated Web Service Testing
Structured Functional Automated Web Service Testing
 
Stay productive_while_slicing_up_the_monolith
Stay productive_while_slicing_up_the_monolithStay productive_while_slicing_up_the_monolith
Stay productive_while_slicing_up_the_monolith
 
NET Aspire - NET Conf IL 2024 - Tamir Dresher.pdf
NET Aspire - NET Conf IL 2024 - Tamir Dresher.pdfNET Aspire - NET Conf IL 2024 - Tamir Dresher.pdf
NET Aspire - NET Conf IL 2024 - Tamir Dresher.pdf
 
Netflix0SS Services on Docker
Netflix0SS Services on DockerNetflix0SS Services on Docker
Netflix0SS Services on Docker
 
Ibm cloud nativenetflixossfinal
Ibm cloud nativenetflixossfinalIbm cloud nativenetflixossfinal
Ibm cloud nativenetflixossfinal
 
Netflix Cloud Platform and Open Source
Netflix Cloud Platform and Open SourceNetflix Cloud Platform and Open Source
Netflix Cloud Platform and Open Source
 
Микросервисы со Spring Boot & Spring Cloud
Микросервисы со Spring Boot & Spring CloudМикросервисы со Spring Boot & Spring Cloud
Микросервисы со Spring Boot & Spring Cloud
 
OpenStack Enabling DevOps
OpenStack Enabling DevOpsOpenStack Enabling DevOps
OpenStack Enabling DevOps
 
How to build a Neutron Plugin (stadium edition)
How to build a Neutron Plugin (stadium edition)How to build a Neutron Plugin (stadium edition)
How to build a Neutron Plugin (stadium edition)
 
How to write a Neutron plugin (stadium edition)
How to write a Neutron plugin (stadium edition)How to write a Neutron plugin (stadium edition)
How to write a Neutron plugin (stadium edition)
 
Paa sing a java ee 6 application kshitiz saxena
Paa sing a java ee 6 application   kshitiz saxenaPaa sing a java ee 6 application   kshitiz saxena
Paa sing a java ee 6 application kshitiz saxena
 
WebSockets in Enterprise Applications
WebSockets in Enterprise ApplicationsWebSockets in Enterprise Applications
WebSockets in Enterprise Applications
 
Ansible benelux meetup - Amsterdam 27-5-2015
Ansible benelux meetup - Amsterdam 27-5-2015Ansible benelux meetup - Amsterdam 27-5-2015
Ansible benelux meetup - Amsterdam 27-5-2015
 
Zure Azure PaaS Zero to Hero - DevOps training day
Zure Azure PaaS Zero to Hero - DevOps training dayZure Azure PaaS Zero to Hero - DevOps training day
Zure Azure PaaS Zero to Hero - DevOps training day
 

Mehr von Orkhan Gasimov

Complex Application Design
Complex Application DesignComplex Application Design
Complex Application DesignOrkhan Gasimov
 
Cloud Native Spring - The role of Spring Cloud after Kubernetes became a main...
Cloud Native Spring - The role of Spring Cloud after Kubernetes became a main...Cloud Native Spring - The role of Spring Cloud after Kubernetes became a main...
Cloud Native Spring - The role of Spring Cloud after Kubernetes became a main...Orkhan Gasimov
 
Digital Transformation - Why? How? What?
Digital Transformation - Why? How? What?Digital Transformation - Why? How? What?
Digital Transformation - Why? How? What?Orkhan Gasimov
 
Service Mesh - Why? How? What?
Service Mesh - Why? How? What?Service Mesh - Why? How? What?
Service Mesh - Why? How? What?Orkhan Gasimov
 
Angular Web Components
Angular Web ComponentsAngular Web Components
Angular Web ComponentsOrkhan Gasimov
 
Vert.x - Reactive & Distributed [Devoxx version]
Vert.x - Reactive & Distributed [Devoxx version]Vert.x - Reactive & Distributed [Devoxx version]
Vert.x - Reactive & Distributed [Devoxx version]Orkhan Gasimov
 
Vertx - Reactive & Distributed
Vertx - Reactive & DistributedVertx - Reactive & Distributed
Vertx - Reactive & DistributedOrkhan Gasimov
 
Spring Cloud: API gateway upgrade & configuration in the cloud
Spring Cloud: API gateway upgrade & configuration in the cloudSpring Cloud: API gateway upgrade & configuration in the cloud
Spring Cloud: API gateway upgrade & configuration in the cloudOrkhan Gasimov
 
Designing Fault Tolerant Microservices
Designing Fault Tolerant MicroservicesDesigning Fault Tolerant Microservices
Designing Fault Tolerant MicroservicesOrkhan Gasimov
 
Refactoring Monolith to Microservices
Refactoring Monolith to MicroservicesRefactoring Monolith to Microservices
Refactoring Monolith to MicroservicesOrkhan Gasimov
 
Fault Tolerance in Distributed Environment
Fault Tolerance in Distributed EnvironmentFault Tolerance in Distributed Environment
Fault Tolerance in Distributed EnvironmentOrkhan Gasimov
 
Patterns of Distributed Application Design
Patterns of Distributed Application DesignPatterns of Distributed Application Design
Patterns of Distributed Application DesignOrkhan Gasimov
 
Secured REST Microservices with Spring Cloud
Secured REST Microservices with Spring CloudSecured REST Microservices with Spring Cloud
Secured REST Microservices with Spring CloudOrkhan Gasimov
 
Data Microservices with Spring Cloud
Data Microservices with Spring CloudData Microservices with Spring Cloud
Data Microservices with Spring CloudOrkhan Gasimov
 

Mehr von Orkhan Gasimov (15)

Complex Application Design
Complex Application DesignComplex Application Design
Complex Application Design
 
Cloud Native Spring - The role of Spring Cloud after Kubernetes became a main...
Cloud Native Spring - The role of Spring Cloud after Kubernetes became a main...Cloud Native Spring - The role of Spring Cloud after Kubernetes became a main...
Cloud Native Spring - The role of Spring Cloud after Kubernetes became a main...
 
Digital Transformation - Why? How? What?
Digital Transformation - Why? How? What?Digital Transformation - Why? How? What?
Digital Transformation - Why? How? What?
 
Service Mesh - Why? How? What?
Service Mesh - Why? How? What?Service Mesh - Why? How? What?
Service Mesh - Why? How? What?
 
Angular Web Components
Angular Web ComponentsAngular Web Components
Angular Web Components
 
Vert.x - Reactive & Distributed [Devoxx version]
Vert.x - Reactive & Distributed [Devoxx version]Vert.x - Reactive & Distributed [Devoxx version]
Vert.x - Reactive & Distributed [Devoxx version]
 
Vertx - Reactive & Distributed
Vertx - Reactive & DistributedVertx - Reactive & Distributed
Vertx - Reactive & Distributed
 
Spring Cloud: API gateway upgrade & configuration in the cloud
Spring Cloud: API gateway upgrade & configuration in the cloudSpring Cloud: API gateway upgrade & configuration in the cloud
Spring Cloud: API gateway upgrade & configuration in the cloud
 
Designing Fault Tolerant Microservices
Designing Fault Tolerant MicroservicesDesigning Fault Tolerant Microservices
Designing Fault Tolerant Microservices
 
Refactoring Monolith to Microservices
Refactoring Monolith to MicroservicesRefactoring Monolith to Microservices
Refactoring Monolith to Microservices
 
Fault Tolerance in Distributed Environment
Fault Tolerance in Distributed EnvironmentFault Tolerance in Distributed Environment
Fault Tolerance in Distributed Environment
 
Angular or React
Angular or ReactAngular or React
Angular or React
 
Patterns of Distributed Application Design
Patterns of Distributed Application DesignPatterns of Distributed Application Design
Patterns of Distributed Application Design
 
Secured REST Microservices with Spring Cloud
Secured REST Microservices with Spring CloudSecured REST Microservices with Spring Cloud
Secured REST Microservices with Spring Cloud
 
Data Microservices with Spring Cloud
Data Microservices with Spring CloudData Microservices with Spring Cloud
Data Microservices with Spring Cloud
 

Kürzlich hochgeladen

Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfjoe51371421
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
Test Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendTest Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendArshad QA
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software DevelopersVinodh Ram
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️anilsa9823
 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about usDynamic Netsoft
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...gurkirankumar98700
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AIABDERRAOUF MEHENNI
 

Kürzlich hochgeladen (20)

Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdf
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Test Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendTest Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and Backend
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software Developers
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about us
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 

Spring Cloud: Why? How? What?

  • 2. Speaker • Orkhan Gasimov, Software Engineer – 14 years of software engineering; – variety of technologies (languages & frameworks); – solution design and implementation; • Teaching training courses. – Architecture. – Java. – JavaScript / TypeScript. • Author of training courses. – Spring Cloud. – Akka for Java.
  • 3. Spring Cloud • Why? – Provide the Spring developer with an easily consumable set of tools to build distributed systems. Motivation
  • 4. Spring Cloud • Why? – Provide the Spring developer with an easily consumable set of tools to build distributed systems. • How? – Wrapping other implementation stacks, that are then consumed via the familiar tools. Motivation Process
  • 5. Spring Cloud • Why? – Provide the Spring developer with an easily consumable set of tools to build distributed systems. • How? – Wrapping other implementation stacks, that are then consumed via the familiar tools. • What? – Set of tools for developers to quickly build some of the common patterns in distributed systems. Process Motivation Product
  • 6. Spring Cloud • Microservices • Core Components • Instrumentation • Security • Messaging & Streaming • Distributed Event Bus • Configuration Management • Questions & Answers
  • 7. Spring Cloud • Spring Cloud Netflix • Spring Cloud Sleuth • Spring Cloud Security • Spring Cloud Streams • Spring Cloud Bus • Spring Cloud Config
  • 8. Examples • A few notes about code examples: – We will see • Spring Cloud project names. • Simplified Java code examples. • Basic configuration options. – We omit • Dependencies – easy to find at official website. • Extensive configuration options – available in official documentation.
  • 10. Microservices • Approach or Architecture? – Approach • Introduces general guidelines on ways of performing the work. – Architecture • Defines the structured solution that meets all of the technical and operational requirements.
  • 11. Microservices • Approach from organizational point of view. – Which tools are going to be used? – What technology stacks are available? – How processes are going to be organized? – Which protocols will be used? – How the deployment will be organized?
  • 12. Microservices • Architecture from development point of view. – Which elements will be used to build the software? – How relations between elements will be organized? – How elements will be structured? – How elements, relations and structure are configured?
  • 21. Core Components • Spring Cloud – built on top of Spring Boot. – ready for microservice development. • Multiple implementations of common patterns. – E.g. support for Eureka, ZooKeeper and Consul.
  • 22. Core Components • Spring Cloud Netflix. – Discovery server and client. – Latency and fault tolerance library. – Client-side load balancing over RestTemplate. – Declarative REST client. – Edge proxy for API gateway implementations.
  • 23. Core Components – Service Discovery • A simple discovery server implementation using Spring Cloud looks like: – By default Eureka will be available at http://localhost:8761/eureka – Custom settings should be configured in bootstrap.yml (or .properties) import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication @EnableEurekaServer public class DiscoveryServer { public static void main(String[] args) { SpringApplication.run(DiscoveryServer.class, args); } }
  • 24. Core Components – Service Discovery • A simple discovery server configuration looks like: spring: application: name: DiscoveryServer server: port: 8761 eureka: server: enable-self-preservation: false
  • 25. Core Components – Service Discovery • Eureka – Self-Preservation – Peer Awareness – Availability Zones – Regions
  • 26. Core Components – Service Discovery • Peer awareness configuration for two discovery server instances looks like: spring: application: name: DiscoveryServer server: port: 8761 eureka: server: enable-self-preservation: false client: fetchRegistry: true registerWithEureka: true serviceUrl: defaultZone: http://host2:8761/eureka spring: application: name: DiscoveryServer server: port: 8761 eureka: server: enable-self-preservation: false client: fetchRegistry: true registerWithEureka: true serviceUrl: defaultZone: http://host1:8761/eureka
  • 27. Core Components – Service Discovery • A simple service with discovery client looks like: @SpringBootApplication @EnableEurekaClient //@EnableDiscoveryClient @RestController public class HelloService { @RequestMapping("/hello") public String sayHello(@RequestParam String name) { return "Hello " + name; } public static void main(String[] args) { SpringApplication.run(HelloService.class, args); } }
  • 28. Core Components – Service Discovery • A simple service configuration looks like: spring: application: name: HelloService eureka: client: fetchRegistry: true registerWithEureka: true serviceUrl: defaultZone: http://localhost:8761/eureka
  • 29. Core Components – Load Balancing • How do we load balance between instances of HelloService?
  • 30. Core Components – Load Balancing • Ribbon – the client-side load balancer. • Ribbon supports auto-retry, time-out and other useful configurable features.
  • 31. Core Components – Load Balancing • Spring Cloud implements Ribbon as a wrapper over RestTemplate. • Default load balancing logic is round-robin.
  • 32. Core Components – Load Balancing @Bean @LoadBalanced public RestTemplate restTmpl() { return new RestTemplate(); } @RestController public class HelloWorldRest { @Autowired private RestTemplate restTmpl; @RequestMapping("/hello-world") public String sayHello() { String url = "http://HelloService/hello?name=World"; return restTmpl.getForObject(url, String.class); } }
  • 33. Core Components – Circuit Breaker • Remote service fails or is not available:
  • 34. Core Components – Circuit Breaker • Remote service fails or is not available: – Long-running requests that result in failure.
  • 35. Core Components – Circuit Breaker • Remote service fails or is not available: – Long-running requests that result in failure. – Users wait to get the failure response.
  • 36. Core Components – Circuit Breaker • Remote service fails or is not available: – Long-running requests that result in failure. – Users wait to get the failure response. • Failure continues for some unpredictable time:
  • 37. Core Components – Circuit Breaker • Remote service fails or is not available: – Long-running requests that result in failure. – Users wait to get the failure response. • Failure continues for some unpredictable time: – More dependent services can be blocked.
  • 38. Core Components – Circuit Breaker • Remote service fails or is not available: – Long-running requests that result in failure. – Users wait to get the failure response. • Failure continues for some unpredictable time: – More dependent services can be blocked. – Longer response times, more users have to wait…
  • 39. Core Components – Circuit Breaker • Some of service dependencies will inevitably fail.
  • 40. Core Components – Circuit Breaker • Some of service dependencies will inevitably fail. – Cascading failures turn into a chain reaction.
  • 41. Core Components – Circuit Breaker • Some of service dependencies will inevitably fail. – Cascading failures turn into a chain reaction. • Hystrix helps to control the interactions between distributed services by adding latency tolerance and fault tolerance logic.
  • 42. Core Components – Circuit Breaker • Hystrix – the circuit breaker. – Isolates points of access between services. – Stops cascading failures. – Provides fallback options.
  • 43. Core Components – Circuit Breaker @SpringBootApplication @EnableHystrix //@EnableCircuitBreaker @RestController //other annotations – Eureka, etc. public class HelloWorldService { //beans, autowires, main method... @HystrixCommand(fallbackMethod = "helloFallback") @RequestMapping("/hello-world") public String sayHello() { String url = "http://HelloService/hello?name=World"; return restTmpl.getForObject(url, String.class); } private String helloFallback() { return "Sorry World, try again later please."; } }
  • 44. Core Components – REST Client • Feign – declarative REST client.
  • 45. Core Components – REST Client • Feign – declarative REST client. – Integrated support for Eureka, Ribbon and Hystrix.
  • 46. Core Components – REST Client • Feign – declarative REST client. – Integrated support for Eureka, Ribbon and Hystrix. – Enabled by adding @EnableFeignClients to your configuration class.
  • 47. Core Components – REST Client • Feign – declarative REST client. – Integrated support for Eureka, Ribbon and Hystrix. – Enabled by adding @EnableFeignClients to your configuration class. @FeignClient(name = "HelloService") public interface HelloClient { @RequestMapping("/hello") String sayHello(@RequestParam String name); }
  • 48. Core Components – REST Client • Feign client with Hystrix fallbacks: @FeignClient(name = "HelloService", fallback = HelloFallback.class) public interface HelloClient { @RequestMapping("/hello") String sayHello(@RequestParam String name); } @Component public class HelloFallback implements HelloClient { @Override public String sayHello(String name) { return "Sorry " + name + ", try again later please"; } }
  • 49. Core Components • Let’s imagine we are building an application with microservices architecture. • Services depend on other services.
  • 50. Core Components • Let’s imagine we are building an application with microservices architecture. • Services depend on other services. • Services find each other through service discovery.
  • 51. Core Components • Let’s imagine we are building an application with microservices architecture. • Services depend on other services. • Services find each other through service discovery. • How do clients integrate with our microservices?
  • 52. Core Components – API Gateway • API gateway is the single entry point for clients.
  • 53. Core Components – API Gateway • API gateway is the single entry point for clients. • The API gateway handles requests in one of two ways:
  • 54. Core Components – API Gateway • API gateway is the single entry point for clients. • The API gateway handles requests in one of two ways: – Simply proxy/route requests to the appropriate service.
  • 55. Core Components – API Gateway • API gateway is the single entry point for clients. • The API gateway handles requests in one of two ways: – Simply proxy/route requests to the appropriate service. – Expose a different API for each client.
  • 56. Core Components – API Gateway • API gateway – the single entry point to your microservices – eliminates the hassle of dealing with your internal infrastructure. • Zuul – the edge proxy which is integrated with Eureka, Ribbon & Hystrix.
  • 57. Core Components – API Gateway • Zuul configuration example: zuul: ignoredServices: '*' routes: hello: path: /hello/** serviceId: HelloService stripPrefix: true hello-world: path: /world/** serviceId: HelloWorldService stripPrefix: true @SpringBootApplication @EnableZuulProxy public class ApiProxy { //main method... }
  • 58. Core Components • Spring Cloud Netflix – Eureka • service discovery server and client. – Ribbon • client-side load balancer. – Hystrix • circuit breaker. – Feign • declarative REST client. – Zuul • edge-proxy for API gateway implementations.
  • 60. Instrumentation • Hystrix – near real-time metrics. – Metrics stream is available at /hystrix.stream. – Can be visualized with Hystrix Dashboard.
  • 62. Instrumentation • Hystrix metrics stream contain: – Health indicator; – Traffic volume; – Request rate; – Host count; – Error percentage; – Circuit-breaker status; – Latency stats; – Success count – Reject count; – Timeouts; – Failures/Exception; – Etc.
  • 63. Instrumentation • Turbine – aggregates metrics from Hystrix instrumented cluster.
  • 64. Instrumentation • Turbine AMQP allows any application post metrics to the single stream. – Turbine Server – aggregates all metrics sent to the stream.
  • 65. Instrumentation • Spring Cloud Sleuth – distributed tracing compatible with Dapper, Zipkin and HTrace.
  • 66. Instrumentation • Integrated tools for metrics and tracing – Hystrix Stream and Hystrix Dashboard • near real-time monitoring of circuit breakers at a single host. – Turbine • the Hystrix Stream aggregator that allows to monitor all nodes in cluster. – Turbine AMQP • the Hystrix Stream aggregator that allows to monitor all applications in network. – Sleuth & Zipkin • distributed tracing of cascading calls between microservices.
  • 68. Security • Implementations: – API Gateway / Perimeter Security; – Everybody Can Auth (with HTTP Basic); – Basic + Central Auth DB; – Sessions Everywhere; – API Tokens; – SAML; – Etc.
  • 69. Security • Common concerns: – Central user store bottleneck; – Lack of single sign on; – Statelessness; – Exposure of user credentials; – Lack of fine grained authorization; – Interoperability with non browser clients;
  • 71. Security • Spring Cloud Security – OAuth2 – delegated authorization.
  • 72. Security • Spring Cloud Security – OAuth2 – delegated authorization. – JWT (JSON WebToken) – self-contained tokens.
  • 73. Security • Spring Cloud Security – OAuth2 – delegated authorization. – JWT (JSON WebToken) – self-contained tokens. – OpenID Connect – delegated authentication.
  • 74. Security • Spring Cloud Security – OAuth2 – delegated authorization. – JWT (JSON WebToken) – self-contained tokens. – OpenID Connect – delegated authentication. – SSO through API gateway using Zuul.
  • 75. Security User Authentication and Authorization server (UAA) sample configuration
  • 76. Security – UAA sample configuration @Configuration @EnableAuthorizationServer public class OAuth2Configuration extends AuthorizationServerConfigurerAdapter { @Autowired @Qualifier("authenticationManagerBean") private AuthenticationManager authenticationManager; @Bean public TokenStore tokenStore() { return new JwtTokenStore(jwtTokenEnhancer()); } @Bean protected JwtAccessTokenConverter jwtTokenEnhancer() { KeyStoreKeyFactory keyStoreKeyFactory = new KeyStoreKeyFactory( new ClassPathResource("jwt.jks"), "mySecretKey".toCharArray() ); JwtAccessTokenConverter converter = new JwtAccessTokenConverter(); converter.setKeyPair(keyStoreKeyFactory.getKeyPair("jwt")); return converter; }
  • 77. Security – UAA sample configuration @Override public void configure(ClientDetailsServiceConfigurer clients) throws Exception { clients.inMemory() .withClient("client") .secret("secret") .scopes("openid") .autoApprove(true) .authorizedGrantTypes("implicit","refresh_token", "password", "authorization_code"); } @Override public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception { endpoints.tokenStore(tokenStore()).tokenEnhancer(jwtTokenEnhancer()) .authenticationManager(authenticationManager); } @Override public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception { oauthServer.tokenKeyAccess("permitAll()").checkTokenAccess("permitAll()"); } }
  • 78. Security – UAA sample configuration @Configuration class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override @Bean public AuthenticationManager authenticationManagerBean() throws Exception { return super.authenticationManagerBean(); } @Override protected void configure(HttpSecurity http) throws Exception { http .csrf().disable() .authorizeRequests() .antMatchers("/**").authenticated() .and().httpBasic() .and().formLogin().permitAll() .and().logout(); }
  • 79. Security – UAA sample configuration @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication() .withUser("account") .password("account") .authorities("ACCOUNT_READ", "ACCOUNT_WRITE", "ACCOUNT_PROCESS") .and() .withUser("card") .password("card") .authorities("CARD_WRITE", "ACCOUNT_READ") .and() .withUser("client") .password("client") .authorities("CLIENT_READ", "CLIENT_WRITE", "ACCOUNT_READ", "CARD_READ") .and() .withUser("processing") .password("processing") .authorities("PROCESSING", "ACCOUNT_PROCESS"); } }
  • 81. Security – Resource Server configuration @Configuration @EnableResourceServer public class ResourceServerConfig extends ResourceServerConfigurerAdapter { @Bean @LoadBalanced public OAuth2RestTemplate oAuth2RestTemplate(OAuth2ProtectedResourceDetails details) { return new OAuth2RestTemplate(details); } @Override public void configure(HttpSecurity http) throws Exception { http .csrf().disable() .authorizeRequests() .antMatchers("/**").authenticated() .antMatchers(HttpMethod.GET, "/test").hasAuthority("PROCESSING"); } }
  • 82. Security – Resource Server configuration security: oauth2: client: clientId: client clientSecret: secret scope: openid accessTokenUri: http://localhost:8500/uaa/oauth/token userAuthorizationUri: http://localhost:8500/uaa/oauth/authorize resource: jwt: key-uri: http://localhost:8500/uaa/oauth/token_key
  • 84. Security – SSO with Zuul • To enable SSO at Zuul: @SpringBootApplication @EnableZuulProxy @EnableOAuth2Sso public class ApiGateway { //main method... }
  • 85. Security • Spring Cloud Security – OAuth2 for delegated authorization. – JWT for self-contained tokens. – OpenID Connect for delegated authentication. – SSO with Zuul at API gateway.
  • 87. Messaging & Streaming • Spring Cloud Stream – messaging/streaming API.
  • 88. Messaging & Streaming • Spring Cloud Stream – messaging/streaming API. • Features: – Publish-Subscribe; – Consumer Groups; – Partitioning;
  • 89. Messaging & Streaming • Spring Cloud Stream – messaging/streaming API. • Features: – Publish-Subscribe; – Consumer Groups; – Partitioning; • REST – synchronous microservices. • Spring Cloud Stream – asynchronous microservices.
  • 90. Messaging & Streaming • Basic channel abstraction interfaces: – Sink – output message channel. – Source – input message channel. – Processor – extends Sink and Source.
  • 91. Messaging & Streaming • A simple processor application with Spring Cloud Stream looks like: @SpringBootApplication @EnableBinding(Processor.class) public class WordNumFilter { @StreamListener(Processor.INPUT) @SendTo(Processor.OUTPUT) private String filter(String word) { //filter numbers, return only words } //main method... }
  • 92. Messaging & Streaming • Configuration for the channels looks like: spring: application.name: WordNumFilter cloud.stream.bindings: input: destination: wordNumFilter group: WordNumFilters consumer: partitioned: true instanceCount: 2 instanceIndex: 0 output: destination: words
  • 94. Distributed Event Bus • Spring Cloud Bus – distributed event bus. – Built on top of Spring Cloud Stream. – Integrates with application events.
  • 95. Distributed Event Bus • Event publisher and listener example: public class MyEventPublisher { @Autowired private SpringCloudBusClient busClient; public void publishEvent(MyEvent event) { busClient.springCloudBusOutput().send( MessageBuilder.withPayload(event).build() ); } } @EventListener public void handleEvent(MyEvent event) { //or implement ApplicationListener<MyEvent> }
  • 97. Configuration Management • Configuring applications separately is uncomfortable.
  • 98. Configuration Management • Configuring applications separately is uncomfortable. – Application are deployed to different hosts.
  • 99. Configuration Management • Configuring applications separately is uncomfortable. – Application are deployed to different hosts. – Different environments (DEV, RC, PROD).
  • 100. Configuration Management • Spring Cloud Config – server and client support for external configuration.
  • 101. Configuration Management • Spring Cloud Config – server and client support for external configuration. • Features: – HTTP-based API for external configuration.
  • 102. Configuration Management • Spring Cloud Config – server and client support for external configuration. • Features: – HTTP-based API for external configuration. – Encrypt and decrypt property values.
  • 103. Configuration Management • Spring Cloud Config – server and client support for external configuration. • Features: – HTTP-based API for external configuration. – Encrypt and decrypt property values. – Git as default repository storage. • File-based, SVN and other options are available.
  • 104. Configuration Management • Config Server is the central place to manage external properties for applications across all environments.
  • 105. Configuration Management Config Server application: Config Server configuration: Config Client configuration: @SpringBootApplication @EnableConfigServer public class ConfigServer { public static void main(String[] args) { SpringApplication.run(ConfigServer.class, args); } } spring.cloud.config.server.git: uri: http://git.xyz/config-repo username: user password: passkey spring: application.name: AppName cloud.config.uri: http://host:8182
  • 106. Configuration Management • Spring Cloud Config Monitor – Configuration updates are delivered to applications without restart.
  • 109. Questions & Answers • Spring Cloud Netflix – Eureka, Ribbon, Hystrix, Feign, Zuul – Hystrix Stream and Hystrix Dashboard – Turbine & Turbine AMQP • Spring Cloud Sleuth – Zipkin • Spring Cloud Security – OAuth2 + JWT, OpenID Connect + SSO • Spring Cloud Streams • Spring Cloud Bus • Spring Cloud Config