SlideShare a Scribd company logo
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!

More Related Content

What's hot

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
Kashif Ali Siddiqui
 
Introduction to Spring WebFlux #jsug #sf_a1
Introduction to Spring WebFlux #jsug #sf_a1Introduction to Spring WebFlux #jsug #sf_a1
Introduction to Spring WebFlux #jsug #sf_a1
Toshiaki Maki
 
Microservices architecture
Microservices architectureMicroservices architecture
Microservices architecture
Abdelghani Azri
 
Building Event Driven (Micro)services with Apache Kafka
Building Event Driven (Micro)services with Apache KafkaBuilding Event Driven (Micro)services with Apache Kafka
Building Event Driven (Micro)services with Apache Kafka
Guido Schmutz
 
Microservices Architecture - Cloud Native Apps
Microservices Architecture - Cloud Native AppsMicroservices Architecture - Cloud Native Apps
Microservices Architecture - Cloud Native Apps
Araf Karsh Hamid
 
Secret Management with Hashicorp’s Vault
Secret Management with Hashicorp’s VaultSecret Management with Hashicorp’s Vault
Secret Management with Hashicorp’s Vault
AWS Germany
 
Patterns of resilience
Patterns of resiliencePatterns of resilience
Patterns of resilience
Uwe Friedrichsen
 
Introduction to Spring Cloud
Introduction to Spring Cloud           Introduction to Spring Cloud
Introduction to Spring Cloud
VMware Tanzu
 
Microservices Architectures on Amazon Web Services
Microservices Architectures on Amazon Web ServicesMicroservices Architectures on Amazon Web Services
Microservices Architectures on Amazon Web Services
Amazon Web Services
 
Microservices
MicroservicesMicroservices
Microservices
Đức Giang Nguyễn
 
When NOT to use Apache Kafka?
When NOT to use Apache Kafka?When NOT to use Apache Kafka?
When NOT to use Apache Kafka?
Kai Wähner
 
Zuul @ Netflix SpringOne Platform
Zuul @ Netflix SpringOne PlatformZuul @ Netflix SpringOne Platform
Zuul @ Netflix SpringOne Platform
Mikey Cohen - Hiring Amazing Engineers
 
Introduction to Microservices
Introduction to MicroservicesIntroduction to Microservices
Introduction to Microservices
Amazon Web Services
 
Introduction to microservices
Introduction to microservicesIntroduction to microservices
Introduction to microservices
Anil Allewar
 
Spring Framework
Spring Framework  Spring Framework
Spring Framework
tola99
 
OpenAPI 3.0, And What It Means for the Future of Swagger
OpenAPI 3.0, And What It Means for the Future of SwaggerOpenAPI 3.0, And What It Means for the Future of Swagger
OpenAPI 3.0, And What It Means for the Future of Swagger
SmartBear
 
Microservice Architecture | Microservices Tutorial for Beginners | Microservi...
Microservice Architecture | Microservices Tutorial for Beginners | Microservi...Microservice Architecture | Microservices Tutorial for Beginners | Microservi...
Microservice Architecture | Microservices Tutorial for Beginners | Microservi...
Edureka!
 
Introduction to Microservices
Introduction to MicroservicesIntroduction to Microservices
Introduction to Microservices
Amazon Web Services
 
Azure API Management
Azure API ManagementAzure API Management
Azure API Management
Daniel Toomey
 
Introduction To Microservices
Introduction To MicroservicesIntroduction To Microservices
Introduction To Microservices
Lalit Kale
 

What's hot (20)

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 Spring WebFlux #jsug #sf_a1
Introduction to Spring WebFlux #jsug #sf_a1Introduction to Spring WebFlux #jsug #sf_a1
Introduction to Spring WebFlux #jsug #sf_a1
 
Microservices architecture
Microservices architectureMicroservices architecture
Microservices architecture
 
Building Event Driven (Micro)services with Apache Kafka
Building Event Driven (Micro)services with Apache KafkaBuilding Event Driven (Micro)services with Apache Kafka
Building Event Driven (Micro)services with Apache Kafka
 
Microservices Architecture - Cloud Native Apps
Microservices Architecture - Cloud Native AppsMicroservices Architecture - Cloud Native Apps
Microservices Architecture - Cloud Native Apps
 
Secret Management with Hashicorp’s Vault
Secret Management with Hashicorp’s VaultSecret Management with Hashicorp’s Vault
Secret Management with Hashicorp’s Vault
 
Patterns of resilience
Patterns of resiliencePatterns of resilience
Patterns of resilience
 
Introduction to Spring Cloud
Introduction to Spring Cloud           Introduction to Spring Cloud
Introduction to Spring Cloud
 
Microservices Architectures on Amazon Web Services
Microservices Architectures on Amazon Web ServicesMicroservices Architectures on Amazon Web Services
Microservices Architectures on Amazon Web Services
 
Microservices
MicroservicesMicroservices
Microservices
 
When NOT to use Apache Kafka?
When NOT to use Apache Kafka?When NOT to use Apache Kafka?
When NOT to use Apache Kafka?
 
Zuul @ Netflix SpringOne Platform
Zuul @ Netflix SpringOne PlatformZuul @ Netflix SpringOne Platform
Zuul @ Netflix SpringOne Platform
 
Introduction to Microservices
Introduction to MicroservicesIntroduction to Microservices
Introduction to Microservices
 
Introduction to microservices
Introduction to microservicesIntroduction to microservices
Introduction to microservices
 
Spring Framework
Spring Framework  Spring Framework
Spring Framework
 
OpenAPI 3.0, And What It Means for the Future of Swagger
OpenAPI 3.0, And What It Means for the Future of SwaggerOpenAPI 3.0, And What It Means for the Future of Swagger
OpenAPI 3.0, And What It Means for the Future of Swagger
 
Microservice Architecture | Microservices Tutorial for Beginners | Microservi...
Microservice Architecture | Microservices Tutorial for Beginners | Microservi...Microservice Architecture | Microservices Tutorial for Beginners | Microservi...
Microservice Architecture | Microservices Tutorial for Beginners | Microservi...
 
Introduction to Microservices
Introduction to MicroservicesIntroduction to Microservices
Introduction to Microservices
 
Azure API Management
Azure API ManagementAzure API Management
Azure API Management
 
Introduction To Microservices
Introduction To MicroservicesIntroduction To Microservices
Introduction To Microservices
 

Similar to 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 debugging
Andrey Kolodnitsky
 
.NET microservices with Azure Service Fabric
.NET microservices with Azure Service Fabric.NET microservices with Azure Service Fabric
.NET microservices with Azure Service Fabric
Davide 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 Enterprise
VMware 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, eureka
Binit 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 EE
Masoud Kalali
 
Structured Functional Automated Web Service Testing
Structured Functional Automated Web Service TestingStructured Functional Automated Web Service Testing
Structured Functional Automated Web Service Testing
rdekleijn
 
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
Markus 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.pdf
Tamir Dresher
 
Ibm cloud nativenetflixossfinal
Ibm cloud nativenetflixossfinalIbm cloud nativenetflixossfinal
Ibm cloud nativenetflixossfinalaspyker
 
Netflix0SS Services on Docker
Netflix0SS Services on DockerNetflix0SS Services on Docker
Netflix0SS Services on DockerDocker, Inc.
 
Netflix Cloud Platform and Open Source
Netflix Cloud Platform and Open SourceNetflix Cloud Platform and Open Source
Netflix Cloud Platform and Open Source
aspyker
 
Микросервисы со Spring Boot & Spring Cloud
Микросервисы со Spring Boot & Spring CloudМикросервисы со Spring Boot & Spring Cloud
Микросервисы со Spring Boot & Spring Cloud
Vitebsk DSC
 
OpenStack Enabling DevOps
OpenStack Enabling DevOpsOpenStack Enabling DevOps
OpenStack Enabling DevOps
Cisco 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 saxena
IndicThreads
 
WebSockets in Enterprise Applications
WebSockets in Enterprise ApplicationsWebSockets in Enterprise Applications
WebSockets in Enterprise Applications
Pavel 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-2015
Pavel Chunyayev
 
Springboot Microservices
Springboot MicroservicesSpringboot Microservices
Springboot Microservices
NexThoughts Technologies
 

Similar to 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
 
Ibm cloud nativenetflixossfinal
Ibm cloud nativenetflixossfinalIbm cloud nativenetflixossfinal
Ibm cloud nativenetflixossfinal
 
Netflix0SS Services on Docker
Netflix0SS Services on DockerNetflix0SS Services on Docker
Netflix0SS Services on Docker
 
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
 
Springboot Microservices
Springboot MicroservicesSpringboot Microservices
Springboot Microservices
 

More from Orkhan Gasimov

Complex Application Design
Complex Application DesignComplex Application Design
Complex Application Design
Orkhan 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 Components
Orkhan 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 & Distributed
Orkhan 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 cloud
Orkhan Gasimov
 
Designing Fault Tolerant Microservices
Designing Fault Tolerant MicroservicesDesigning Fault Tolerant Microservices
Designing Fault Tolerant Microservices
Orkhan Gasimov
 
Refactoring Monolith to Microservices
Refactoring Monolith to MicroservicesRefactoring Monolith to Microservices
Refactoring Monolith to Microservices
Orkhan Gasimov
 
Fault Tolerance in Distributed Environment
Fault Tolerance in Distributed EnvironmentFault Tolerance in Distributed Environment
Fault Tolerance in Distributed Environment
Orkhan Gasimov
 
Angular or React
Angular or ReactAngular or React
Angular or React
Orkhan Gasimov
 
Patterns of Distributed Application Design
Patterns of Distributed Application DesignPatterns of Distributed Application Design
Patterns of Distributed Application Design
Orkhan Gasimov
 
Secured REST Microservices with Spring Cloud
Secured REST Microservices with Spring CloudSecured REST Microservices with Spring Cloud
Secured REST Microservices with Spring Cloud
Orkhan Gasimov
 
Data Microservices with Spring Cloud
Data Microservices with Spring CloudData Microservices with Spring Cloud
Data Microservices with Spring Cloud
Orkhan Gasimov
 

More from 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
 

Recently uploaded

Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
Cyanic lab
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
Tier1 app
 
BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024
Ortus Solutions, Corp
 
Into the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdfInto the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdf
Ortus Solutions, Corp
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
takuyayamamoto1800
 
Corporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMSCorporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMS
Tendenci - The Open Source AMS (Association Management Software)
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
Max Andersen
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
NYGGS Automation Suite
 
A Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdfA Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdf
kalichargn70th171
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
Google
 
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke
 
RISE with SAP and Journey to the Intelligent Enterprise
RISE with SAP and Journey to the Intelligent EnterpriseRISE with SAP and Journey to the Intelligent Enterprise
RISE with SAP and Journey to the Intelligent Enterprise
Srikant77
 
Graphic Design Crash Course for beginners
Graphic Design Crash Course for beginnersGraphic Design Crash Course for beginners
Graphic Design Crash Course for beginners
e20449
 
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdfEnhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Jay Das
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
Philip Schwarz
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Globus
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
Globus
 
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdfDominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
AMB-Review
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns
 

Recently uploaded (20)

Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
 
BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024
 
Into the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdfInto the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdf
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
 
Corporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMSCorporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMS
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
 
A Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdfA Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdf
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
 
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
 
RISE with SAP and Journey to the Intelligent Enterprise
RISE with SAP and Journey to the Intelligent EnterpriseRISE with SAP and Journey to the Intelligent Enterprise
RISE with SAP and Journey to the Intelligent Enterprise
 
Graphic Design Crash Course for beginners
Graphic Design Crash Course for beginnersGraphic Design Crash Course for beginners
Graphic Design Crash Course for beginners
 
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdfEnhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
 
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdfDominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
 

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