architecture cloud native DevOps Best Practices Platform Engineering Best Practices podcast Spring spring cloud

How Spring Cloud brings Java into the cloud-native era

It can sometimes seem like the old world of enterprise IT and the new world of enterprise IT are fundamentally at odds, with yesterday’s architectures, processes, and skills fast becoming irrelevant. However, that doesn’t have to be the case, because there are tools to help bridge those worlds. In the case of Java development that tool is the Spring framework, which simplifies and modernizes a wide variety of application functions, from batch processing to security.

In this episode of Cloud Native in 15 Minutes, Spring Cloud co-creator and VMware staff engineer Spencer Gibb explains how the Spring Boot and Spring Cloud projects, in particular, help developers build and deploy distributed, cloud-native applications. Aside from walking through some of the technical aspects, Gibb also touches on the business value of Spring—a set of benefits that includes app modernization, developer productivity, and the ability to hire from the huge ecosystem of Spring developers.

First things first: Make deploying apps a breeze

“The way you used to deploy a Spring application was in some kind of container, whether that was a simple servlet container, like Tomcat, or some monolithic, Java EE containers. So you're creating WARs or EARs and there was lots of XML and . . . that part of it was still painful. The writing code part was much, much better, but the deployment was absolutely painful. 

“. . . One of the 12-factor tenets is that your application should just be that—it should just be an executable and listen on a port. And so there were a number of things that came together to create Spring Boot, one of those being embedded containers. So you have Tomcat and Jetty and Undertow and now Netty that are just libraries that Spring Boot can consume. And so now, instead of deploying to a WAR, it's a simple Java application and you just  'java-jar start' your app and it listens on a port. 

“There are other things that make deploying simpler with boot. . . . All in all, it makes getting an application up and running a trivial exercise. . . . Spring Cloud couldn't have existed without Spring Boot first.”

Making distributed systems easier with Spring Cloud

“Initially, Spring Cloud was a set of interfaces that implemented certain concepts that are common in distributed systems. So service registration and discovery, distributed configuration, circuit breakers, and some other strategies for dealing with failure in the cloud. And as we progressed, things expanded. . . .

“[Spring Cloud] Stream brought message-based services in a simple manner. And then taking that concept even further, [Spring Cloud] Data Flow is then, ‘OK, now that I can create these little independent consumers and/or producers of data, now I want to create declarative pipelines of them. How should my data flow through a system?’ And it very much looks like a Unix command line—this piped to that, et cetera. . . .It's a higher level, even above stream. 

 . . .

“That's usually the beauty of Spring as well, is that [projects] typically have an abstraction and then implementations for various providers of that abstraction. So Stream has binders for both RabbitMQ and Kafka. And so your programming model doesn't change. 

“In fact, Mark Heckler, who's one of our developer advocates, he does a talk about Stream, and in the middle of the talk he switches one service from RabbitMQ to Kafka. It's listening to Rabbit and then outputting onto Kafka, for example, within a few seconds. So very nice abstractions so that your programming model doesn't change even if the underlying system that you're using might.”

Giving developers ‘warm fuzzies’ as they do new things

“There are lots of competent developers out there that are comfortable in Java, that are already using Spring, and as they move to something that benefits them—whether it's the ability to deploy more often, to have automated pipelines, to test things . . . microservices they want the teams to deploy independently. Whatever the reason there is for changing their organization and changing their architecture, Spring and Spring Boot and Spring Cloud allow them to have that warm fuzzy that they're still competent in all these things. Now we just have a different model of deploying and consuming services.

“. . . And if they want to get into alternative languages . . . Java sometimes gets a bad rap as a language—which it's evolving and that's very, very good—but with first-class support for Kotlin, for example, you can get that modern language feel and everything is supported still.”

Don’t overlook developer productivity and a broad talent pool

“I'll start with a tweet that I saw recently, and it was someone complaining about the power of the laptops that some enterprises were buying for their developers. And through that conversation, someone had done a blog post a number of years ago that [demonstrated that in] moving from a spinning hard drive to a solid-state drive, the cost of the drive versus the time saved was . . . in a few days, the drive paid for itself. And just from a productivity standpoint, I see similar things with Spring. 

“Spring and Spring experience is a thing in the industry. You can hire someone with experience using Spring Boot, and that's one of the reasons actually that Netflix is standardizing on Boot as opposed to some of the custom stuff they did before—because they can hire people with the experience already.”

Subscribe here

Cloud Native in 15 Minutes publishes bi-weekly, and you can find it on most of your favorite apps and platforms, including:

Learn more about Spring, Spring Boot, and Spring Cloud

Spring

Spring blog

Spring Boot

Spring Cloud

Cloud Native Java

A Bootiful Podcast

SpringOne Platform