Spring Cloud helps you take full advantage of developing microservices in the cloud. Learn how to develop cloud-native apps that utilize service discovery, distributed config, client-side load balancing, intelligent routing, and fault tolerance.
Spring Cloud helps you build or migrate existing applications to run natively-in-the-cloud, or "cloud native" as it's commonly called. So what exactly is cloud native? Cloud native is not just about running your existing applications in the cloud. It's a paradigm shift; a transformation from developing large, centralized applications to building nimble and highly distributed applications composed of microservices. In this course, Spring Cloud Fundamentals, you'll learn about how Spring Cloud builds upon Netflix OSS and helps by providing common patterns and solutions like service discovery (Netflix Eureka), distributed configuration (Spring Cloud Config Server), intelligent routing (Netflix Zuul), circuit-breaking (Netflix Hystrix), and client-side load balancing (Netflix Ribbon), to name a few. When you're finished with this course, you'll have had hands-on practical experience in building a truly cloud native application using Spring Cloud. Armed with this knowledge, you'll be able to apply the same principles and techniques to create cloud native applications from scratch or migrate existing ones to take full advantage of the cloud.
Dustin Schultz is a Lead Software Engineer and a technology evangelist at heart. He holds a Bachelors and a Masters in Computer Science, and is a full stack developer with the majority of his experience in Java, Spring, Hibernate, Spring Boot, Maven, AngularJS, and "The Cloud".
Course Overview Hi everyone. My name's Dustin Schultz, and welcome to my course Spring Cloud Fundamentals. I've been developing software day in and day out for almost 12 years, and right now is without a doubt one of the best times there is to be a software engineer. The cloud, or cloud computing, is truly changing the way we, as developers, think about design and develop software. And that's where Spring Cloud comes in. Spring Cloud helps you take full advantage of these new paradigms by bringing together the best of Spring Boot with proven cloud strategies to help you design and develop cloud-native applications. Some of the major topics we'll cover include service discovery using Spring Cloud and Netflix Eureka, distributed configuration using Spring Cloud Config Server, client-side load balancing using Spring Cloud and Netflix Ribbon, intelligent routing via a gateway service using Spring Cloud and Netflix Zuul, and fault tolerance using Spring Cloud and Netflix Hystrix. By the end of this course, you'll know how to build applications that take full advantage of the cloud. Before beginning the course, you should be familiar with Java, Spring Boot, and have at least an introductory level understanding of microservices. I hope you'll join me on this journey to learn Spring Cloud with the Spring Cloud Fundamentals course at Pluralsight.
Getting Familiar with Spring Cloud Hi, and welcome to the course Spring Cloud Fundamentals. My name's Dustin Schultz, and before we begin, let's get a little bit more familiar with what Spring Cloud is. I'm sure you've heard of this infamous thing called the cloud as it's often hyped as this game changer or the sort of magical solution to everything. It'll solve all your problems. And with so many things to learn these days, it's hard not to ignore a lot of that and just kind of brush it off as clever marketing. But now companies and enterprises are finally starting to truly embrace the cloud, and some of that hype is actually becoming a reality. And it's more often the norm to see enterprises and companies using the cloud than it is the exception. As software engineers, I think we have some really exciting times ahead of us. Cloud computing, or the cloud, is really changing the way that we build software. We're moving from using these centralized monoliths to applications which are distributed and use microservices. And not only is the software changing, but the hardware is changing as well. We're moving from this managed and finite resource to this infinite and on demand and self-service resource.
Mapping Services Using Intelligent Routing Hi, my name's Dustin Schultz, and in this module we'll learn how to map our services in the cloud using Intelligent Routing. We'll begin by talking about what Intelligent Routing is and what problem it solves for us. Then we'll introduce Netflix Zuul as part of the Spring Cloud Netflix project. And we'll see how to set up a proxy server, how to configure different routes, and how to set up filtering. Remember that in order to be as dynamic and as scalable as possible, a cloud-native system is made up of individually deployable services, which together, as a whole, form an overall system. With that comes some challenges though. Each of the individual services may be running on a different port, a different address, or a combination of both. And they'll also likely have different paths and different APIs to interact with. And as a user or a client of those services, such as a mobile app or a web app, interacting with each of the individual services, which could easily be in the double or triple digits, would be a nightmare. Instead, we can use Intelligent Routing to make our application appear as if it were a single system. Similar to how a completed puzzle appears as if it were a whole, but it's made up of several different individual pieces.
Calling Services Using Client-side Load Balancing Hi, my name's Dustin Schultz, and in this module we'll learn how to utilize client-side load balancing to distribute the workload of a service in a cloud-native application. We'll start off with what is load balancing, and what role does it play in a cloud-native application? Then we'll talk about traditional server-side load balancing, which you're probably already familiar with. Then we'll introduce client-side load balancing, what it is and how it differs from server-side load balancing. Next, we'll introduce Netflix Ribbon and how we can utilize it with Spring Cloud to implement client-side load balancing. We'll learn how to implement it with and without service discovery using two new annotations: the @LoadBalanced annotation and the @RibbonClient annotation. We'll finish off the module with a section on how to customize Ribbon's configuration for things like different load balancing algorithms or different ways to check the health of a service before sending a request to it.
Creating Self-healing Services with Circuit Breaker Hi, I'm Dustin Schultz, and in this module we'll learn how to develop services in a cloud-native architecture that are both fault tolerant and self-healing. We'll begin the module with a short section on failures in a cloud-native or distributed system. We'll look at why failures are more prevalent and understand a common side effect called cascading failures. Then we'll introduce and understand the Circuit Breaker pattern and learn how it can help us build more fault-tolerant services. Next, we'll dive into Netflix Hystrix, which is a fault-tolerance library that, among other things, implements the Circuit Breaker pattern. We'll see how Spring Cloud makes it easy to get started with the @EnableCircuitBreaker annotation, and then we'll understand how to use the @HystrixCommand annotation to implement the Circuit Breaker pattern in our own services. We'll finish the module out by looking at one of the really nice features of Hystrix called the Hystrix Dashboard. We'll see how to enable it, how metrics are collected, how to interpret those results, and how to aggregate those results using another project from Netflix called Turbine.
Bringing It All Together and Where to Go Next Hi, my name's Dustin Schultz, and in this last module we'll take a holistic approach to see how each of the individual ideas and technologies all fit together and where you can go next after you've completed the course. We'll begin with a section on how it all fits together. We've learned a lot throughout the course covering new ideas and technologies in every single module. And while many of those ideas are useful by themselves, the real advantage comes from using them together as a whole. And we'll see how each of the main topics, service discovery, distributed configuration, client-side load balancing, gateway and routing, and fault tolerance and circuit breaker, all fit together to form a cloud-native system. And then, like I mentioned, we'll finish by briefly discussing where you can go next to learn about what additional Spring Cloud projects are out there. And don't discount the importance of this. It's helpful to know exactly what's out there. It's almost like browsing the tool section at your local hardware store, and if you don't know what tools are out there, when you have a problem, you might end up using the wrong tool for the wrong job.