SlideShare a Scribd company logo
1 of 53
Operating a High Velocity Large Organization
with Spring Cloud Microservices
Noriaki (Nori) Tatsumi
Capital One
Who we are
2
Data Lake
Powered by C1 Data Intelligence Team
CC Image by Stanislav Sedov on Flickr
Continuous Delivery
Build, test, and release fast and frequently to operate high velocity organization
4
Prerequisite. Not luxury.
Continuous delivery principles
• Eliminate non-value added actions
• Release process must be repeatable and reliable
• Quality is built in
• Version everything
• Done = “Released”
• Small batches of features and experimentations
• Everyone is responsible
• Kaizen – Improve continuously
5
Our challenges
Category Examples
Complex systems Large code base and deployment
Implementation sensitivity
Test feedback speed
Many teams Collaboration of design & technology
Merge conflicts
Non functional qualities Security
High availability, reliability, maintainability
Same qualities across components/features
Compliance Traceability
Data lineage
Legacy and 3rd party
applications
Implementation of same qualities as the rest
Processes Time consuming reviews and approvals
6
Customer expectation
• Quality
• Availability
• Velocity - fast and frequent deliveries of features
But they don’t know about the technical
challenges
7
8
Microservices architecture
http://martinfowler.com/articles/microservices.html
The twelve factor methodology
http://12factor.net/
9
Intranet/VPN
10
11
Spring Cloud
For foundation of microservices architecture
Spring Cloud
• *Spring Cloud Config
• *Spring Cloud Netflix
• Spring Cloud Bus
• Spring Cloud for Cloud Foundry
• Spring Cloud Cloud Foundry Service
Broker
• Spring Cloud Cluster
• Spring Cloud Consul
• *Spring Cloud Security
• *Spring Cloud Sleuth
• Spring Cloud Data Flow
12
• Spring Cloud Stream
• Spring Cloud Stream Modules
• Spring Cloud Task
• Spring Cloud Zookeeper
• Spring Cloud for Amazon Web
Services
• Spring Cloud Connectors
• Spring Cloud Starters
• Spring Cloud CLI
Technology selection
• JVM-based
• Developer productivity
• Production support
• Spring Boot
• Opinionated view for developer productivity
• Production grade qualities
• Netflix OSS
• Proven microservices technology
13
Decoupling
14
• Work in parallel
• Quicker and smaller deploys
• Domain driven design
• Do one scope of things well
Decoupling
15
• Work in parallel
• Quicker and smaller deploys
• Domain driven design
• Do one scope of things well
• Technology stack agnostic
Decoupling
16
• Work in parallel
• Quicker and smaller deploys
• Domain driven design
• Do one scope of things well
• Technology stack agnostic
• Functions are shareable
Decoupling
17
• Work in parallel
• Quicker and smaller deploys
• Domain driven design
• Do one scope of things well
• Technology stack agnostic
• Functions are shareable
• Independent scalability by comp.
• Greater resiliency & availability
• Continuous delivery friendly
This looks hard to orchestrate
18
Service discovery (registry)
• Netflix Eureka (HashiCorp Consul, Apache Zookeeper)
• Locate services
• Load balancing
• Failover
• Resiliency
19
20
<application>
<name>...</name>
<instance>
<instanceId>... </instanceId>
<hostName>... </hostName>
<app>...</app>
<ipAddr>...</ipAddr>
<status>UP</status>
<overriddenstatus>UNKNOWN</overriddenstatus>
<port enabled="false">...</port>
<securePort enabled="true">...</securePort>
<countryId>1</countryId>
<dataCenterInfo class="com.netflix.appinfo.AmazonInfo">
<name>Amazon</name>
<metadata>
<accountId>...</accountId>
<local-hostname>... </local-hostname>
<instance-id>...</instance-id>
<local-ipv4>...</local-ipv4>
<instance-type>...</instance-type>
<vpc-id>...</vpc-id>
<ami-id>...</ami-id>
<mac>...</mac>
<availability-zone>...</availability-zone>
</metadata>
</dataCenterInfo>
<leaseInfo>
<renewalIntervalInSecs>...</renewalIntervalInSecs>
<durationInSecs>...</durationInSecs>
…..
Service discovery (registry)
21
@SpringBootApplication
@EnableEurekaServer
public class Discovery {
public static void main(String[] args) {
SpringApplication.run(Discovery.class, args);
}
}
Service discovery (registry)
22
eureka:
instance:
appname: discovery
app-group-name: bedrock
lease-renewal-interval-in-seconds: 30 #sending heartbeats; 90 secs removes from registry
eureka.instance.preferIpAddress: false
home-page-url: http://${spring.cloud.client.hostname}:${server.port}/discovery
health-check-url:
http://${spring.cloud.client.hostname}:${management.port}${management.context-path}/health
status-page-url:
http://${spring.cloud.client.hostname}:${management.port}${management.context-path}/info
password: changeme
dashboard:
path: /discovery
client:
serviceUrl:
defaultZone: http://user:changeme@peer2:8761/eureka/
healthcheck:
enabled: true
Making your Spring Boot app discoverable
23
@SpringBootApplication
@EnableDiscoveryClient
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Making your Spring Boot app discoverable
24
protected static void registerShutdownHooks() {
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
LOG.info("Shutting down, unregister from discovery service!");
DiscoveryManager.getInstance().shutdownComponent();
}
});
…..
}
Making your Spring Boot app discoverable
25
@Bean
@Profile("aws")
public EurekaInstanceConfigBean eurekaInstanceAwsConfig(InetUtils inetUtils) {
LOG.info("Configuring this instance to be Amazon aware...");
EurekaInstanceConfigBean config = new EurekaInstanceConfigBean(inetUtils);
AmazonInfo info = AmazonInfo.Builder.newBuilder().autoBuild("eureka");
config.setDataCenterInfo(info);
return config;
}
Tip: Some Spring Cloud default configurations such as the Eureka instance ID
and the Eureka instance port doesn’t take effect when customizing
EurekaInstanceConfigBean. Set them explicitly.
Making your non-Spring Boot app
discoverable
Eureka Client (Java)
https://github.com/Netflix/eureka/wiki/Understanding-eureka-client-server-
communication
Eureka REST API (Polyglot)
https://github.com/Netflix/eureka/wiki/Eureka-REST-operations
Note: Omit “/v2” in URI
Sidecar/App Gateway (Polyglot)
Sits next to your app. Enables applications to be service discoverable and secure
without code modification.
26
Service discovery clients
• Netflix Eureka Client
• Spring Cloud
• Feign
• Spring RestTemplate
• Any HTTP client
27
Spring Boot Admin with Eureka
28
https://github.com/codecentric/spring-boot-admin
Spring Boot Admin with Eureka
29
@SpringBootApplication
@EnableAutoConfiguration
@EnableDiscoveryClient
@EnableAdminServer
public class Admin extends BaseSpringBootApplication {
public static void main(String[] args) {
SpringApplication.run(Admin.class, args);
}
}
Spring Boot Admin with Eureka
30
@Component
public class EurekaApplicationDiscoveryListener extends ApplicationDiscoveryListener {
@Autowired
public EurekaApplicationDiscoveryListener(DiscoveryClient discoveryClient, ApplicationRegistry registry) {
super(discoveryClient, registry);
ServiceInstanceConverter converter = new DefaultServiceInstanceConverter() {
@Override
public Application convert(ServiceInstance instance) {
EurekaDiscoveryClient.EurekaServiceInstance eurekaServiceInstance =
(EurekaDiscoveryClient.EurekaServiceInstance) instance;
final Application temp = super.convert(instance);
final Application converted = Application.create(temp)
.withHealthUrl(eurekaServiceInstance.getInstanceInfo().getHealthCheckUrl())
.withManagementUrl(eurekaServiceInstance.getInstanceInfo().getStatusPageUrl().replaceFirst("/info", ""))
.withServiceUrl(eurekaServiceInstance.getInstanceInfo().getHomePageUrl())
.build();
return converted;
}
};
setConverter(converter);
}
}
Spring Boot Admin with Component Auth
31
@Configuration
@AutoConfigureAfter({RevereseZuulProxyConfiguration.class})
protected static class ExtendedZuulProxyConfiguration extends
ZuulConfiguration {
@Bean
public ComponentAuthEnrichFilter componentAuthEnrichFilter() {
return new ComponentAuthEnrichFilter();
}
}
Centralized monitoring
32
@Component
public class MetricsShipper {
…..
public JSONObject composeMetrics() {
JSONObject metricsJson = new JSONObject();
metricsJson.put("timestamp", System.currentTimeMillis());
metricsJson.put("application", appName);
metricsJson.put("instance", eurekaInstanceConfig.getInstanceId());
metricsJson.put("status", healthEndpoint.invoke().getStatus().getCode());
Map<String, Object> metrics = metricsEndpoint.invoke();
for (String metricKey : metrics.keySet()) {
metricsJson.put(metricKey.replaceAll("[.]", "-"), metrics.get(metricKey));
}
return metricsJson;
}
@Scheduled(fixedRateString = "${monitoring.shipper.kafka.fixedRate}",
initialDelayString = "${monitoring.shipper.kafka.fixedRate}")
public void ship() { kafkaTarget.ship(composeMetrics()); }
}
Distributed tracing
33
http://cloud.spring.io/spring-cloud-sleuth/spring-cloud-sleuth.html
Distributed tracing
34
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
service1.log:2016-02-26 11:15:47.561 INFO
[service1,2485ec27856c56f4,2485ec27856c56f4,true] 68058 --- [nio-8081-exec-1]
i.s.c.sleuth.docs.service1.Application : Hello from service1. Calling service2
-----
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %I "%{x-b3-
spanid}i" "%{x-b3-traceid}i" "%{x-b3-parentspanid}i”
127.0.0.1 - - [24/May/2016:02:06:44 -0400] "POST
/elasticsearch/_msearch?ignore_unavailable=true&preference=1464070003866&ti
meout=0 HTTP/1.1" 200 148 7 http-nio-8444-exec-5 "27c37d6638ab6c87"
"150e347f81964ffd" "150e347f81964ffd"
Distributed tracing
35
Security
*Across all components in various languages
• SSO
• User authorization
• Component to component authentication and authorization
• CORS
• Appropriate routing
• Auditing and logging
• Insights and inspection
• Rate limiting
• A well known entry to platform
36
37
Intranet/VPN
Edge gateway
38
@SpringBootApplication
@EnableAutoConfiguration
@EnableZuulProxy
public class EdgeGateway {
public static void main(String[] args) throws Exception {
SpringApplication.run(EdgeGateway.class, args);
}
}
Edge gateway - Routing
39
zuul.ignoredServices=*
zuul.routes.root.path=/
zuul.routes.root.url=forward:/redirect
zuul.routes.app1.path=/app1/**
zuul.routes.app1.serviceId=app1
zuul.routes.app1.stripPrefix=false
zuul.routes.app1.sensitive-headers=Cookie,Set-Cookie
zuul.routes.app2.path=/app2/**
zuul.routes.app2.url=https://app2:8443
Edge gateway - Authentication
• SAML 2.0
Sample: https://github.com/vdenotaris/spring-boot-security-saml-sample
• OAuth 2.0
Sample: https://github.com/royclarkson/spring-rest-service-oauth
40
Edge gateway - Filter
41
@Component
public class ComponentAuthEnrichFilter extends ZuulFilter {
….
@Override
public String filterType() {
return FilterType.pre.name();
}
@Override
public int filterOrder() {
return FilterOrder.BASIC_AUTH_ENRICH_PRE_FILTER.getOrder();
}
@Override
public boolean shouldFilter() {
return isFilterEnabled;
}
@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
ctx.addZuulRequestHeader("Authorization", authorizationHeaderValue);
return null;
}
}
• Enrich requests
• Inspect requests
• Collect stats
• Redirect
• Etc.
Sidecar / app gateway
• Discover service registry
• Authentication and authorization
• Inspect compliance
• Auditing and logging
• Distributed tracing
• Health check
• Monitoring
42
Sidecar / app gateway
43
DEMO TIME!
Sidecar / app gateway (@EnableSidecar)
44
server:
port: 5678
spring:
application:
name: sidecar
sidecar:
port: 8000
health-uri: http://localhost:8000/health.json
Sidecar / app gateway (Custom
@EnableZuulProxy)
45
@Component
public class SidecarHealthIndicator extends AbstractHealthIndicator {
@Override
protected void doHealthCheck(Health.Builder builder) throws Exception {
if (AppHeartbeatCheck.isHealthy()) {
builder.up();
} else {
builder.outOfService().withDetail("Failed attempts",
AppHeartbeatCheck.getFailedAttempts());
}
}
}
-----------
sidecar.healthcheck.fixedRate=5000
sidecar.healthcheck.maxAttempts=3
sidecar.healthcheck.url=http://localhost:5601
sidecar.healthcheck.expectedResponseCode=200
Circuit breaker
• Help reduce resources tied up in operations
which are likely to fail with fallback
• Avoid waiting on timeouts for the client
• Avoid putting loads on a struggling server
• Zuul uses Netflix Hystrix
46
http://martinfowler.com/bliki/CircuitBreaker.html
Circuit breaker
47
@SpringBootApplication
@EnableCircuitBreaker
public class Application {
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class).web(true).run(args);
}
}
@Component
public class StoreIntegration {
@HystrixCommand(fallbackMethod = "defaultStores")
public Object getStores(Map<String, Object> parameters) {
//do stuff that might fail
}
public Object defaultStores(Map<String, Object> parameters) {
return /* something useful */;
}
}
Zuul gotchas
• No sticky session for your legacy and 3rd party apps that might need it
• WebSockets, Server-sent Events, HTTP2 not supported
48
Versioning
Artifacts - Semantic versioning
• MAJOR version when you make incompatible API changes
• MINOR version when you add functionality in a backwards-compatible manner
• PATCH version when you make backwards-compatible bug fixes
Configurations - Git revision hash
• All configurations applied via automation
49
Configuration
• There are more configurations to manage than monolith
• Spring Boot application properties (application.properties/yml)
• Spring Cloud bootstrap context (bootstrap.properties/yml)
• Parent context for main app (loaded before application properties)
• Loads configs from external properties (e.g. Spring Cloud Config Server)
• Encryption/decryption of sensitive properties
• Immutable infrastructure with automation
50
Other keys things…
• DevOps culture
• Good documentation for the microservices foundation for multiple teams to use
• Automate everything
51
Take away
• It’s not hard to get started with microservices… if you use Spring Cloud
• Start delivering faster and deploy more frequently
52
Learn More. Stay Connected.
Noriaki Tatsumi
noriaki.tatsumi@capitalone.com
https://www.linkedin.com
/company/capital-one
https://twitter.com
/capitalonejobs
https://github.com
/capitalone

More Related Content

What's hot

How does the Cloud Foundry Diego Project Run at Scale, and Updates on .NET Su...
How does the Cloud Foundry Diego Project Run at Scale, and Updates on .NET Su...How does the Cloud Foundry Diego Project Run at Scale, and Updates on .NET Su...
How does the Cloud Foundry Diego Project Run at Scale, and Updates on .NET Su...Amit Gupta
 
Change management in hybrid landscapes
Change management in hybrid landscapesChange management in hybrid landscapes
Change management in hybrid landscapesChris Kernaghan
 
Quick and dirty performance analysis
Quick and dirty performance analysisQuick and dirty performance analysis
Quick and dirty performance analysisChris Kernaghan
 
Hexagonal architecture for java applications
Hexagonal architecture for java applicationsHexagonal architecture for java applications
Hexagonal architecture for java applicationsFabricio Epaminondas
 
Continuous Performance Testing
Continuous Performance TestingContinuous Performance Testing
Continuous Performance TestingGrid Dynamics
 
Docker in Production: How RightScale Delivers Cloud Applications
Docker in Production: How RightScale Delivers Cloud ApplicationsDocker in Production: How RightScale Delivers Cloud Applications
Docker in Production: How RightScale Delivers Cloud ApplicationsRightScale
 
10 Tips to Pump Up Your Atlassian Performance
10 Tips to Pump Up Your Atlassian Performance10 Tips to Pump Up Your Atlassian Performance
10 Tips to Pump Up Your Atlassian PerformanceAtlassian
 
SAP TechEd 2013 session Tec118 managing your-environment
SAP TechEd 2013 session Tec118 managing your-environmentSAP TechEd 2013 session Tec118 managing your-environment
SAP TechEd 2013 session Tec118 managing your-environmentChris Kernaghan
 
Quali webinar de-mystifyind dev_ops-a practitioner’s perspective
Quali webinar de-mystifyind dev_ops-a practitioner’s perspectiveQuali webinar de-mystifyind dev_ops-a practitioner’s perspective
Quali webinar de-mystifyind dev_ops-a practitioner’s perspectiveQualiQuali
 
Infrastructure as Code Maturity Model v1
Infrastructure as Code Maturity Model v1Infrastructure as Code Maturity Model v1
Infrastructure as Code Maturity Model v1Gary Stafford
 
Software Architecture for DevOps and Continuous Delivery
Software Architecture for DevOps and Continuous DeliverySoftware Architecture for DevOps and Continuous Delivery
Software Architecture for DevOps and Continuous DeliveryEberhard Wolff
 
Group meeting: Identifying Information Disclosure in Web Applications with Re...
Group meeting: Identifying Information Disclosure in Web Applications with Re...Group meeting: Identifying Information Disclosure in Web Applications with Re...
Group meeting: Identifying Information Disclosure in Web Applications with Re...Yu-Hsin Hung
 
Putting the Sec into DevOps
Putting the Sec into DevOpsPutting the Sec into DevOps
Putting the Sec into DevOpsMaytal Levi
 
DOES SFO 2016 - Chris Fulton - CD for DBs
DOES SFO 2016 - Chris Fulton - CD for DBsDOES SFO 2016 - Chris Fulton - CD for DBs
DOES SFO 2016 - Chris Fulton - CD for DBsGene Kim
 
Andreas Grabner - Performance as Code, Let's Make It a Standard
Andreas Grabner - Performance as Code, Let's Make It a StandardAndreas Grabner - Performance as Code, Let's Make It a Standard
Andreas Grabner - Performance as Code, Let's Make It a StandardNeotys_Partner
 

What's hot (20)

Siebel monitoring
Siebel monitoringSiebel monitoring
Siebel monitoring
 
What's new in SBM 11.1
What's new in SBM 11.1What's new in SBM 11.1
What's new in SBM 11.1
 
PP_Eric_Gandt
PP_Eric_GandtPP_Eric_Gandt
PP_Eric_Gandt
 
How does the Cloud Foundry Diego Project Run at Scale, and Updates on .NET Su...
How does the Cloud Foundry Diego Project Run at Scale, and Updates on .NET Su...How does the Cloud Foundry Diego Project Run at Scale, and Updates on .NET Su...
How does the Cloud Foundry Diego Project Run at Scale, and Updates on .NET Su...
 
Change management in hybrid landscapes
Change management in hybrid landscapesChange management in hybrid landscapes
Change management in hybrid landscapes
 
Quick and dirty performance analysis
Quick and dirty performance analysisQuick and dirty performance analysis
Quick and dirty performance analysis
 
Hexagonal architecture for java applications
Hexagonal architecture for java applicationsHexagonal architecture for java applications
Hexagonal architecture for java applications
 
Continuous Performance Testing
Continuous Performance TestingContinuous Performance Testing
Continuous Performance Testing
 
Docker in Production: How RightScale Delivers Cloud Applications
Docker in Production: How RightScale Delivers Cloud ApplicationsDocker in Production: How RightScale Delivers Cloud Applications
Docker in Production: How RightScale Delivers Cloud Applications
 
10 Tips to Pump Up Your Atlassian Performance
10 Tips to Pump Up Your Atlassian Performance10 Tips to Pump Up Your Atlassian Performance
10 Tips to Pump Up Your Atlassian Performance
 
SAP TechEd 2013 session Tec118 managing your-environment
SAP TechEd 2013 session Tec118 managing your-environmentSAP TechEd 2013 session Tec118 managing your-environment
SAP TechEd 2013 session Tec118 managing your-environment
 
Quali webinar de-mystifyind dev_ops-a practitioner’s perspective
Quali webinar de-mystifyind dev_ops-a practitioner’s perspectiveQuali webinar de-mystifyind dev_ops-a practitioner’s perspective
Quali webinar de-mystifyind dev_ops-a practitioner’s perspective
 
QualiSystems-Brief TestShell
QualiSystems-Brief TestShellQualiSystems-Brief TestShell
QualiSystems-Brief TestShell
 
Infrastructure as Code Maturity Model v1
Infrastructure as Code Maturity Model v1Infrastructure as Code Maturity Model v1
Infrastructure as Code Maturity Model v1
 
Resolving problems & high availability
Resolving problems & high availabilityResolving problems & high availability
Resolving problems & high availability
 
Software Architecture for DevOps and Continuous Delivery
Software Architecture for DevOps and Continuous DeliverySoftware Architecture for DevOps and Continuous Delivery
Software Architecture for DevOps and Continuous Delivery
 
Group meeting: Identifying Information Disclosure in Web Applications with Re...
Group meeting: Identifying Information Disclosure in Web Applications with Re...Group meeting: Identifying Information Disclosure in Web Applications with Re...
Group meeting: Identifying Information Disclosure in Web Applications with Re...
 
Putting the Sec into DevOps
Putting the Sec into DevOpsPutting the Sec into DevOps
Putting the Sec into DevOps
 
DOES SFO 2016 - Chris Fulton - CD for DBs
DOES SFO 2016 - Chris Fulton - CD for DBsDOES SFO 2016 - Chris Fulton - CD for DBs
DOES SFO 2016 - Chris Fulton - CD for DBs
 
Andreas Grabner - Performance as Code, Let's Make It a Standard
Andreas Grabner - Performance as Code, Let's Make It a StandardAndreas Grabner - Performance as Code, Let's Make It a Standard
Andreas Grabner - Performance as Code, Let's Make It a Standard
 

Similar to Operating a High Velocity Large Organization with Spring Cloud Microservices

JCON_15FactorWorkshop.pptx
JCON_15FactorWorkshop.pptxJCON_15FactorWorkshop.pptx
JCON_15FactorWorkshop.pptxGrace Jansen
 
12 Factor App Methodology
12 Factor App Methodology12 Factor App Methodology
12 Factor App Methodologylaeshin park
 
Modernizing Testing as Apps Re-Architect
Modernizing Testing as Apps Re-ArchitectModernizing Testing as Apps Re-Architect
Modernizing Testing as Apps Re-ArchitectDevOps.com
 
Docker & aPaaS: Enterprise Innovation and Trends for 2015
Docker & aPaaS: Enterprise Innovation and Trends for 2015Docker & aPaaS: Enterprise Innovation and Trends for 2015
Docker & aPaaS: Enterprise Innovation and Trends for 2015WaveMaker, Inc.
 
Netflix Cloud Platform and Open Source
Netflix Cloud Platform and Open SourceNetflix Cloud Platform and Open Source
Netflix Cloud Platform and Open Sourceaspyker
 
Continuous Delivery: How RightScale Releases Weekly
Continuous Delivery: How RightScale Releases WeeklyContinuous Delivery: How RightScale Releases Weekly
Continuous Delivery: How RightScale Releases WeeklyRightScale
 
Cerberus_Presentation1
Cerberus_Presentation1Cerberus_Presentation1
Cerberus_Presentation1CIVEL Benoit
 
Cerberus : Framework for Manual and Automated Testing (Web Application)
Cerberus : Framework for Manual and Automated Testing (Web Application)Cerberus : Framework for Manual and Automated Testing (Web Application)
Cerberus : Framework for Manual and Automated Testing (Web Application)CIVEL Benoit
 
DevOps and Microservice
DevOps and MicroserviceDevOps and Microservice
DevOps and MicroserviceInho Kang
 
Netflix Cloud Architecture and Open Source
Netflix Cloud Architecture and Open SourceNetflix Cloud Architecture and Open Source
Netflix Cloud Architecture and Open Sourceaspyker
 
Containers, microservices and serverless for realists
Containers, microservices and serverless for realistsContainers, microservices and serverless for realists
Containers, microservices and serverless for realistsKarthik Gaekwad
 
Dutch Oracle Architects Platform - Reviewing Oracle OpenWorld 2017 and New Tr...
Dutch Oracle Architects Platform - Reviewing Oracle OpenWorld 2017 and New Tr...Dutch Oracle Architects Platform - Reviewing Oracle OpenWorld 2017 and New Tr...
Dutch Oracle Architects Platform - Reviewing Oracle OpenWorld 2017 and New Tr...Lucas Jellema
 
From 0 to DevOps in 80 Days [Webinar Replay]
From 0 to DevOps in 80 Days [Webinar Replay]From 0 to DevOps in 80 Days [Webinar Replay]
From 0 to DevOps in 80 Days [Webinar Replay]Dynatrace
 
Test-Driven-Development for Networking: Making CI Work for You by Colin McNam...
Test-Driven-Development for Networking: Making CI Work for You by Colin McNam...Test-Driven-Development for Networking: Making CI Work for You by Colin McNam...
Test-Driven-Development for Networking: Making CI Work for You by Colin McNam...DevOps4Networks
 
Containerisation Hack of a Legacy Software Solution - Alex Carter - CodeMill ...
Containerisation Hack of a Legacy Software Solution - Alex Carter - CodeMill ...Containerisation Hack of a Legacy Software Solution - Alex Carter - CodeMill ...
Containerisation Hack of a Legacy Software Solution - Alex Carter - CodeMill ...CodeMill digital skills
 
Securing Red Hat OpenShift Containerized Applications At Enterprise Scale
Securing Red Hat OpenShift Containerized Applications At Enterprise ScaleSecuring Red Hat OpenShift Containerized Applications At Enterprise Scale
Securing Red Hat OpenShift Containerized Applications At Enterprise ScaleDevOps.com
 
DevOps Fest 2020. Kohsuke Kawaguchi. GitOps, Jenkins X & the Future of CI/CD
DevOps Fest 2020. Kohsuke Kawaguchi. GitOps, Jenkins X & the Future of CI/CDDevOps Fest 2020. Kohsuke Kawaguchi. GitOps, Jenkins X & the Future of CI/CD
DevOps Fest 2020. Kohsuke Kawaguchi. GitOps, Jenkins X & the Future of CI/CDDevOps_Fest
 
10 tips for Cloud Native Security
10 tips for Cloud Native Security10 tips for Cloud Native Security
10 tips for Cloud Native SecurityKarthik Gaekwad
 

Similar to Operating a High Velocity Large Organization with Spring Cloud Microservices (20)

JCON_15FactorWorkshop.pptx
JCON_15FactorWorkshop.pptxJCON_15FactorWorkshop.pptx
JCON_15FactorWorkshop.pptx
 
Cloud Native Application Development
Cloud Native Application DevelopmentCloud Native Application Development
Cloud Native Application Development
 
12 Factor App Methodology
12 Factor App Methodology12 Factor App Methodology
12 Factor App Methodology
 
Modernizing Testing as Apps Re-Architect
Modernizing Testing as Apps Re-ArchitectModernizing Testing as Apps Re-Architect
Modernizing Testing as Apps Re-Architect
 
Docker & aPaaS: Enterprise Innovation and Trends for 2015
Docker & aPaaS: Enterprise Innovation and Trends for 2015Docker & aPaaS: Enterprise Innovation and Trends for 2015
Docker & aPaaS: Enterprise Innovation and Trends for 2015
 
Devops architecture
Devops architectureDevops architecture
Devops architecture
 
Netflix Cloud Platform and Open Source
Netflix Cloud Platform and Open SourceNetflix Cloud Platform and Open Source
Netflix Cloud Platform and Open Source
 
Continuous Delivery: How RightScale Releases Weekly
Continuous Delivery: How RightScale Releases WeeklyContinuous Delivery: How RightScale Releases Weekly
Continuous Delivery: How RightScale Releases Weekly
 
Cerberus_Presentation1
Cerberus_Presentation1Cerberus_Presentation1
Cerberus_Presentation1
 
Cerberus : Framework for Manual and Automated Testing (Web Application)
Cerberus : Framework for Manual and Automated Testing (Web Application)Cerberus : Framework for Manual and Automated Testing (Web Application)
Cerberus : Framework for Manual and Automated Testing (Web Application)
 
DevOps and Microservice
DevOps and MicroserviceDevOps and Microservice
DevOps and Microservice
 
Netflix Cloud Architecture and Open Source
Netflix Cloud Architecture and Open SourceNetflix Cloud Architecture and Open Source
Netflix Cloud Architecture and Open Source
 
Containers, microservices and serverless for realists
Containers, microservices and serverless for realistsContainers, microservices and serverless for realists
Containers, microservices and serverless for realists
 
Dutch Oracle Architects Platform - Reviewing Oracle OpenWorld 2017 and New Tr...
Dutch Oracle Architects Platform - Reviewing Oracle OpenWorld 2017 and New Tr...Dutch Oracle Architects Platform - Reviewing Oracle OpenWorld 2017 and New Tr...
Dutch Oracle Architects Platform - Reviewing Oracle OpenWorld 2017 and New Tr...
 
From 0 to DevOps in 80 Days [Webinar Replay]
From 0 to DevOps in 80 Days [Webinar Replay]From 0 to DevOps in 80 Days [Webinar Replay]
From 0 to DevOps in 80 Days [Webinar Replay]
 
Test-Driven-Development for Networking: Making CI Work for You by Colin McNam...
Test-Driven-Development for Networking: Making CI Work for You by Colin McNam...Test-Driven-Development for Networking: Making CI Work for You by Colin McNam...
Test-Driven-Development for Networking: Making CI Work for You by Colin McNam...
 
Containerisation Hack of a Legacy Software Solution - Alex Carter - CodeMill ...
Containerisation Hack of a Legacy Software Solution - Alex Carter - CodeMill ...Containerisation Hack of a Legacy Software Solution - Alex Carter - CodeMill ...
Containerisation Hack of a Legacy Software Solution - Alex Carter - CodeMill ...
 
Securing Red Hat OpenShift Containerized Applications At Enterprise Scale
Securing Red Hat OpenShift Containerized Applications At Enterprise ScaleSecuring Red Hat OpenShift Containerized Applications At Enterprise Scale
Securing Red Hat OpenShift Containerized Applications At Enterprise Scale
 
DevOps Fest 2020. Kohsuke Kawaguchi. GitOps, Jenkins X & the Future of CI/CD
DevOps Fest 2020. Kohsuke Kawaguchi. GitOps, Jenkins X & the Future of CI/CDDevOps Fest 2020. Kohsuke Kawaguchi. GitOps, Jenkins X & the Future of CI/CD
DevOps Fest 2020. Kohsuke Kawaguchi. GitOps, Jenkins X & the Future of CI/CD
 
10 tips for Cloud Native Security
10 tips for Cloud Native Security10 tips for Cloud Native Security
10 tips for Cloud Native Security
 

More from Noriaki Tatsumi

Feature drift monitoring as a service for machine learning models at scale
Feature drift monitoring as a service for machine learning models at scaleFeature drift monitoring as a service for machine learning models at scale
Feature drift monitoring as a service for machine learning models at scaleNoriaki Tatsumi
 
GraphQL Summit 2019 - Configuration Driven Data as a Service Gateway with Gra...
GraphQL Summit 2019 - Configuration Driven Data as a Service Gateway with Gra...GraphQL Summit 2019 - Configuration Driven Data as a Service Gateway with Gra...
GraphQL Summit 2019 - Configuration Driven Data as a Service Gateway with Gra...Noriaki Tatsumi
 
Voice Summit 2018 - Millions of Dollars in Helping Customers Through Searchin...
Voice Summit 2018 - Millions of Dollars in Helping Customers Through Searchin...Voice Summit 2018 - Millions of Dollars in Helping Customers Through Searchin...
Voice Summit 2018 - Millions of Dollars in Helping Customers Through Searchin...Noriaki Tatsumi
 
Microservices, Continuous Delivery, and Elasticsearch at Capital One
Microservices, Continuous Delivery, and Elasticsearch at Capital OneMicroservices, Continuous Delivery, and Elasticsearch at Capital One
Microservices, Continuous Delivery, and Elasticsearch at Capital OneNoriaki Tatsumi
 
Blackboard DevCon 2013 - Advanced Caching in Blackboard Learn Using Redis Bui...
Blackboard DevCon 2013 - Advanced Caching in Blackboard Learn Using Redis Bui...Blackboard DevCon 2013 - Advanced Caching in Blackboard Learn Using Redis Bui...
Blackboard DevCon 2013 - Advanced Caching in Blackboard Learn Using Redis Bui...Noriaki Tatsumi
 
Blackboard DevCon 2013 - Hackathon
Blackboard DevCon 2013 - HackathonBlackboard DevCon 2013 - Hackathon
Blackboard DevCon 2013 - HackathonNoriaki Tatsumi
 
Blackboard DevCon 2012 - Ensuring Code Quality
Blackboard DevCon 2012 - Ensuring Code QualityBlackboard DevCon 2012 - Ensuring Code Quality
Blackboard DevCon 2012 - Ensuring Code QualityNoriaki Tatsumi
 
Blackboard DevCon 2011 - Developing B2 for Performance and Scalability
Blackboard DevCon 2011 - Developing B2 for Performance and ScalabilityBlackboard DevCon 2011 - Developing B2 for Performance and Scalability
Blackboard DevCon 2011 - Developing B2 for Performance and ScalabilityNoriaki Tatsumi
 
Blackboard DevCon 2011 - Performance Considerations for Custom Theme Development
Blackboard DevCon 2011 - Performance Considerations for Custom Theme DevelopmentBlackboard DevCon 2011 - Performance Considerations for Custom Theme Development
Blackboard DevCon 2011 - Performance Considerations for Custom Theme DevelopmentNoriaki Tatsumi
 
Blackboard DevCon 2012 - How to Turn on the Lights to Your Blackboard Learn E...
Blackboard DevCon 2012 - How to Turn on the Lights to Your Blackboard Learn E...Blackboard DevCon 2012 - How to Turn on the Lights to Your Blackboard Learn E...
Blackboard DevCon 2012 - How to Turn on the Lights to Your Blackboard Learn E...Noriaki Tatsumi
 

More from Noriaki Tatsumi (10)

Feature drift monitoring as a service for machine learning models at scale
Feature drift monitoring as a service for machine learning models at scaleFeature drift monitoring as a service for machine learning models at scale
Feature drift monitoring as a service for machine learning models at scale
 
GraphQL Summit 2019 - Configuration Driven Data as a Service Gateway with Gra...
GraphQL Summit 2019 - Configuration Driven Data as a Service Gateway with Gra...GraphQL Summit 2019 - Configuration Driven Data as a Service Gateway with Gra...
GraphQL Summit 2019 - Configuration Driven Data as a Service Gateway with Gra...
 
Voice Summit 2018 - Millions of Dollars in Helping Customers Through Searchin...
Voice Summit 2018 - Millions of Dollars in Helping Customers Through Searchin...Voice Summit 2018 - Millions of Dollars in Helping Customers Through Searchin...
Voice Summit 2018 - Millions of Dollars in Helping Customers Through Searchin...
 
Microservices, Continuous Delivery, and Elasticsearch at Capital One
Microservices, Continuous Delivery, and Elasticsearch at Capital OneMicroservices, Continuous Delivery, and Elasticsearch at Capital One
Microservices, Continuous Delivery, and Elasticsearch at Capital One
 
Blackboard DevCon 2013 - Advanced Caching in Blackboard Learn Using Redis Bui...
Blackboard DevCon 2013 - Advanced Caching in Blackboard Learn Using Redis Bui...Blackboard DevCon 2013 - Advanced Caching in Blackboard Learn Using Redis Bui...
Blackboard DevCon 2013 - Advanced Caching in Blackboard Learn Using Redis Bui...
 
Blackboard DevCon 2013 - Hackathon
Blackboard DevCon 2013 - HackathonBlackboard DevCon 2013 - Hackathon
Blackboard DevCon 2013 - Hackathon
 
Blackboard DevCon 2012 - Ensuring Code Quality
Blackboard DevCon 2012 - Ensuring Code QualityBlackboard DevCon 2012 - Ensuring Code Quality
Blackboard DevCon 2012 - Ensuring Code Quality
 
Blackboard DevCon 2011 - Developing B2 for Performance and Scalability
Blackboard DevCon 2011 - Developing B2 for Performance and ScalabilityBlackboard DevCon 2011 - Developing B2 for Performance and Scalability
Blackboard DevCon 2011 - Developing B2 for Performance and Scalability
 
Blackboard DevCon 2011 - Performance Considerations for Custom Theme Development
Blackboard DevCon 2011 - Performance Considerations for Custom Theme DevelopmentBlackboard DevCon 2011 - Performance Considerations for Custom Theme Development
Blackboard DevCon 2011 - Performance Considerations for Custom Theme Development
 
Blackboard DevCon 2012 - How to Turn on the Lights to Your Blackboard Learn E...
Blackboard DevCon 2012 - How to Turn on the Lights to Your Blackboard Learn E...Blackboard DevCon 2012 - How to Turn on the Lights to Your Blackboard Learn E...
Blackboard DevCon 2012 - How to Turn on the Lights to Your Blackboard Learn E...
 

Recently uploaded

WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2
 
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public Administration
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public AdministrationWSO2CON 2024 - How CSI Piemonte Is Apifying the Public Administration
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public AdministrationWSO2
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...Shane Coughlan
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension AidPhilip Schwarz
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisamasabamasaba
 
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2
 
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2
 
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public Administration
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public AdministrationWSO2CON 2024 - How CSI Piemonte Is Apifying the Public Administration
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public AdministrationWSO2
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...masabamasaba
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplatePresentation.STUDIO
 
Artyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxArtyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxAnnaArtyushina1
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2
 
WSO2CON 2024 - IoT Needs CIAM: The Importance of Centralized IAM in a Growing...
WSO2CON 2024 - IoT Needs CIAM: The Importance of Centralized IAM in a Growing...WSO2CON 2024 - IoT Needs CIAM: The Importance of Centralized IAM in a Growing...
WSO2CON 2024 - IoT Needs CIAM: The Importance of Centralized IAM in a Growing...WSO2
 
What Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationWhat Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationJuha-Pekka Tolvanen
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...SelfMade bd
 
WSO2Con2024 - Simplified Integration: Unveiling the Latest Features in WSO2 L...
WSO2Con2024 - Simplified Integration: Unveiling the Latest Features in WSO2 L...WSO2Con2024 - Simplified Integration: Unveiling the Latest Features in WSO2 L...
WSO2Con2024 - Simplified Integration: Unveiling the Latest Features in WSO2 L...WSO2
 
%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in sowetomasabamasaba
 
WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...
WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...
WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...WSO2
 

Recently uploaded (20)

WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
 
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public Administration
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public AdministrationWSO2CON 2024 - How CSI Piemonte Is Apifying the Public Administration
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public Administration
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
 
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
 
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public Administration
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public AdministrationWSO2CON 2024 - How CSI Piemonte Is Apifying the Public Administration
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public Administration
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
Artyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxArtyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptx
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
WSO2CON 2024 - IoT Needs CIAM: The Importance of Centralized IAM in a Growing...
WSO2CON 2024 - IoT Needs CIAM: The Importance of Centralized IAM in a Growing...WSO2CON 2024 - IoT Needs CIAM: The Importance of Centralized IAM in a Growing...
WSO2CON 2024 - IoT Needs CIAM: The Importance of Centralized IAM in a Growing...
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
What Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationWhat Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the Situation
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
WSO2Con2024 - Simplified Integration: Unveiling the Latest Features in WSO2 L...
WSO2Con2024 - Simplified Integration: Unveiling the Latest Features in WSO2 L...WSO2Con2024 - Simplified Integration: Unveiling the Latest Features in WSO2 L...
WSO2Con2024 - Simplified Integration: Unveiling the Latest Features in WSO2 L...
 
%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto
 
WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...
WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...
WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...
 

Operating a High Velocity Large Organization with Spring Cloud Microservices

  • 1. Operating a High Velocity Large Organization with Spring Cloud Microservices Noriaki (Nori) Tatsumi Capital One
  • 3. Data Lake Powered by C1 Data Intelligence Team CC Image by Stanislav Sedov on Flickr
  • 4. Continuous Delivery Build, test, and release fast and frequently to operate high velocity organization 4 Prerequisite. Not luxury.
  • 5. Continuous delivery principles • Eliminate non-value added actions • Release process must be repeatable and reliable • Quality is built in • Version everything • Done = “Released” • Small batches of features and experimentations • Everyone is responsible • Kaizen – Improve continuously 5
  • 6. Our challenges Category Examples Complex systems Large code base and deployment Implementation sensitivity Test feedback speed Many teams Collaboration of design & technology Merge conflicts Non functional qualities Security High availability, reliability, maintainability Same qualities across components/features Compliance Traceability Data lineage Legacy and 3rd party applications Implementation of same qualities as the rest Processes Time consuming reviews and approvals 6
  • 7. Customer expectation • Quality • Availability • Velocity - fast and frequent deliveries of features But they don’t know about the technical challenges 7
  • 10. 10
  • 11. 11 Spring Cloud For foundation of microservices architecture
  • 12. Spring Cloud • *Spring Cloud Config • *Spring Cloud Netflix • Spring Cloud Bus • Spring Cloud for Cloud Foundry • Spring Cloud Cloud Foundry Service Broker • Spring Cloud Cluster • Spring Cloud Consul • *Spring Cloud Security • *Spring Cloud Sleuth • Spring Cloud Data Flow 12 • Spring Cloud Stream • Spring Cloud Stream Modules • Spring Cloud Task • Spring Cloud Zookeeper • Spring Cloud for Amazon Web Services • Spring Cloud Connectors • Spring Cloud Starters • Spring Cloud CLI
  • 13. Technology selection • JVM-based • Developer productivity • Production support • Spring Boot • Opinionated view for developer productivity • Production grade qualities • Netflix OSS • Proven microservices technology 13
  • 14. Decoupling 14 • Work in parallel • Quicker and smaller deploys • Domain driven design • Do one scope of things well
  • 15. Decoupling 15 • Work in parallel • Quicker and smaller deploys • Domain driven design • Do one scope of things well • Technology stack agnostic
  • 16. Decoupling 16 • Work in parallel • Quicker and smaller deploys • Domain driven design • Do one scope of things well • Technology stack agnostic • Functions are shareable
  • 17. Decoupling 17 • Work in parallel • Quicker and smaller deploys • Domain driven design • Do one scope of things well • Technology stack agnostic • Functions are shareable • Independent scalability by comp. • Greater resiliency & availability • Continuous delivery friendly
  • 18. This looks hard to orchestrate 18
  • 19. Service discovery (registry) • Netflix Eureka (HashiCorp Consul, Apache Zookeeper) • Locate services • Load balancing • Failover • Resiliency 19
  • 20. 20 <application> <name>...</name> <instance> <instanceId>... </instanceId> <hostName>... </hostName> <app>...</app> <ipAddr>...</ipAddr> <status>UP</status> <overriddenstatus>UNKNOWN</overriddenstatus> <port enabled="false">...</port> <securePort enabled="true">...</securePort> <countryId>1</countryId> <dataCenterInfo class="com.netflix.appinfo.AmazonInfo"> <name>Amazon</name> <metadata> <accountId>...</accountId> <local-hostname>... </local-hostname> <instance-id>...</instance-id> <local-ipv4>...</local-ipv4> <instance-type>...</instance-type> <vpc-id>...</vpc-id> <ami-id>...</ami-id> <mac>...</mac> <availability-zone>...</availability-zone> </metadata> </dataCenterInfo> <leaseInfo> <renewalIntervalInSecs>...</renewalIntervalInSecs> <durationInSecs>...</durationInSecs> …..
  • 21. Service discovery (registry) 21 @SpringBootApplication @EnableEurekaServer public class Discovery { public static void main(String[] args) { SpringApplication.run(Discovery.class, args); } }
  • 22. Service discovery (registry) 22 eureka: instance: appname: discovery app-group-name: bedrock lease-renewal-interval-in-seconds: 30 #sending heartbeats; 90 secs removes from registry eureka.instance.preferIpAddress: false home-page-url: http://${spring.cloud.client.hostname}:${server.port}/discovery health-check-url: http://${spring.cloud.client.hostname}:${management.port}${management.context-path}/health status-page-url: http://${spring.cloud.client.hostname}:${management.port}${management.context-path}/info password: changeme dashboard: path: /discovery client: serviceUrl: defaultZone: http://user:changeme@peer2:8761/eureka/ healthcheck: enabled: true
  • 23. Making your Spring Boot app discoverable 23 @SpringBootApplication @EnableDiscoveryClient public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
  • 24. Making your Spring Boot app discoverable 24 protected static void registerShutdownHooks() { Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { LOG.info("Shutting down, unregister from discovery service!"); DiscoveryManager.getInstance().shutdownComponent(); } }); ….. }
  • 25. Making your Spring Boot app discoverable 25 @Bean @Profile("aws") public EurekaInstanceConfigBean eurekaInstanceAwsConfig(InetUtils inetUtils) { LOG.info("Configuring this instance to be Amazon aware..."); EurekaInstanceConfigBean config = new EurekaInstanceConfigBean(inetUtils); AmazonInfo info = AmazonInfo.Builder.newBuilder().autoBuild("eureka"); config.setDataCenterInfo(info); return config; } Tip: Some Spring Cloud default configurations such as the Eureka instance ID and the Eureka instance port doesn’t take effect when customizing EurekaInstanceConfigBean. Set them explicitly.
  • 26. Making your non-Spring Boot app discoverable Eureka Client (Java) https://github.com/Netflix/eureka/wiki/Understanding-eureka-client-server- communication Eureka REST API (Polyglot) https://github.com/Netflix/eureka/wiki/Eureka-REST-operations Note: Omit “/v2” in URI Sidecar/App Gateway (Polyglot) Sits next to your app. Enables applications to be service discoverable and secure without code modification. 26
  • 27. Service discovery clients • Netflix Eureka Client • Spring Cloud • Feign • Spring RestTemplate • Any HTTP client 27
  • 28. Spring Boot Admin with Eureka 28 https://github.com/codecentric/spring-boot-admin
  • 29. Spring Boot Admin with Eureka 29 @SpringBootApplication @EnableAutoConfiguration @EnableDiscoveryClient @EnableAdminServer public class Admin extends BaseSpringBootApplication { public static void main(String[] args) { SpringApplication.run(Admin.class, args); } }
  • 30. Spring Boot Admin with Eureka 30 @Component public class EurekaApplicationDiscoveryListener extends ApplicationDiscoveryListener { @Autowired public EurekaApplicationDiscoveryListener(DiscoveryClient discoveryClient, ApplicationRegistry registry) { super(discoveryClient, registry); ServiceInstanceConverter converter = new DefaultServiceInstanceConverter() { @Override public Application convert(ServiceInstance instance) { EurekaDiscoveryClient.EurekaServiceInstance eurekaServiceInstance = (EurekaDiscoveryClient.EurekaServiceInstance) instance; final Application temp = super.convert(instance); final Application converted = Application.create(temp) .withHealthUrl(eurekaServiceInstance.getInstanceInfo().getHealthCheckUrl()) .withManagementUrl(eurekaServiceInstance.getInstanceInfo().getStatusPageUrl().replaceFirst("/info", "")) .withServiceUrl(eurekaServiceInstance.getInstanceInfo().getHomePageUrl()) .build(); return converted; } }; setConverter(converter); } }
  • 31. Spring Boot Admin with Component Auth 31 @Configuration @AutoConfigureAfter({RevereseZuulProxyConfiguration.class}) protected static class ExtendedZuulProxyConfiguration extends ZuulConfiguration { @Bean public ComponentAuthEnrichFilter componentAuthEnrichFilter() { return new ComponentAuthEnrichFilter(); } }
  • 32. Centralized monitoring 32 @Component public class MetricsShipper { ….. public JSONObject composeMetrics() { JSONObject metricsJson = new JSONObject(); metricsJson.put("timestamp", System.currentTimeMillis()); metricsJson.put("application", appName); metricsJson.put("instance", eurekaInstanceConfig.getInstanceId()); metricsJson.put("status", healthEndpoint.invoke().getStatus().getCode()); Map<String, Object> metrics = metricsEndpoint.invoke(); for (String metricKey : metrics.keySet()) { metricsJson.put(metricKey.replaceAll("[.]", "-"), metrics.get(metricKey)); } return metricsJson; } @Scheduled(fixedRateString = "${monitoring.shipper.kafka.fixedRate}", initialDelayString = "${monitoring.shipper.kafka.fixedRate}") public void ship() { kafkaTarget.ship(composeMetrics()); } }
  • 34. Distributed tracing 34 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency> service1.log:2016-02-26 11:15:47.561 INFO [service1,2485ec27856c56f4,2485ec27856c56f4,true] 68058 --- [nio-8081-exec-1] i.s.c.sleuth.docs.service1.Application : Hello from service1. Calling service2 ----- server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %I "%{x-b3- spanid}i" "%{x-b3-traceid}i" "%{x-b3-parentspanid}i” 127.0.0.1 - - [24/May/2016:02:06:44 -0400] "POST /elasticsearch/_msearch?ignore_unavailable=true&preference=1464070003866&ti meout=0 HTTP/1.1" 200 148 7 http-nio-8444-exec-5 "27c37d6638ab6c87" "150e347f81964ffd" "150e347f81964ffd"
  • 36. Security *Across all components in various languages • SSO • User authorization • Component to component authentication and authorization • CORS • Appropriate routing • Auditing and logging • Insights and inspection • Rate limiting • A well known entry to platform 36
  • 38. Edge gateway 38 @SpringBootApplication @EnableAutoConfiguration @EnableZuulProxy public class EdgeGateway { public static void main(String[] args) throws Exception { SpringApplication.run(EdgeGateway.class, args); } }
  • 39. Edge gateway - Routing 39 zuul.ignoredServices=* zuul.routes.root.path=/ zuul.routes.root.url=forward:/redirect zuul.routes.app1.path=/app1/** zuul.routes.app1.serviceId=app1 zuul.routes.app1.stripPrefix=false zuul.routes.app1.sensitive-headers=Cookie,Set-Cookie zuul.routes.app2.path=/app2/** zuul.routes.app2.url=https://app2:8443
  • 40. Edge gateway - Authentication • SAML 2.0 Sample: https://github.com/vdenotaris/spring-boot-security-saml-sample • OAuth 2.0 Sample: https://github.com/royclarkson/spring-rest-service-oauth 40
  • 41. Edge gateway - Filter 41 @Component public class ComponentAuthEnrichFilter extends ZuulFilter { …. @Override public String filterType() { return FilterType.pre.name(); } @Override public int filterOrder() { return FilterOrder.BASIC_AUTH_ENRICH_PRE_FILTER.getOrder(); } @Override public boolean shouldFilter() { return isFilterEnabled; } @Override public Object run() { RequestContext ctx = RequestContext.getCurrentContext(); ctx.addZuulRequestHeader("Authorization", authorizationHeaderValue); return null; } } • Enrich requests • Inspect requests • Collect stats • Redirect • Etc.
  • 42. Sidecar / app gateway • Discover service registry • Authentication and authorization • Inspect compliance • Auditing and logging • Distributed tracing • Health check • Monitoring 42
  • 43. Sidecar / app gateway 43 DEMO TIME!
  • 44. Sidecar / app gateway (@EnableSidecar) 44 server: port: 5678 spring: application: name: sidecar sidecar: port: 8000 health-uri: http://localhost:8000/health.json
  • 45. Sidecar / app gateway (Custom @EnableZuulProxy) 45 @Component public class SidecarHealthIndicator extends AbstractHealthIndicator { @Override protected void doHealthCheck(Health.Builder builder) throws Exception { if (AppHeartbeatCheck.isHealthy()) { builder.up(); } else { builder.outOfService().withDetail("Failed attempts", AppHeartbeatCheck.getFailedAttempts()); } } } ----------- sidecar.healthcheck.fixedRate=5000 sidecar.healthcheck.maxAttempts=3 sidecar.healthcheck.url=http://localhost:5601 sidecar.healthcheck.expectedResponseCode=200
  • 46. Circuit breaker • Help reduce resources tied up in operations which are likely to fail with fallback • Avoid waiting on timeouts for the client • Avoid putting loads on a struggling server • Zuul uses Netflix Hystrix 46 http://martinfowler.com/bliki/CircuitBreaker.html
  • 47. Circuit breaker 47 @SpringBootApplication @EnableCircuitBreaker public class Application { public static void main(String[] args) { new SpringApplicationBuilder(Application.class).web(true).run(args); } } @Component public class StoreIntegration { @HystrixCommand(fallbackMethod = "defaultStores") public Object getStores(Map<String, Object> parameters) { //do stuff that might fail } public Object defaultStores(Map<String, Object> parameters) { return /* something useful */; } }
  • 48. Zuul gotchas • No sticky session for your legacy and 3rd party apps that might need it • WebSockets, Server-sent Events, HTTP2 not supported 48
  • 49. Versioning Artifacts - Semantic versioning • MAJOR version when you make incompatible API changes • MINOR version when you add functionality in a backwards-compatible manner • PATCH version when you make backwards-compatible bug fixes Configurations - Git revision hash • All configurations applied via automation 49
  • 50. Configuration • There are more configurations to manage than monolith • Spring Boot application properties (application.properties/yml) • Spring Cloud bootstrap context (bootstrap.properties/yml) • Parent context for main app (loaded before application properties) • Loads configs from external properties (e.g. Spring Cloud Config Server) • Encryption/decryption of sensitive properties • Immutable infrastructure with automation 50
  • 51. Other keys things… • DevOps culture • Good documentation for the microservices foundation for multiple teams to use • Automate everything 51
  • 52. Take away • It’s not hard to get started with microservices… if you use Spring Cloud • Start delivering faster and deploy more frequently 52
  • 53. Learn More. Stay Connected. Noriaki Tatsumi noriaki.tatsumi@capitalone.com https://www.linkedin.com /company/capital-one https://twitter.com /capitalonejobs https://github.com /capitalone