SlideShare a Scribd company logo
Go cloud native!
Don’t build legacy.
Microservices
Reaction to monoliths and
heavy weight services.
As well as cloud environments.
Monoliths hurt.
Developer productivity takes a hit.
Hard to get your head wrapped
around a huge code base.
Long ramp up times
for new developers.
Small change results in building
and deploying everything.
Scaling means scaling the
entire application!
Not just the part that
needs more capacity.
Hard to evolve.
We’re all familiar with the second
law of thermodynamics…
Otherwise known as a
teenagers bedroom.
The universe really
wants to be disordered.
Software is not immune
from these forces!
Modularity tends to
break down over time.
Over time, takes longer to
add new functionality.
Frustration has given birth to a
“new�� architectural style.
Enter the microservice.
No “one” definition.
In the eye of the beholder…
https://mobile.twitter.com/littleidea/status/500005289241108480
Anything that can be
rewritten two weeks or less.
Evolving to Cloud-Native - Nate Schutta (2/2)
Think in terms of characteristics.
Suite of small, focussed services.
Do one thing, do it well.
Linux like - pipe simple things
together to get complex results.
Independently deployable.
Independently scalable.
Evolve at different rates.
Freedom to choose the
right tech for the job.
Built around business capabilities.
High cohesion, low coupling…
Applied to services.
It is just another approach. An
architectural style. A pattern.
Evolving to Cloud-Native - Nate Schutta (2/2)
Despite what some
developers may have said.
Evolving to Cloud-Native - Nate Schutta (2/2)
Use them wisely.
Please Microservice Responsibly.
https://content.pivotal.io/blog/should-that-be-a-
microservice-keep-these-six-factors-in-mind
–Simon Brown
“If you can't build a monolith, what makes
you think microservices are the answer?”
http://www.codingthearchitecture.com/2014/07/06/
distributed_big_balls_of_mud.html
Sometimes the right answer is a
modular monolith…
https://www.youtube.com/watch?v=kbKxmEeuvc4
Serverless
From IaaS to CaaS to PaaS…
What about serverless?
Functions.
As a Service.
I hear that is *the* in thing now.
But we just refactored to cloud
native microservices…
!
( °□°)
Don’t throw that code away just yet!
Fair to say FaaS is a
subset of serverless.
Though many use the
terms interchangeably.
First things first. There
are still servers.
We are just (further)
abstracted away from them.
We don’t have to spend time
provisioning, updating, scaling…
In other words it is
someone else’s problem.
https://mobile.twitter.com/samnewman/status/952610105169793025
https://mobile.twitter.com/starbuxman/status/959366771462496256
IaaS
Containers
Container
Container
Scheduling
Primitives for
Networking,
Routing, Logs and
Metrics
Platform
Application
Container Images
L7 Network
Logs, Metrics,
Monitoring
Services
Marketplace
Team, Quotas &
Usage
Container
Serverless
Function
Function Execution
Function Scaling
Event Stream
Bindings
Container
Developer
Provided
Tool
Provided
Different levels of abstraction.
Hardware
IaaS
Containers
Platforms
Serverless
More Flexibility
Fewer Standards
Lower Complexity
Operational Efficiency
Push as many workloads up the stack as feasible.
Veritable plethora of options.
AWS Lambda, Azure Functions,
Google Cloud Functions…
riff, OpenWhisk, Kubeless, Knative…
Definitely suffers from the
shiny new thing curse.
Evolving to Cloud-Native - Nate Schutta (2/2)
And everything that entails.
Evolving to Cloud-Native - Nate Schutta (2/2)
There *are* very good reasons
to utilize this approach!
But it isn’t just a new a way to cloud.
There are serious efficiency gains
to be had with this approach!
Development efficiencies.
Functions push us further up
the abstraction curve.
Allows us to focus on
implementation not infrastructure.
Do you know what OS your
application is running on?
Do you care?
What *should* you care about?
Where is the “value line” for you?
We want to get out of the business
of “undifferentiated heavy lifting”.
Focus on business problems,
not plumbing problems.
Resource efficiencies.
Function hasn’t been
called recently?
Terminate the container.
Request comes in? Instance
springs into existence.
First million (or two)
requests are free*.
* Additional fees may apply.
For example: data transfer fees
or other services you leverage.
Functions aren’t free however.
A fractional cost per request.
Charged based on # of requests,
run duration & resource allocation.
Can be challenging to determine
just how much it will cost…
But for certain workloads,
it is very cost effective.
Operational efficiencies.
Serverless ops?
Again, less for us to worry about.
Rely on a platform.
Very valuable tool.
It isn’t a good fit for every workload.
https://twitter.com/ntschutta/status/1010109588832702464
But you knew that.
Plan the journey
Before you start, figure
out where you are.
You need to assess the applications.
Some will be great
candidates, others…
We need to understand a few
things about our applications.
Technical characteristics.
What is the tech stack?
What version are we on?
How many users?
How many transactions per
second (estimate)?
What components do we use?
What 3rd party things does the
application use?
What are the data integrations?
What is the data access technology?
Do we use any internal frameworks?
Are there any batch jobs?
Do we have CI/CD? What are
we using to build the apps?
What do we have for test coverage?
We need to assess the
refactoring effort.
Look for certain red flags.
Vendor dependencies.
Writing to the file system.
Reading from the file system.
Long startup times.
Long shut down times.
Non-HTTP protocols.
Hard coded configuration.
Container based shared state.
Distributed transactions.
Evaluate your applications for
12 Factors compatibility.
Again, it is a sliding scale.
How far out of alignment is the app?
This effort requires
application expertise.
And it will take time.
At least a few hours per.
Consider building a little
application for all the data.
Excel is not an application
platform. Cough.
Unless you have a small portfolio…
Assessments will bucket
your applications.
Low/Medium/High.
Or red/yellow/green.
Whatever works!
“Cutoffs” likely arbitrary.
Sanity check it.
What is the business value
of the application?
Consider the life cycle
of the application.
Is it strategic?
Is it something we’re
going to invest in?
Or is it going to be retired soon?
Retirement isn’t a hard no though.
*When* matters. A lot.
“When I started, this app
was marked sunset…”
That was 25 years ago. Still running.
If it is going away in a few
months…not worth it.
Going to be around for a
few years, probably is.
Now we need to do some planning.
What is your desired end state?
Cloud native? Just get it
running on cloud?
Legacy apps will require refactoring.
How long does it take to
forklift an application?
https://blog.pivotal.io/pivotal-cloud-foundry/features/the-forklifted-application
https://twitter.com/KentBeck/status/596007846887628801
Strongly recommend
a pilot app or two.
Get a feel for it.
Usually a few weeks or so.
Ask the experts.
https://pivotal.io/application-transformation
Consider staffing up a “lab”
team with expertise.
Help teams migrate.
Should *pair* with the
application area.
Need to grow the skills.
Create a roadmap.
When can the applications move?
It doesn’t have to be
the entire application!
Some deployable units will
be easy, others hard.
Move what you can.
Again, the terminology
can be challenging…
Look to opportunistically
migrate what you can.
But have a rough idea of when.
Does that satisfy your stakeholders?
What can you do to
accelerate the plan?
Good luck!
September 24–27, 2018

Washington DC

Gaylord, National Harbor Discount Code

S1P200_NSchutta
Register
Today &
Save!
Nathaniel T. Schutta
@ntschutta
ntschutta.io
Thanks!
I’m a Software
Architect,
Now What?
with Nate Shutta
Modeling for
Software
Architects
with Nate Shutta
Presentation
Patterns
with Neal Ford & Nate Schutta

More Related Content

Evolving to Cloud-Native - Nate Schutta (2/2)