1
00:00:00,000 --> 00:00:04,560
Welcome back after an elongated break to the Cloud Native in 15 Minutes podcast.

2
00:00:04,940 --> 00:00:07,580
If you haven't listened before, the goal of the podcast is simple,

3
00:00:07,760 --> 00:00:11,560
to explain some complex but increasingly important technologies and topics

4
00:00:11,560 --> 00:00:14,180
and about the time it takes for a coffee break or a short commute.

5
00:00:14,720 --> 00:00:17,320
Usually it takes a little more than 15 minutes, but not much.

6
00:00:17,800 --> 00:00:20,900
I'm Derek Harris from VMware, which still sounds a little weird.

7
00:00:21,200 --> 00:00:25,280
And today's topic is Spring, the open source job development framework

8
00:00:25,280 --> 00:00:27,440
that still gets over a million downloads a month,

9
00:00:27,440 --> 00:00:30,080
and more specifically, Spring Cloud.

10
00:00:30,460 --> 00:00:34,160
Joining me to explain it is Spencer Gibb, a staff engineer at VMware

11
00:00:34,160 --> 00:00:36,640
and co-founder and lead for Spring Cloud.

12
00:00:36,940 --> 00:00:41,440
Now we start off a little slow, but stick with it because it gets really informational

13
00:00:41,440 --> 00:00:45,060
and Spencer shares some great insights into how Spring Cloud simplifies

14
00:00:45,060 --> 00:00:47,720
and expedites the process of building distributed applications

15
00:00:47,720 --> 00:00:52,020
and why that's important, not just for developers, but also for CIOs and other execs

16
00:00:52,020 --> 00:00:55,600
who made developer productivity a key tenet of their modernization efforts.

17
00:00:56,000 --> 00:00:59,240
And the interview with Spencer will begin in just a few seconds

18
00:00:59,240 --> 00:01:03,560
after I remind you to please leave a review for the podcast on your platform of choice.

19
00:01:03,720 --> 00:01:04,740
It's very helpful.

20
00:01:05,160 --> 00:01:05,520
Thanks.

21
00:01:06,840 --> 00:01:07,920
All right, Spencer.

22
00:01:08,280 --> 00:01:12,980
So to get started, can you quick walk listeners who are unfamiliar with Spring,

23
00:01:13,100 --> 00:01:16,180
like walking them through what is Spring and why is it so popular?

24
00:01:18,180 --> 00:01:24,820
Spring is a Java application framework started 18 or 19 years ago,

25
00:01:25,120 --> 00:01:30,880
kind of as a response to the complexity of the J2EE model.

26
00:01:31,960 --> 00:01:38,840
It includes a dependency injection container as well as a web framework,

27
00:01:39,120 --> 00:01:41,160
messaging framework and things like that.

28
00:01:41,400 --> 00:01:45,480
And why, I mean, Spring is used by like tens of millions of developers.

29
00:01:46,200 --> 00:01:52,080
What does it bring to the table, I guess, that other Java application frameworks didn't

30
00:01:52,080 --> 00:01:55,840
or that you're not going to get from just writing straight up Java code?

31
00:01:56,640 --> 00:02:02,360
One of the goals of the Spring philosophy is to eliminate boilerplate.

32
00:02:02,940 --> 00:02:06,960
Maybe in today's words, eliminate toil, right?

33
00:02:07,320 --> 00:02:10,100
Things you do manually over and over and over.

34
00:02:10,500 --> 00:02:15,220
Let someone else whose core competency is that do that for you.

35
00:02:15,380 --> 00:02:20,720
And then you can focus on what makes your particular project unique.

36
00:02:21,380 --> 00:02:23,380
So what are some of the examples like that?

37
00:02:23,440 --> 00:02:25,660
So, I mean, we'll get into Spring Cloud in a moment.

38
00:02:25,760 --> 00:02:32,040
But what is like a real quick example of, if I'm not using Spring or I'm curious about it,

39
00:02:32,040 --> 00:02:36,100
I'm trying to empower my developers, like what's a real fast, easy example of,

40
00:02:36,580 --> 00:02:39,500
hey, we're using this and now we've reduced this toil, right?

41
00:02:39,540 --> 00:02:40,940
We've minimized this effort.

42
00:02:40,940 --> 00:02:44,320
It could be a number of things with framework.

43
00:02:44,660 --> 00:02:50,120
Some simple ones that come to mind are things like Web Client,

44
00:02:50,560 --> 00:02:59,960
which is kind of an HTTP agnostic, HTTP client agnostic framework for making restful calls to other services.

45
00:03:00,520 --> 00:03:08,880
It's really elegant and really well done and is typical of the patterns that the framework provides for other things.

46
00:03:08,880 --> 00:03:21,240
So they have things for making HTTP calls, making JDBC calls, making messaging calls, whether that's JMS or AMQP or whatever.

47
00:03:21,460 --> 00:03:25,000
There's this idea of making those things simple to do.

48
00:03:25,540 --> 00:03:30,080
The other thing, just for anyone who's not well-versed in the world of Spring, it's a Spring Boot.

49
00:03:30,660 --> 00:03:37,700
Can you quickly just, because we hear that a lot, especially if you attend like any pivotal conference, you'll hear about Spring Boot an awful lot.

50
00:03:37,740 --> 00:03:40,340
So can you quickly walk through what is Spring Boot?

51
00:03:41,140 --> 00:03:41,440
Sure.

52
00:03:41,620 --> 00:03:55,800
I mean, 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 container.

53
00:03:55,800 --> 00:04:06,080
So you're creating wars or ears, and there was lots of XML, and that part of it was still painful.

54
00:04:06,380 --> 00:04:11,340
The writing code part was much, much better, but the deployment was absolutely painful.

55
00:04:11,600 --> 00:04:24,000
So probably the most popular framework that popularized the idea and one of the 12-factor tenets is that your application should just be that.

56
00:04:24,200 --> 00:04:28,280
It should just be an executable and listens on a port.

57
00:04:29,440 --> 00:04:36,260
And so there were a number of things that came together to create Spring Boot, one of those being embedded containers.

58
00:04:36,260 --> 00:04:44,880
So you have Tomcat and Jetty and Undertow and now Netty that are just libraries that Spring Boot can consume.

59
00:04:45,600 --> 00:04:55,640
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.

60
00:04:56,280 --> 00:05:00,080
There are other things that make deploying simpler with boot.

61
00:05:00,300 --> 00:05:04,940
External configuration, so the ability to configure your projects.

62
00:05:05,540 --> 00:05:23,540
And then auto-configuration, so based on your class path, you include some, what the boot team calls a starter, and it brings in a curated set of dependencies and enables that functionality in an automated way, usually driven by configuration.

63
00:05:23,920 --> 00:05:33,440
So, for example, there are starters for JDBC, for RabbitMQ, just for web framework pieces, for example.

64
00:05:34,360 --> 00:05:37,660
So that makes dependency management much, much easier.

65
00:05:38,200 --> 00:05:43,980
So all in all, it makes getting an application up and running a trivial exercise.

66
00:05:44,500 --> 00:05:44,700
All right.

67
00:05:45,020 --> 00:05:48,280
Again, that seems to be an important piece of the puzzle.

68
00:05:49,220 --> 00:05:54,380
Spring, yeah, Spring Cloud couldn't have existed without Spring Boot first.

69
00:05:54,720 --> 00:05:54,980
Okay.

70
00:05:55,880 --> 00:05:57,600
So, yeah, let's get into Spring Cloud.

71
00:05:57,700 --> 00:06:00,640
What was the impetus for developing Spring Cloud?

72
00:06:00,780 --> 00:06:04,160
And then let's start with that, and then we'll get into the various pieces of it.

73
00:06:04,680 --> 00:06:12,780
Kind of from my side, at the time, I was not a then-pivotal employee, but I was doing work in the cloud.

74
00:06:13,280 --> 00:06:22,640
And when you're building distributed systems, there are certain problems that are fairly common among them.

75
00:06:23,060 --> 00:06:38,880
So the idea with Spring Cloud was to, again, eliminate some of the toil and boilerplate initiative that is involved with overcoming those problems and allow those kinds of things to be easily dealt with by developers.

76
00:06:38,880 --> 00:06:44,120
When I look at Spring Cloud, there are a number of various subcomponents, right?

77
00:06:44,180 --> 00:06:47,700
There's Spring Cloud for basically every cloud provider platform.

78
00:06:47,840 --> 00:06:49,000
There's Spring Cloud Dataflow.

79
00:06:49,140 --> 00:06:50,520
There's Spring Cloud Streaming.

80
00:06:50,940 --> 00:06:52,920
There's Spring Cloud Kubernetes.

81
00:06:53,060 --> 00:06:54,860
There's a wide variety of modules or whatever.

82
00:06:54,960 --> 00:06:58,840
What are some of the key pieces if you're going to be using Spring Cloud to write apps?

83
00:06:58,940 --> 00:07:02,200
And what are, like, maybe just like, why are these the pieces?

84
00:07:02,360 --> 00:07:07,080
Why have we settled on this handful of maybe a dozen or two?

85
00:07:07,080 --> 00:07:07,780
Sure.

86
00:07:08,200 --> 00:07:18,280
Initially, Spring Cloud was a set of interfaces that implemented certain concepts that are common in distributed systems.

87
00:07:18,600 --> 00:07:30,020
So service registration and discovery, distributed configuration, circuit breakers, and some other strategies for dealing with failure in the cloud.

88
00:07:30,020 --> 00:07:33,500
And as we progressed, things expanded.

89
00:07:33,500 --> 00:07:50,440
So Stream is, with Spring Boot, it's fairly easy to have a HTTP-based service using Spring Framework and Spring MVC or WebFlux, and you get a simple application.

90
00:07:50,640 --> 00:07:56,500
So Stream brought message-based services in a simple manner.

91
00:07:56,500 --> 00:08:11,900
And then taking that concept even further, Dataflow is then, okay, now that I can create these little independent consumers and or producers of data,

92
00:08:12,340 --> 00:08:17,100
now I want to create declarative pipelines of them.

93
00:08:17,240 --> 00:08:19,040
How should my data flow through a system?

94
00:08:19,040 --> 00:08:22,960
And it very much looks like a Unix command line.

95
00:08:23,140 --> 00:08:25,640
This piped to that, et cetera.

96
00:08:26,140 --> 00:08:27,840
And that's what Dataflow is.

97
00:08:28,540 --> 00:08:31,680
So it's a higher level, even above Stream.

98
00:08:32,300 --> 00:08:32,580
Okay.

99
00:08:33,060 --> 00:08:38,600
So basically, I mean, it's a collection of things basically to kind of, I don't know if automate is the right word,

100
00:08:38,680 --> 00:08:43,520
but to make it easier to solve some of these inherent issues you run into when you're building a distributed application,

101
00:08:43,700 --> 00:08:49,580
which is any sort of microservice or most cloud-based or cloud-native, quote-unquote, applications, right?

102
00:08:49,580 --> 00:08:57,680
And then the other bit that you mentioned is integration with cloud providers and infrastructure.

103
00:08:58,580 --> 00:09:04,360
So there are projects that are run by some of the top IaaS providers.

104
00:09:04,780 --> 00:09:12,560
So Microsoft, Google, Alibaba, et cetera, all have projects that are target Spring Cloud and allow.

105
00:09:13,180 --> 00:09:19,760
Some of them have implementations for Spring Cloud Stream, Discovery, Service Registration,

106
00:09:20,240 --> 00:09:24,660
or different circuit breakers and things like that that they implement,

107
00:09:24,920 --> 00:09:29,520
as well as Spring integration with their services, whatever those may be, you know,

108
00:09:29,820 --> 00:09:34,380
implementations of databases or messaging or whatever that is.

109
00:09:34,800 --> 00:09:35,020
All right.

110
00:09:35,560 --> 00:09:41,860
And this might be a very naive question, but if someone who is new to the Spring community

111
00:09:41,860 --> 00:09:47,760
and just getting started, like when I look at a Spring service, let's say around Dataflow or Streaming,

112
00:09:47,800 --> 00:09:55,440
how does that compare with, or how does Spring work with other services designed to do things like that,

113
00:09:55,480 --> 00:09:59,700
like a Kafka or a RabbitMQ or any of these other, let's say, streaming or...

114
00:09:59,700 --> 00:10:04,680
Well, that's usually the beauty of Spring as well, is that they typically have an abstraction

115
00:10:04,680 --> 00:10:09,340
and then implementations for various providers of that abstraction.

116
00:10:09,340 --> 00:10:14,480
So Stream has binders for both RabbitMQ and Kafka.

117
00:10:14,680 --> 00:10:17,260
And so your programming model doesn't change.

118
00:10:17,360 --> 00:10:22,800
In fact, Mark Heckler, who is one of our developer advocates, he does a talk about Stream.

119
00:10:23,540 --> 00:10:30,120
And in the middle of the talk, he switches one service from RabbitMQ to Kafka.

120
00:10:30,280 --> 00:10:35,680
It's listening to Rabbit and then outputting onto Kafka, for example, within a few seconds.

121
00:10:36,020 --> 00:10:44,700
So very nice abstractions so that your programming model doesn't change, even if the underlying system that you're using might.

122
00:10:45,200 --> 00:10:48,780
I tend to spend a lot of time looking at customer stories and whatnot.

123
00:10:49,160 --> 00:10:55,100
And a lot of times it's, we need to get something up and running ASAP or change something up ASAP.

124
00:10:55,300 --> 00:10:58,880
And Spring always seems to be the first order of business there, like in terms of,

125
00:10:59,420 --> 00:11:01,000
like, yeah, we just need to switch from one model to another.

126
00:11:01,000 --> 00:11:12,940
Well, you know, there was a huge investment in Java EE, but I think enterprises, so there are lots of competent developers out there that are comfortable in Java,

127
00:11:12,940 --> 00:11:14,920
that they're already using Spring.

128
00:11:15,060 --> 00:11:21,760
And as they move to something that benefits them, whether it's the ability to deploy more often,

129
00:11:21,760 --> 00:11:28,980
to have automated pipelines to test things, you know, whatever the case, microservices they want the teams to deploy independently,

130
00:11:29,100 --> 00:11:34,040
whatever the reason there is for changing their organization and changing their architecture,

131
00:11:34,940 --> 00:11:41,600
Spring and Spring Boot and Spring Cloud allow them to kind of have that warm, fuzzy,

132
00:11:42,640 --> 00:11:44,780
that they're still competent in all these things.

133
00:11:44,780 --> 00:11:49,420
Because now we just have a different model of deploying and consuming services.

134
00:11:50,220 --> 00:11:52,100
So I think that's really, really beneficial.

135
00:11:52,300 --> 00:11:57,820
And if they want to get into alternative languages, even like that feel,

136
00:12:00,280 --> 00:12:06,240
Java sometimes gets a bad rap as a language, which it's evolving and that's very, very good.

137
00:12:06,360 --> 00:12:15,600
But with first-class support for Kotlin, for example, you can get that modern language feel and everything is supported still.

138
00:12:15,600 --> 00:12:16,120
All right.

139
00:12:16,600 --> 00:12:19,400
I see this debate pop up every now and then.

140
00:12:19,540 --> 00:12:24,580
I say this specifically because there's a service, Spring Cloud, Netflix, which like you mentioned, Circuit Breakers,

141
00:12:24,600 --> 00:12:30,720
and it brings in a lot of these sorts of features that Netflix helped to popularize and then open source eventually.

142
00:12:30,980 --> 00:12:34,960
And this debate is like, well, most enterprise developers don't need to be Netflix engineers.

143
00:12:35,340 --> 00:12:39,360
So the logic being ergo, why do they care about any of these things?

144
00:12:39,440 --> 00:12:44,400
But on the other hand, like these are valuable patterns and valuable things.

145
00:12:44,400 --> 00:12:47,040
My argument is you probably should care about these things.

146
00:12:47,140 --> 00:12:51,420
Whether you need to do them on Netflix scale is another story, but like they're valuable.

147
00:12:51,920 --> 00:12:52,140
Yes.

148
00:12:52,380 --> 00:13:04,720
Like the scale of whether it's Netflix or Facebook or Google or whatever, Twitter, whatever internet darling you're looking at,

149
00:13:04,820 --> 00:13:06,360
not everyone deals with that.

150
00:13:06,440 --> 00:13:08,980
There are certainly enterprises that do.

151
00:13:08,980 --> 00:13:17,680
I mean, whether that's financial institutions or big box stores or whatever, that they do need that scale.

152
00:13:17,860 --> 00:13:19,040
But not everyone does.

153
00:13:20,160 --> 00:13:29,800
But if they have independent teams and want to deploy independently, they change architectures, microservices.

154
00:13:29,960 --> 00:13:32,060
They might not have hundreds of instances.

155
00:13:32,060 --> 00:13:34,120
They might have 10.

156
00:13:34,120 --> 00:13:37,120
But the problems are still there.

157
00:13:37,120 --> 00:13:38,720
You may as well.

158
00:13:39,220 --> 00:13:45,380
Like one thing that Josh Long says, it's like you're pair programming with the spring team.

159
00:13:45,640 --> 00:13:47,980
You don't have to come up with this all on your own.

160
00:13:48,120 --> 00:14:06,380
There's lots of experience going into not only the downstream libraries from companies like Netflix or HashiCorp or Microsoft or Google or whoever, as well as the spring team in integrating those and doing it in a way that's easy to consume and hopefully easier for developers to understand.

161
00:14:06,460 --> 00:14:19,220
Yeah, I think the idea, too, if you can do this with a line of code or a flag or something, it's worth it, especially as you were dealing with a distributed application where stuff could go wrong.

162
00:14:19,860 --> 00:14:31,160
And I think that's the thing, too, that gets missed out on, is something like a lot of what spring does is it's basically very simple commands to get this stuff integrated and functioning within your application, correct?

163
00:14:32,600 --> 00:14:41,720
Yeah, so you go to somewhere like a spring initializer, start.spring.io, and you choose the pieces you want.

164
00:14:41,800 --> 00:14:46,940
It automatically creates a skeleton project for you, and you can get up and running pretty quickly.

165
00:14:47,440 --> 00:14:53,420
For a long time, we were asking, well, okay, cloud computing is a thing, but everyone's just running the same types of applications.

166
00:14:53,520 --> 00:14:54,720
When is this going to start to change?

167
00:14:55,140 --> 00:14:58,960
And I think the answer is now and probably over the last several years.

168
00:14:58,960 --> 00:15:06,920
But still, for a lot of people, it needs to be easier than this big engineering project where you need to build stuff from scratch and DIY everything.

169
00:15:07,040 --> 00:15:10,700
The easier you can make it to run, I guess we would call cloud-native applications, the better.

170
00:15:11,100 --> 00:15:16,340
I think there's always a, do you need microservices?

171
00:15:16,700 --> 00:15:18,420
Will a monolith work for you?

172
00:15:18,540 --> 00:15:20,460
And I think the answer is yes.

173
00:15:20,500 --> 00:15:23,680
For certain situations, those are just fine.

174
00:15:23,680 --> 00:15:32,100
I mean, the principles in how you organize your monolith and how you organize your microservices are still similar.

175
00:15:32,460 --> 00:15:43,500
You want a well-organized monolith, even if you're not doing microservices, for example, and don't need some of the things that Spring Cloud provides because you just have a single application that you're running.

176
00:15:43,820 --> 00:15:54,820
And then finally, Spencer, I want to ask, so much naturally of the Spring conversation focuses on developers and why developers should care about a new Spring.

177
00:15:55,160 --> 00:15:58,000
Is there a rationale for executives or maybe up to the CIO?

178
00:15:58,220 --> 00:16:02,040
Why should they care about a development framework like Spring?

179
00:16:02,100 --> 00:16:12,020
I'd like to hear from you where it ties into bigger picture items, whether that's modernization broadly or digital transformation or whatever these terms that folks care about are.

180
00:16:13,440 --> 00:16:13,920
Sure.

181
00:16:13,920 --> 00:16:26,080
I'll start with a tweet that I saw recently, and it was someone complaining about the power of the laptops that some enterprises are buying for their developers.

182
00:16:27,200 --> 00:16:41,500
And through that conversation, someone had done a blog post a number of years ago that moving from a spinning hard drive to a solid state drive,

183
00:16:42,060 --> 00:16:49,480
the cost of the drive versus the time saved was in a few days, the drive paid for itself.

184
00:16:50,160 --> 00:16:56,940
And just from a productivity standpoint, I see similar things with Spring.

185
00:16:57,080 --> 00:17:00,920
Spring and Spring experience is a thing in the industry.

186
00:17:01,120 --> 00:17:04,620
You can hire someone with experience using Spring Boot.

187
00:17:04,620 --> 00:17:18,600
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.

188
00:17:19,100 --> 00:17:23,560
If they want to do training, we can come in and train them, things like that.

189
00:17:23,560 --> 00:17:38,420
And then, and even more recently is the Pivotal Spring runtime, the commercial support for the Spring stack standalone on wherever you're deploying, as well as the JVM that goes along with it.

190
00:17:38,480 --> 00:17:42,480
So you get supported JVM and supported Spring projects.

191
00:17:42,480 --> 00:17:52,360
So I think you have this spectrum of things from developer productivity to training to commercial support that I think are all well worth it.

192
00:17:52,920 --> 00:17:55,220
Well, listen, we are out of time, Spencer.

193
00:17:55,360 --> 00:17:56,080
Thank you so much.

194
00:17:56,420 --> 00:17:57,200
Thank you for having me.

195
00:17:57,420 --> 00:17:58,460
And thanks, everyone, for listening.

196
00:17:58,860 --> 00:18:00,100
There you have it, folks.

197
00:18:00,560 --> 00:18:08,700
If you're writing Java apps and not using Spring or using Spring and not taking full advantage of it, I hope you learned something here that will convince you to give it a try.

198
00:18:09,260 --> 00:18:12,160
And for more information, you can always visit spring.io.

199
00:18:12,160 --> 00:18:24,560
For more episodes of this podcast, as well as blog posts and guides to help you navigate the landscape of digital transformation and its underlying technologies, visit pivotal.io slash intersect.

200
00:18:24,860 --> 00:18:26,880
That is it until the next episode.

201
00:18:27,420 --> 00:18:28,420
Thank you.
