Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Nice To Meet You • Rookie engineer on the Spring Cloud team • Father, Husband, OCR Athlete • Get In Touch • @ryanjbaxter • http://ryanjbaxter.com 2
Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Agenda • Spring Cloud Background • Key Projects • Getting Down and Dirty With Spring Cloud • Questions? 3
Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Anyone Know This Guy? 5 O ur Ultim ate G oal
Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Why Spring Cloud? • In general, cloud native apps are a good thing, just not easy • It is easy for big companies to put forth the resources to succeed with Cloud Native, but what about the little guys? • Why do we have to reinvent the wheel each time someone wants to build a Cloud Native app? • Follow the Spring Boot model of providing useful defaults for Cloud Native apps with the ability to easy configure them • Cloud Agnostic 6
Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Spring Cloud Components 7 Configuration Service Discovery Routing and Messaging Tracing API Gateway Circuit Breakers CI Pipelines and Testing
Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Yes There Are More • Spring Cloud Bus • Spring Cloud Stream • Spring Cloud Data and Task • Spring Cloud AWS ….and more 8
Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Configuration • We want to remove the configuration out of the application to a centralized store across all environments • Spring cloud Config Server can use Git, SVN, filesystem and Vault to store config • Config clients (microservice apps) retrieve the configuration from the server on startup • Can be notified of changes and process changes in a refresh event 9
Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Service Discovery • With the dynamic nature of any cloud native application, depending on things like URLs can be problematic • Service Discovery allows micro services to easily discover the routes to the services it needs to use • Netflix Eureka • Zookeeper • Consul 10
Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Routing and Messaging • Your cloud native app will be composed of many microservices so communication will be critical • Spring Cloud supports communication via HTTP requests or via messaging • Routing and Load Balancing: • Netflix Ribbon and Open Feign • Messaging: • RabbitMQ or Kafka 11
Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ API Gateway • API Gateways allow you to route API requests (internal or external) to the correct service • Netflix Zuul • Leverages service discovery and load balancer • Spring Cloud Gateway 12
Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Circuit Breakers • Failure is inevitable, but your user’s don’t need to know • Circuit breakers can help an application function in the face of failure • Netflix Hystrix 13
Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Tracing • A single request to get data from your application may result in an exponentially larger number of requests to various microservices • Tracing these requests through the application is critical when debugging issues • Spring Cloud Sleuth and Zipkin 14
Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ CI Pipelines and Testing • Building, testing, and deploying the various services is critical to having a successful cloud native application • Spring Cloud Pipelines is an opinionated pipeline for Jenkins or Concourse that will automatically create pipelines for your apps • Spring Cloud Contract allows you to accurately mock dependencies between services using published contracts 15