Page 1
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/
Operating a High Velocity Large Organization with Spring Cloud
MicroservicesNoriaki (Nori) Tatsumi
Capital One
Page 2
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/
Who we are
2
Page 3
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/
Data LakePowered by C1 Data Intelligence Team
CC Image by Stanislav Sedov on Flickr
Page 4
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/4
Continuous Delivery
Build, test, and release fast and frequently to operate high velocity organization
Prerequisite. Not luxury.
Page 5
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/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
Page 6
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/6
Our challengesCategory Examples
Complex systems Large code base and deploymentImplementation sensitivityTest feedback speed
Many teams Collaboration of design & technologyMerge conflicts
Non functional qualities SecurityHigh availability, reliability, maintainabilitySame qualities across components/features
Compliance TraceabilityData lineage
Legacy and 3rd party applications
Implementation of same qualities as the rest
Processes Time consuming reviews and approvals
Page 7
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/7
Customer expectation• Quality• Availability• Velocity - fast and frequent deliveries of features
But they don’t know about the technical challenges
Page 8
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/8
Microservices architecturehttp://martinfowler.com/articles/microservices.html
The twelve factor methodologyhttp://12factor.net/
Page 9
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/9
Intranet/VPN
Page 10
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/10
Page 11
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/11
Spring CloudFor foundation of microservices architecture
Page 12
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/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
• 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
Page 13
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/13
Technology selection• JVM-based
• Developer productivity• Production support
• Spring Boot• Opinionated view for developer productivity• Production grade qualities
• Netflix OSS• Proven microservices technology
Page 14
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/14
Decoupling• Work in parallel• Quicker and smaller deploys• Domain driven design• Do one scope of things well
Page 15
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/15
Decoupling• Work in parallel• Quicker and smaller deploys• Domain driven design• Do one scope of things well• Technology stack agnostic
Page 16
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/16
Decoupling• Work in parallel• Quicker and smaller deploys• Domain driven design• Do one scope of things well• Technology stack agnostic• Functions are shareable
Page 17
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/17
Decoupling• 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
Page 18
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/18
This looks hard to orchestrate
Page 19
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/19
Service discovery (registry)• Netflix Eureka (HashiCorp Consul, Apache Zookeeper)• Locate services• Load balancing• Failover• Resiliency
Page 20
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/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> …..
DEMO TIME!
Page 21
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/21
Service discovery (registry)@SpringBootApplication@EnableEurekaServerpublic class Discovery {
public static void main(String[] args) { SpringApplication.run(Discovery.class, args);}
}
Page 22
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/22
Service discovery (registry)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
Page 23
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/23
Making your Spring Boot app discoverable
@SpringBootApplication@EnableDiscoveryClientpublic class Application {
public static void main(String[] args) { SpringApplication.run(Application.class, args);}
}
Page 24
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/24
Making your Spring Boot app discoverable
protected static void registerShutdownHooks() {Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { LOG.info("Shutting down, unregister from discovery service!"); DiscoveryManager.getInstance().shutdownComponent(); }});…..
}
Page 25
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/25
Making your Spring Boot app discoverable
@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.
Page 26
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/26
Making your non-Spring Boot app discoverableEureka 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-operationsNote: Omit “/v2” in URI
Sidecar/App Gateway (Polyglot)Sits next to your app. Enables applications to be service discoverable and secure without code modification.
Page 27
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/27
Service discovery clients• Netflix Eureka Client• Spring Cloud
• Feign• Spring RestTemplate
• Any HTTP client
Page 28
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/28
Spring Boot Admin with Eureka
https://github.com/codecentric/spring-boot-adminDEMO TIME!
Page 29
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/29
Spring Boot Admin with Eureka@SpringBootApplication@EnableAutoConfiguration@EnableDiscoveryClient@EnableAdminServerpublic class Admin extends BaseSpringBootApplication { public static void main(String[] args) { SpringApplication.run(Admin.class, args); }
}
Page 30
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/30
Spring Boot Admin with Eureka@Componentpublic 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); }}
Page 31
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/31
Spring Boot Admin with Component Auth
@Configuration@AutoConfigureAfter({RevereseZuulProxyConfiguration.class})protected static class ExtendedZuulProxyConfiguration extends ZuulConfiguration { @Bean public ComponentAuthEnrichFilter componentAuthEnrichFilter() { return new ComponentAuthEnrichFilter(); }
}
Page 32
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/32
Centralized monitoring@Componentpublic 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()); }}
Page 33
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/33
Distributed tracing
http://cloud.spring.io/spring-cloud-sleuth/spring-cloud-sleuth.html
Page 34
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/34
Distributed tracing<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&timeout=0 HTTP/1.1" 200 148 7 http-nio-8444-exec-5 "27c37d6638ab6c87" "150e347f81964ffd" "150e347f81964ffd"
Page 35
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/35
Distributed tracing
Page 36
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/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
Page 37
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/37
Intranet/VPN
Page 38
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/38
Edge gateway@SpringBootApplication@EnableAutoConfiguration@EnableZuulProxypublic class EdgeGateway {
public static void main(String[] args) throws Exception { SpringApplication.run(EdgeGateway.class, args);}
}
Page 39
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/39
Edge gateway - Routingzuul.ignoredServices=*
zuul.routes.root.path=/zuul.routes.root.url=forward:/redirectzuul.routes.app1.path=/app1/**zuul.routes.app1.serviceId=app1zuul.routes.app1.stripPrefix=falsezuul.routes.app1.sensitive-headers=Cookie,Set-Cookie
zuul.routes.app2.path=/app2/**zuul.routes.app2.url=https://app2:8443
Page 40
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/40
Edge gateway - Authentication• SAML 2.0
Sample: https://github.com/vdenotaris/spring-boot-security-saml-sample
• OAuth 2.0Sample: https://github.com/royclarkson/spring-rest-service-oauth
Page 41
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/41
Edge gateway - Filter@Componentpublic 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.
Page 42
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/42
Sidecar / app gateway• Discover service registry• Authentication and authorization• Inspect compliance• Auditing and logging• Distributed tracing• Health check• Monitoring
Page 43
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/43
Sidecar / app gateway
DEMO TIME!
Page 44
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/44
Sidecar / app gateway (@EnableSidecar)
server: port: 5678spring: application: name: sidecarsidecar: port: 8000 health-uri: http://localhost:8000/health.json
Page 45
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/45
Sidecar / app gateway (Custom @EnableZuulProxy)@Componentpublic 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=5000sidecar.healthcheck.maxAttempts=3sidecar.healthcheck.url=http://localhost:5601sidecar.healthcheck.expectedResponseCode=200
Page 46
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/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
http://martinfowler.com/bliki/CircuitBreaker.html
Page 47
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/47
Circuit breaker@SpringBootApplication@EnableCircuitBreakerpublic class Application { public static void main(String[] args) { new SpringApplicationBuilder(Application.class).web(true).run(args); }}@Componentpublic 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 */; }}
Page 48
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/48
Zuul gotchas• No sticky session for your legacy and 3rd party apps that might need it• WebSockets, Server-sent Events, HTTP2 not supported
Page 49
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/49
VersioningArtifacts - 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
Page 50
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/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
Page 51
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/51
Other keys things…• DevOps culture• Good documentation for the microservices foundation for multiple
teams to use• Automate everything
Page 52
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/52
Take away• It’s not hard to get started with microservices… if you use Spring
Cloud• Start delivering faster and deploy more frequently
Page 53
Unless otherwise indicated, these s l ides are © 2013-2016 Pivota l Software , Inc . and l icensed under a Creative Commons Attr ibution-NonCommerc ia l l i cense:
http:/ /c reativecommons .org/ l icenses/by-nc/3.0/
Learn More. Stay Connected.
Noriaki Tatsumi
[email protected]
https://www.linkedin.com/company/capital-one
https://twitter.com/capitalonejobs
https://github.com/capitalone